从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 提供。