SparkからOpenStack Swiftへのアクセス

SparkによるHadoopのInputFormatのサポートにより、Hadoopと同じURI形式を使ってOpenStackSwift内のデータを処理することができます。swift://container.PROVIDER/pathの形式のURIを入力として使うことで、Swift内のパスを指定することができます。core-site.xml あるいは SparkContext.hadoopConfiguration を使って、Swiftセキュリティの証明書を設定する必要もあるでしょう。現在のSwiftドライバーはKeystone認証メソッドを使うためにSwiftあるいはその Rackspace固有の前任者を必要とします。

より良いデータローカリティのためのSwiftの設定

必須ではありませんが、より良いデータローカリティのためにlist_endpointsを使ってSwiftのproxyサーバを設定することをお勧めします。更なる情報はここで利用可能です。

依存

Sparkアプリケーションは hadoop-openstack 依存性を持つ必要があります。これはsparkが使用する特定のバージョンについての hadoop-cloudモジュールを含むことで行うことができます。例えば、Mavenサポートについては、以下をpom.xml ファイルに追加します:

<dependencyManagement>
  ...
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>hadoop-cloud_2.11</artifactId>
    <version>${spark.version}</version>
  </dependency>
  ...
</dependencyManagement>

設定パラメータ

core-site.xmlを作成し、それをSparkの conf ディレクトリの中に配置します。設定される必要があるパラメータの主なカテゴリはKeystoneに必要とされる認証パラメータです。

以下の表はKystoneの必須のパラメータのリストを含んでいます。PROVIDER は何らかの(英数字の)名前です。

プロパティ名意味必要条件
fs.swift.service.PROVIDER.auth.url Keystone 認証 URL 必須
fs.swift.service.PROVIDER.auth.endpoint.prefix Keystone エンドポイントのプリフィックス オプション
fs.swift.service.PROVIDER.tenant テナント 必須
fs.swift.service.PROVIDER.username ユーザ名 必須
fs.swift.service.PROVIDER.password パスワード 必須
fs.swift.service.PROVIDER.http.port HTTP ポート 必須
fs.swift.service.PROVIDER.region Keystone region 必須
fs.swift.service.PROVIDER.public public (クラウド外)あるいはprivate (クラウド内; 転送料無し)のエンドポイントを使うかどうかを示します。 必須

例えば、PROVIDER=SparkTest とkeystoneがテナントtestのために定義されたパスワードtesting を持つユーザtesterを含む場合を仮定します。core-site.xml は以下を含む必要があります:

<configuration>
  <property>
    <name>fs.swift.service.SparkTest.auth.url</name>
    <value>http://127.0.0.1:5000/v2.0/tokens</value>
  </property>
  <property>
    <name>fs.swift.service.SparkTest.auth.endpoint.prefix</name>
    <value>endpoints</value>
  </property>
    <name>fs.swift.service.SparkTest.http.port</name>
    <value>8080</value>
  </property>
  <property>
    <name>fs.swift.service.SparkTest.region</name>
    <value>RegionOne</value>
  </property>
  <property>
    <name>fs.swift.service.SparkTest.public</name>
    <value>true</value>
  </property>
  <property>
    <name>fs.swift.service.SparkTest.tenant</name>
    <value>test</value>
  </property>
  <property>
    <name>fs.swift.service.SparkTest.username</name>
    <value>tester</value>
  </property>
  <property>
    <name>fs.swift.service.SparkTest.password</name>
    <value>testing</value>
  </property>
</configuration>

fs.swift.service.PROVIDER.tenant, fs.swift.service.PROVIDER.username, fs.swift.service.PROVIDER.password は機密情報を含み、それらをcore-site.xml に保持することは常に良い方法ではないことに注意してください。spark-shellを使ってSparkを実行している場合にテストの目的でそれらのパラメータを core-site.xml に保持することを提案します。ジョブの提出のためには、それらはsparkContext.hadoopConfigurationを使って提供される必要があります。

TOP
inserted by FC2 system