我在 Amazon EC2 上设置了一个包含 5 个节点的 Hadoop 集群。现在,当我登录到主节点并提交以下命令时
bin/hadoop jar <program>.jar <arg1> <arg2> <path/to/input/file/on/S3>
它会引发以下错误(不是同时。)当我不将斜杠替换为“%2F”时会引发第一个错误,而当我将斜杠替换为“%2F”时会引发第二个错误:
1) Java.lang.IllegalArgumentException: Invalid hostname in URI S3://<ID>:<SECRETKEY>@<BUCKET>/<path-to-inputfile>
2) org.apache.hadoop.fs.S3.S3Exception: org.jets3t.service.S3ServiceException: S3 PUT failed for '/' XML Error Message: The request signature we calculated does not match the signature you provided. check your key and signing method.
笔记:
1)当我提交 jps 以查看 Master 上正在运行哪些任务时,它只是显示
1116 NameNode
1699 Jps
1180 JobTracker
离开 DataNode 和 TaskTracker。
2)我的密钥包含两个“/”(正斜杠)。我将它们替换为 S3 URI 中的“%2F”。
PS:该程序在单节点上运行时在 EC2 上运行良好。只有在我启动集群时,我才会遇到与将数据从 S3 复制到 HDFS 或从 HDFS 复制到 HDFS 相关的问题。而且, distcp 是做什么的?即使在我将数据从 S3 复制到 HDFS 之后,我是否还需要分发数据?(我想,HDFS 会在内部处理这个问题)
如果您可以将我引导到一个链接,该链接解释了使用 Amazon EC2/S3 在 hadoop 集群上运行 Map/reduce 程序。那太好了。
问候,
迪帕克。