我已将大型二进制文件拆分为 (2Gb) block 并将其上传到 Amazon S3。 现在我想将其重新连接到一个文件并使用我的自定义进行处理
我尝试过运行
elastic-mapreduce -j $JOBID -ssh \
"hadoop dfs -cat s3n://bucket/dir/in/* > s3n://bucket/dir/outfile"
但由于 -cat 将数据输出到我的本地终端而失败 - 它无法远程工作...
我怎样才能做到这一点?
附注我尝试将 cat 作为流式 MR 作业运行:
den@aws:~$ elastic-mapreduce --create --stream --input s3n://bucket/dir/in \
--output s3n://bucket/dir/out --mapper /bin/cat --reducer NONE
这项工作已成功完成。但。我在 dir/in 中有 3 个文件部分 - 现在我在/dir/out 中有 6 个文件部分
part-0000
part-0001
part-0002
part-0003
part-0004
part-0005
文件 _SUCCESS ofcource 不是我输出的一部分...
所以。如何加入之前分割的文件?
最佳答案
所以。我找到了解决方案。也许不是更好 - 但它正在发挥作用。
所以。我已经使用引导操作创建了一个 EMR 作业流程
--bootstrap-action joinfiles.sh
在 joinfiles.sh 中,我使用 wget 从 S3 下载文件片段,使用常规 cat a b c > abc 将它们连接起来。
之后我添加了一个 s3distcp,它将结果复制回 S3。 (示例可以在: https://stackoverflow.com/a/12302277/658346 找到)。 就这些。
关于amazon-s3 - EMR 如何将文件合并为一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055595/