HADOOP 备份至 S3

s3、s3n、s3a 的关系

s3 是最老版本的一个 S3 实现,s3n(各个 hadoop 版本都有)是基于 jets3t 的一个 native 的 S3 实现方案,s3a(2.7 版本以后)是功能最全,最完善的一个 S3 实现。

如果想要灵活地控制 endpoint 之类的参数,首选当然是 s3a,不行的情况下,s3n 也是可以工作的。

hadoop2.6

对于 hadoop2.7 以前的版本,通过 jets3t 读写 s3。如果使用 s3/s3a 去读写的话,会发现 hadoop2.6 使用的是 S3 signature-v2,而 ceph luminous 版本开始就只支持 v4了。此外,hadoop2.6 的 s3/s3a 不支持配置 endpoint。

首先在 /etc/hadoop/conf 目录下放置 jets3t.properties 配置文件,自定义相关的参数:

# s3的地址,填写ceph的内网地址192.168.1.22
s3service.s3-endpoint=[ceph地址]
# 不适用https协议
s3service.https-only=false
s3service.s3-endpoint-http-port=80
#s3service.s3-endpoint-https-port=8080
# 不适用带bucket名的域名
s3service.disable-dns-buckets=true

然后使用如下的命令读写

hdfs dfs -Dfs.s3n.awsAccessKeyId=[access key] -Dfs.s3n.awsSecretAccessKey=[secret key] -ls s3n://bucket-name

虽然可以读写,然后不能使用 distcp,因为 distcp 需要跨节点保持 session,hadoop2.6 的版本还不能支持。

hadoop2.7+

haodop2.7+ 的版本就容易很多了,直接使用以下命令即可实现跨集群复制:

hadoop distcp -Dfs.s3a.access.key=[access key] -Dfs.s3a.secret.key=[secret key] -Dfs.s3a.endpoint=[oss address] -Dfs.s3a.path.style.access=true -Dfs.s3a.connection.ssl.enabled=false /tmp/tmp.txt s3a://bucket-name/
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我有两个不好的习惯: 第一、延迟行动;第二、不做计划; 比如,今天下午本该完成一件非常重要的工作,可是我不断地把这...
    赵龙在学习阅读 384评论 0 0
  • 最近看了一篇李开复先生的文章《向死而生》,颇有感慨!(如果您不认识李开复,可以在我微信圈里查看,这里不再赘述...
    艾就爱了小春赵成阅读 366评论 0 0
  • 我站在南方 看燕子从北方飞来 我跑上去问它 你遇到他了吗 燕子不说话 好吧,或许我该问一下别的燕子 它忽然飞到我面...
    田间一只鸥阅读 223评论 0 0
  • 今日主题:节约纸张,爱护树木~ (图画灵感来自于楼下的电梯广告
    啵叽小猫阅读 227评论 0 3
  • 21组 陈子明 2017 年 11月 2日,周3,晴 身修家和 美丽中国 种子践行日记 地方 佛山 第55天 # ...
    大山之子Deron阅读 154评论 0 0