從 Spark 存取 OpenStack Swift
Spark 支援 Hadoop InputFormat,讓它能使用與 Hadoop 相同的 URI 格式處理 OpenStack Swift 中的資料。您可以透過 swift://container.PROVIDER/path
格式的 URI 將 Swift 中的路徑指定為輸入。您也需要透過 core-site.xml
或 SparkContext.hadoopConfiguration
設定您的 Swift 安全認證。目前的 Swift 驅動程式需要 Swift 使用 Keystone 認證方法,或其 Rackspace 特定的前身。
設定 Swift 以獲得更好的資料區域性
雖然不是強制性的,但建議使用 list_endpoints
設定 Swift 的代理伺服器,以獲得更好的資料區域性。更多資訊 在此處。
相依性
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 包含使用者 tester
,密碼為 testing
,定義為租戶 test
。則 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
提供這些參數。