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.13</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 用に定義されたユーザー tester とパスワード testing があると仮定します。この場合、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 を介して提供する必要があります。