在 MRJob 中运行步骤之前将 S3 数据加载到 HDFS 的特定语法示例是啥?
Posted
技术标签:
【中文标题】在 MRJob 中运行步骤之前将 S3 数据加载到 HDFS 的特定语法示例是啥?【英文标题】:What is a specific syntax example to load S3 data to HDFS prior to running steps in MRJob?在 MRJob 中运行步骤之前将 S3 数据加载到 HDFS 的特定语法示例是什么? 【发布时间】:2014-07-11 07:19:01 【问题描述】:当我运行我的 MRJob 脚本并使用 CLI 启动 EMR 集群以进行工作时,我试图弄清楚如何将数据从 S3 加载到集群中的 HDFS 上。我想将此作为设置过程的一部分。
为了将我的 S3 数据预加载到 HDFS 中,我搜索了许多地方以深入了解与 MRJob 一起使用的正确语法。我仍在了解术语和流程。
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。我开始认为我应该在 CLI 上的 --jobconf 下传递 java 命令,以便它与 S3DistCp 文档保持一致。
任何想法或只是简单的例子,请发送给我。
【问题讨论】:
【参考方案1】:如果你想将单个文件复制到你的 hdfs 使用下面的命令
hadoop fs -cp s3://
或者如下使用S3DistCp
./elastic-mapreduce --jobflow j-3GY8JC4179IOJ --jar \ /home/hadoop/lib/emr-s3distcp-1.0.jar \ --arg --s3Endpoint --arg 's3-eu-west-1.amazonaws.com' \ --arg --src --arg 's3://myawsbucket/logs/j-3GY8JC4179IOJ/node/' \ --arg --dest --arg 'hdfs:///输出' \ --arg --srcPattern --arg '.*[a-zA-Z,]+'
【讨论】:
感谢 Sandesh 的快速响应。我正在尝试将该命令包含在用于启动 EMR 实例的命令或 MRJob 脚本中。据我了解,您列出的两个选项要求 EMR 已经在运行。您是否知道 MRJob 脚本中的示例,作为 MRJob bash 命令的一部分以启动作业或在 conf 文件中? 我希望有人能给你答案,我也遇到了同样的问题以上是关于在 MRJob 中运行步骤之前将 S3 数据加载到 HDFS 的特定语法示例是啥?的主要内容,如果未能解决你的问题,请参考以下文章
AWS Glue,加载到框架之前的数据过滤,命名 s3 对象