当我运行我的 MRJob 脚本并使用 CLI 为工作启动 EMR 集群时,我试图弄清楚如何将数据从 S3 加载到集群中的 HDFS 上。我想将此作为设置过程的一部分。
我搜索了许多地方以深入了解与 MRJob 一起使用的正确语法,以便将我的 S3 数据预加载到 HDFS 中。我仍在了解术语和流程。
MRJob 在其文档中提到了 JarStep 和 Hadoop Streaming:https ://pythonhosted.org/mrjob/guides/writing-mrjobs.html
Yelp 对此有一个讨论主题:https ://github.com/Yelp/mrjob/pull/665
AWS 有一个工具 S3DistCp 来提供加载语法,并且示例与 Java 相关。(我不能发布超过 2 个链接,但谷歌搜索会提供更多信息)
我的方法是将 JarStep 作为 MRStep 之前的一个步骤包含在我的 MRJob 脚本的步骤方法中。我试图将 S3DistCp 命令作为参数传递。
def steps(self):
return [JarStep(name='jar-step', jar='s3://<bucket to jar file>',
args=['--src,s3://<bucket to data>, --dest,hdfs:///<bucket>']),
MRStep(...)
]
我已经尝试了一些变体,有无引号或引号分隔输入和输出或逗号之间的空格。我得到的主要错误是“线程'main'java.lang.RuntimeException中的异常:参数--src,,--desc,,不匹配。
我发现的示例类似于以下内容:
args=['naive-bayes', JarStep.INPUT, JarStep.OUTPUT]
不清楚 JarStep.INPUT 是否应该被替换或在其他地方定义。我开始认为我应该在 --jobconf 下的 CLI 上传递 java 命令,以便它与 S3DistCp 文档保持一致。
任何想法或只是简单的例子,请发送给我。