Spark からの OpenStack Swift へのアクセス

Spark の Hadoop InputFormat のサポートにより、Hadoop と同じ URI 形式を使用して OpenStack Swift のデータを処理できます。Swift のパスを swift://container.PROVIDER/path 形式の URI として入力に指定できます。core-site.xml または SparkContext.hadoopConfiguration 経由で Swift セキュリティ認証情報も設定する必要があります。現在の Swift ドライバでは、Swift が Keystone 認証方式またはその Rackspace 固有の前身を使用する必要があります。

Swift をより優れたデータの局所性用に設定する

必須ではありませんが、Swift のプロキシ サーバを list_endpoints で設定して、より優れたデータの局所性を持たせることをお勧めします。詳細情報は こちら

依存関係

Spark アプリケーションには hadoop-openstack 依存関係を含める必要があり、使用している特定のバージョンの spark に対応する hadoop-cloud モジュールを含めることでできます。たとえば、Maven サポートの場合は次のものを pom.xml ファイルに追加します。

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

設定パラメータ

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

次のテーブルは、Keystone の必須パラメータのリストです。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 リージョン 必須
fs.swift.service.PROVIDER.public 公開(クラウド外)エンドポイントとプライベート(クラウド内、転送料金なし)エンドポイントのどちらを使用するかを示す 必須

たとえば、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.tenantfs.swift.service.PROVIDER.usernamefs.swift.service.PROVIDER.password は秘密情報を含み、それらを core-site.xml に保持することが常に適切な方法というわけではないことに注意してください。spark-shell を介して Spark を実行する場合は、これらのパラメータをテスト目的で core-site.xml に保持することをお勧めします。ジョブ送信の場合は、sparkContext.hadoopConfiguration を介して提供する必要があります。