【问题标题】:Copy files from Amazon s3 to hadoop将文件从 Amazon s3 复制到 hadoop
【发布时间】:2016-07-31 09:48:23
【问题描述】:

我发现了类似的问题,但没有一个回答我的问题:使用 hadoop distcp 或 s3-dist-cp 在 Hadoop 和 S3 之间移动文件时,我应该将凭据存储在哪里?

我创建了一个新的 Amazon EMR 集群,现在我想从 S3 存储桶复制文件。以下方法不起作用:

  1. 使用hadoop distcp 我在 url 中编码了这样的凭据:hadoop distcp s3n://<awsaccesskey>:<awssecrectkey>@<backetname>/path hdfs://<path>,但似乎该软件无法处理包含 +/ 的 aws 密钥,这种情况经常发生。使用 url 编码对密钥进行编码不起作用,但会产生另一个错误,例如:

java.lang.IllegalArgumentException: 存储桶名称不得格式化为 IP 地址

java.lang.IllegalArgumentException:存储桶名称不应包含大写字符

  1. 使用 s3-dist-cp 所以我使用了“更好”的方法,但结果相同。

如果凭据包含特殊字符,我如何对凭据进行编码或将它们存储在哪里?我还尝试了 ENV 变量(例如 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY)但没有成功。一些教程提到了core-site.xml 文件,但没有位置。所以我搜索它并且有多个匹配项。教程说必须将此文件复制到所有节点,但为什么呢?

【问题讨论】:

    标签: hadoop amazon-s3


    【解决方案1】:

    您是否尝试过使用特殊字符对密钥进行 URL 编码?

    【讨论】:

    • 是的,但没有成功。
    【解决方案2】:

    试试下面:

    AWS_ACCESS_KEY_ID=<awsaccesskey>
    AWS_SECRET_ACCESS_KEY=<awssecrectkey>
    hadoop distcp -Dfs.s3a.access.key="${AWS_ACCESS_KEY_ID}" -Dfs.s3a.secret.key="${AWS_SECRET_ACCESS_KEY}" s3a://<bucketname>/<path> <hdfs_path>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      相关资源
      最近更新 更多