HADOOP 备份至 S3

作者: zczhuohuo | 来源:发表于2018-05-15 21:56 被阅读10次

    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/
    

    相关文章

      网友评论

        本文标题:HADOOP 备份至 S3

        本文链接:https://www.haomeiwen.com/subject/uxtudftx.html