【发布时间】:2016-07-31 09:48:23
【问题描述】:
我发现了类似的问题,但没有一个回答我的问题:使用 hadoop distcp 或 s3-dist-cp 在 Hadoop 和 S3 之间移动文件时,我应该将凭据存储在哪里?
我创建了一个新的 Amazon EMR 集群,现在我想从 S3 存储桶复制文件。以下方法不起作用:
- 使用
hadoop distcp我在 url 中编码了这样的凭据:hadoop distcp s3n://<awsaccesskey>:<awssecrectkey>@<backetname>/path hdfs://<path>,但似乎该软件无法处理包含+或/的 aws 密钥,这种情况经常发生。使用 url 编码对密钥进行编码不起作用,但会产生另一个错误,例如:
java.lang.IllegalArgumentException: 存储桶名称不得格式化为 IP 地址
或
java.lang.IllegalArgumentException:存储桶名称不应包含大写字符
- 使用 s3-dist-cp 所以我使用了“更好”的方法,但结果相同。
如果凭据包含特殊字符,我如何对凭据进行编码或将它们存储在哪里?我还尝试了 ENV 变量(例如 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY)但没有成功。一些教程提到了core-site.xml 文件,但没有位置。所以我搜索它并且有多个匹配项。教程说必须将此文件复制到所有节点,但为什么呢?
【问题讨论】: