【问题标题】:DistCp from Local Hadoop to Amazon S3从本地 Hadoop 到 Amazon S3 的 DistCp
【发布时间】:2013-05-31 16:02:32
【问题描述】:

我正在尝试使用 distcp 将一个文件夹从我的本地 hadoop 集群 (cdh4) 复制到我的 Amazon S3 存储桶。

我使用以下命令:

hadoop distcp -log /tmp/distcplog-s3/ hdfs://nameserv1/tmp/data/sampledata  s3n://hdfsbackup/

hdfsbackup 是我的 Amazon S3 存储桶的名称。

DistCp 因未知主机异常而失败:

13/05/31 11:22:33 INFO tools.DistCp: srcPaths=[hdfs://nameserv1/tmp/data/sampledata]
13/05/31 11:22:33 INFO tools.DistCp: destPath=s3n://hdfsbackup/
        No encryption was performed by peer.
        No encryption was performed by peer.
13/05/31 11:22:35 INFO hdfs.DFSClient: Created HDFS_DELEGATION_TOKEN token 54 for hadoopuser on ha-hdfs:nameserv1
13/05/31 11:22:35 INFO security.TokenCache: Got dt for hdfs://nameserv1; Kind: HDFS_DELEGATION_TOKEN, Service: ha-hdfs:nameserv1, Ident: (HDFS_DELEGATION_TOKEN token 54 for hadoopuser)
        No encryption was performed by peer.
java.lang.IllegalArgumentException: java.net.UnknownHostException: hdfsbackup
    at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:414)
    at org.apache.hadoop.security.SecurityUtil.buildDTServiceName(SecurityUtil.java:295)
    at org.apache.hadoop.fs.FileSystem.getCanonicalServiceName(FileSystem.java:282)
    at org.apache.hadoop.fs.FileSystem.collectDelegationTokens(FileSystem.java:503)
    at org.apache.hadoop.fs.FileSystem.addDelegationTokens(FileSystem.java:487)
    at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesInternal(TokenCache.java:130)
    at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesInternal(TokenCache.java:111)
    at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodes(TokenCache.java:85)
    at org.apache.hadoop.tools.DistCp.setup(DistCp.java:1046)
    at org.apache.hadoop.tools.DistCp.copy(DistCp.java:666)
    at org.apache.hadoop.tools.DistCp.run(DistCp.java:881)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at org.apache.hadoop.tools.DistCp.main(DistCp.java:908)
Caused by: java.net.UnknownHostException: hdfsbackup
    ... 14 more

我在所有节点的 core-site.xml 中配置了 AWS ID/Secret。

<!-- Amazon S3 -->
<property>
    <name>fs.s3.awsAccessKeyId</name>
    <value>MY-ID</value>
</property>

<property>
    <name>fs.s3.awsSecretAccessKey</name>
    <value>MY-SECRET</value>
</property>


<!-- Amazon S3N -->
<property>
    <name>fs.s3n.awsAccessKeyId</name>
    <value>MY-ID</value>
</property>

<property>
    <name>fs.s3n.awsSecretAccessKey</name>
    <value>MY-SECRET</value>
</property>

我可以使用 cp 命令从 hdfs 复制文件,没有任何问题。以下命令成功将 hdfs 文件夹复制到 S3

hadoop fs -cp hdfs://nameserv1/tmp/data/sampledata  s3n://hdfsbackup/

我知道有可用的 Amazon S3 优化 distcp (s3distcp),但我不想使用它,因为它不支持更新/覆盖选项。

【问题讨论】:

    标签: hadoop amazon-s3


    【解决方案1】:

    您似乎正在使用 Kerberos 安全性,不幸的是,如果启用了 Kerberos,则 Map/Reduce 作业目前无法访问 Amazon S3。你可以在MAPREDUCE-4548看到更多细节。

    他们实际上有一个补丁可以修复它,但目前不属于任何 Hadoop 发行版,所以如果您有机会从源代码修改和构建 Hadoop,您应该这样做:

    
    Index: core/org/apache/hadoop/security/SecurityUtil.java
    ===================================================================
    --- core/org/apache/hadoop/security/SecurityUtil.java   (révision 1305278)
    +++ core/org/apache/hadoop/security/SecurityUtil.java   (copie de travail)
    @@ -313,6 +313,9 @@
         if (authority == null || authority.isEmpty()) {
           return null;
         }
    +    if (uri.getScheme().equals("s3n") || uri.getScheme().equals("s3")) {
    +      return null;
    +    }
         InetSocketAddress addr = NetUtils.createSocketAddr(authority, defPort);
         return buildTokenService(addr).toString();
        }
    

    票证最近一次更新是在几天前,所以希望很快就会正式修补。

    更简单的解决方案是禁用 Kerberos,但这在您的环境中可能是不可能的。

    我已经看到,如果你的存储桶被命名为域名,你也许可以做到这一点,但我还没有尝试过,即使这听起来像是一个 hack。

    【讨论】:

    • 谢谢,我怀疑这是基于另一个具有类似异常堆栈跟踪的问题 (issues.apache.org/jira/browse/HADOOP-8408) 的安全相关问题。
    • 重命名存储桶以查看行域名对我不起作用。该补丁修复了问题。
    猜你喜欢
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2021-02-05
    • 2015-04-07
    • 2016-10-18
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多