s3a
Ozone 通过 S3 Gateway 提供 S3 兼容的 REST 接口。Hadoop 的 S3A 文件系统(s3a://)是一种云连接器,它将 AWS S3 API 转换为 Hadoop 兼容的文件系统接口。Hive、Impala 和 Spark 等 Hadoop 风格的数据分析工具可以使用 Hadoop S3A 连接器访问 Ozone 的 S3 接口,因此无需修改应用即可在现有的 Hadoop 生态工具中使用 Ozone 桶。
本页介绍如何配置 Hadoop S3A 客户端以使用 Ozone 的 S3 Gateway(s3g),并提供使用 s3a 访问 Ozone s3g 的示例命令。有关 Ozone S3 Gateway 本身的详细信息(支持的 REST API、URL 方案、安全性),请参阅 S3 协议页面。有关 S3A 的更多信息,请参阅 Hadoop S3A 官方文档。
前提条件
一个已启用 S3 Gateway 的运行中的 Ozone 集群。你可以按照 S3 协议文档中的说明启动一个基于 Docker 的集群(包含 S3 Gateway)。
Ozone S3 端点(例如
http://localhost:9878或负载均衡器的 DNS 名称)。提供了
hadoop-aws模块的 Hadoop 发行版。请参阅 Hadoop S3A 官方文档:
为 Ozone 配置 S3A
启用 S3A 客户端
确保 hadoop-aws 模块位于客户端类路径中。在典型的 Hadoop 安装中:
- 在
hadoop-env.sh中设置HADOOP_OPTIONAL_TOOLS以包含hadoop-aws,或者 - 添加对
org.apache.hadoop:hadoop-aws的依赖,其版本与hadoop-common相同。
详情请参阅 Hadoop S3A 入门部分。
core-site.xml:将 S3A 指向 Ozone
在 Hadoop 配置(例如 core-site.xml)中添加以下属性,使 s3a:// URI 使用 Ozone S3 Gateway 而非 AWS S3:
<property>
<name>fs.s3a.endpoint</name>
<value>http://ozone-s3g-host:9878</value>
<description>
Ozone S3 Gateway endpoint. Replace with your s3g hostname or load balancer.
</description>
</property>
<property>
<name>fs.s3a.endpoint.region</name>
<value>us-east-1</value>
<description>
Logical region name required by the S3A client. Ozone does not enforce regions,
but this must be a valid-looking value.
</description>
</property>
<property>
<name>fs.s3a.path.style.access</name>
<value>true</value>
<description>
Ozone S3 Gateway defaults to path-style URLs (http://host:9878/bucket),
so S3A should use path-style access.
</description>
</property>这些属性遵循官方 S3A 连接设置,参见连接到 S3 存储。
Ozone 的推荐设置
Ozone S3 网关为 S3 分片上传(MPU)增加了 ETag 支持。对象版本控制以及其他一些 S3 行为可能仍与 AWS S3 存在差异。为避免与旧版客户端的兼容性问题,或在不使用 MPU 的情况下,可以在将 S3A 与 Ozone 配合使用时设置以下选项:
<property>
<name>fs.s3a.bucket.probe</name>
<value>0</value>
<description>
Disable the bucket existence probe at startup. This is the default in recent Hadoop
versions and is recommended for third-party S3-compatible stores such as Ozone.
</description>
</property>
<property>
<name>fs.s3a.change.detection.mode</name>
<value>none</value>
<description>Disable change detection; not applicable to Ozone S3.</description>
</property>凭据
Ozone 的 S3 网关使用与 AWS 相同的访问密钥和私有密钥模型。
- 如果未启用安全功能,可以使用任意
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY组合。 - 如果已启用安全功能,需通过
ozone s3 getsecret获取密钥和私有密钥(需要 Kerberos 认证)。详情参见 S3 协议 — 安全性 和 S3 安全配置 章节。
在 core-site.xml 中配置 S3A 凭据:
<property>
<name>fs.s3a.access.key</name>
<value>your-access-key</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>your-secret-key</value>
</property>或者,也可以使用环境变量,其文档见 通过 AWS 环境变量进行认证:
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"note
要生成和吊销 Ozone S3 密钥,请参阅 S3 协议页面的 Security(安全)部分。
caution
如果 Ozone S3 Gateway 通过 HTTPS 对外提供服务,JVM 必须信任该网关的 TLS 证书。Hadoop AWS 客户端(hadoop-aws)使用默认的 Java truststore;如果网关使用的是自定义或内部 CA,请将该 CA 添加到 JAVA_HOME/lib/security/jssecacerts,或相应地配置 JVM 的 truststore。否则,通过 S3A 连接 HTTPS 端点时可能会因证书错误而失败。
示例:通过 S3A 使用 hadoop fs 访问 Ozone
以下示例假定:
- Ostone S3 Gateway 可通过
http://localhost:9878访问 core-site.xml已按上文进行配置- 已存在一个 S3 存储桶(例如
bucket1)(可以使用aws s3api --endpoint http://localhost:9878 create-bucket --bucket bucket1创建它)
S3A URL 的格式为 s3a://<bucket>/<path>。存储桶对应于 /s3v 卷下的 Ozone 桶,或一个桶链接(bucket link)。
列出 Ozone S3 桶中的对象
hadoop fs -ls s3a://bucket1/使用 S3A 将本地文件上传到 Ozone
hadoop fs -put /data/local-file.txt s3a://bucket1/path/local-file.txt从 Ozone 下载到本地或 HDFS
# To local filesystem
hadoop fs -copyToLocal s3a://bucket1/path/file.txt /tmp/from-ozone.txt
# Copy to HDFS
hadoop fs -cp s3a://bucket1/path/file.txt hdfs:///user/test/from-ozone.txt使用内联配置快速测试
如果你无法修改集群级别的 core-site.xml,可以在命令行中传入 S3A 选项。请将端点、存储桶和凭据替换为你自己的值:
hadoop fs \
-D fs.s3a.endpoint=http://localhost:9878 \
-D fs.s3a.endpoint.region=us-east-1 \
-D fs.s3a.path.style.access=true \
-D fs.s3a.bucket.probe=0 \
-D fs.s3a.change.detection.mode=none \
-D fs.s3a.access.key=your-access-key \
-D fs.s3a.secret.key=your-secret-key \
-ls s3a://bucket1/示例:在 HDFS 和 Ozone 之间使用 distcp
你可以将 S3A 作为 distcp 的源或目标,在 HDFS 和 Ozone 之间迁移数据。使用与上文相同的 S3A 配置。
从 HDFS 复制到 Ozone:
hadoop distcp hdfs:///data/source/dir s3a://bucket1/backup/dir从 Ozone 复制到 HDFS:
hadoop distcp s3a://bucket1/backup/dir hdfs:///data/restore/dir与 Ozone S3 文档的关系
本页从 Hadoop FileSystem 的角度(S3A 客户端)介绍如何使用 Ozone。有关 REST API 详情、支持的 S3 操作、存储桶链接以及 S3 安全性,请参阅 S3 协议 和 S3 安全 页面。
如需了解高级 S3A 选项(性能调优、加密、重试),请参阅官方的 Hadoop S3A 文档 及其子页面,例如 性能 和 加密。
评论
登录后参与评论
KnowForge