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