SparkからOpenStack Swiftへのアクセス

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

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

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

依存

Sparkアプリケーションは hadoop-openstack 依存性を持つ必要があります。例えば、Mavenサポートのために、以下をpom.xml ファイルに追加します:

<dependencyManagement>
  ...
  <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-openstack</artifactId>
    <version>2.3.0</version>
  </dependency>
  ...
</dependencyManagement>

設定パラメータ

core-site.xmlを作成し、それをSparkの conf ディレクトリの中に配置します。設定されなければならないパラメータの2つの主要なカテゴリがあります: Swiftドライバーの宣言と、Keystoneによって必要とされるパラメータ。

Swiftファイルシステムを使うためのHadoopの設定は以下によって行われます

プロパティ名
fs.swift.impl org.apache.hadoop.fs.swift.snative.SwiftNativeFileSystem

Keystone (v2.0)によって必要とされる追加のパラメータで、Swiftドライバーによって提供されなければなりません。それらのパラメータはKeystone内でSwiftにアクセスするために認証を行うために使われるでしょう。以下の表は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 全てのURLが公開されていることを示す 必須

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

<configuration>
  <property>
    <name>fs.swift.impl</name>
    <value>org.apache.hadoop.fs.swift.snative.SwiftNativeFileSystem</value>
  </property>
  <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