2014-07-11 23 views
0

当我运行我的MRJob脚本并使用CLI为工作启动EMR集群时,我试图弄清楚如何将数据从S3加载到集群中的HDFS上。我想做这个作为安装过程的一部分。在运行MRJob中的步骤之前,将S3数据加载到HDFS的特定语法示例是什么?

我已经搜索了很多地方,以便深入了解与MRJob一起使用的正确语法,以便将我的S3数据预加载到HDFS中。我仍然在加快术语和流程的速度。

MRJob提到JarStep和Hadoop流在其文档:https://pythonhosted.org/mrjob/guides/writing-mrjobs.html

Yelp的对这个讨论线程:https://github.com/Yelp/mrjob/pull/665

AWS有一个工具S3DistCp为负载提供语法和例子出现相关的Java 。 (我不能发布超过2个链接,但谷歌搜索将提供更多信息)

我的方法是在MRJob脚本的MRS步骤方法中将JarStep作为步骤之前的步骤。我试图传递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 ,,不匹配。

我发现的例子与以下内容类似:如果JarStep.INPUT应及时更换或其它地方定义我开始想,我应该通过下--jobconf的CLI java的命令,所以它对齐到S3DistCp文档

args=['naive-bayes', JarStep.INPUT, JarStep.OUTPUT] 

它不清楚。

任何想法或只是简单的例子,请发送我的方式

回答

0

如果你希望单个文件复制到HDFS使用命令像下面

Hadoop的FS -cp S3:// < s3bucket>/<路径> HDFS:///输出

或者使用S3DistCp如下

./elastic-mapreduce --jobflow J-3GY8JC4179IOJ --jar \ /home/hadoop/lib/emr-s3distcp-1.0.jar \ --arg --s3Endpoint --arg“S3-EU-西-1.amazonaws.com'\ --arg --src --arg's3:// myawsbucket/logs/j-3GY8JC4179IOJ/node /'\ --arg --dest --arg'hdfs:///output'\ - -arg --srcPattern --arg'。* [a-zA-Z,] +'

+0

感谢您对Sandesh的快速响应。我试图用我用来启动EMR实例的命令或在MRJob脚本中包含该命令。据我所知,你列出的两个选项需要EMR已经运行。您是否知道MRJob脚本中会有一个示例,作为MRJob bash命令的一部分来启动作业或在conf文件中? – nyghtowl

+0

我希望有人给你答案,我有同样的问题 –

相关问题