从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
文件中:
...
org.apache.spark
hadoop-cloud_2.12
${spark.version}
...
配置参数
创建
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
应该包含:
fs.swift.service.SparkTest.auth.url
http://127.0.0.1:5000/v2.0/tokens
fs.swift.service.SparkTest.auth.endpoint.prefix
endpoints
fs.swift.service.SparkTest.http.port
8080
fs.swift.service.SparkTest.region
RegionOne
fs.swift.service.SparkTest.public
true
fs.swift.service.SparkTest.tenant
test
fs.swift.service.SparkTest.username
tester
fs.swift.service.SparkTest.password
testing
请注意
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
提供。