2013-08-05 44 views
0

我正在试验一个名为vowpal wabbit的机器学习包。 为了我们的Hadoop集群上运行vowpal wabbit,它建议做:将hive中“select”的输出作为Hadoop jar输入文件的输入

hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.0.0-mr1-cdh4.3.0.jar \ 
    -Dmapred.job.name="vw allreduce $in_directory" \ 
    -Dmapred.map.tasks.speculative.execution=true \ 
    -Dmapred.reduce.tasks=0 \ 
    -Dmapred.child.java.opts="-Xmx100m" \ 
    -Dmapred.task.timeout=600000000 \ 
    -Dmapred.job.map.memory.mb=1000 \ 
    -input <in_directory> \ 
    -output <out_directory> \ 
    -file /home/produser/vowpal_wabbit/vowpalwabbit/vw \ 
    -file /usr/lib64/libboost_program_options.so.5 \ 
    -file /lib64/libz.so.1 \ 
    -file /home/produser/vowpal_wabbit/cluster/runvw-yarn.sh \ 
    -mapper /home/produser/vowpal_wabbit/cluster/runvw-yarn.sh \ 
    -reducer NONE 

其中runvw-yarn.sh,作为一个映射,将每台机器上调用vowpal wabbit的命令与储存在其上的数据块

我在传递数据之前必须重新格式化数据。我尝试使用hive查询从网格中选择数据,重新格式化数据,然后将其传递给“hadoop jar”命令。但我不想将重新格式化的数据存储在我们的群集上以浪费空间。所以我不知道在“hadoop jar”命令中的“-input”选项后应该放什么。

所以我的问题是,有没有办法在“-input”命令之后加入“stdin”之类的东西? 在我选择数据之后,我应该在哪里将“hadoop jar”命令放入我的配置单元查询中?

P.S.我发现“配置单元 - 服务jar”,它看起来像hadoop jar类似,这在这里有帮助吗?

谢谢!几周前我刚开始学习hadoop和hive,所以如果你有更好的设计或解决方案,请随时告诉我。我可以改写每一件事。

+0

您可以存储重新格式化的数据并在作业完成后删除它?我认为hadoop不能支持你所说的“stdin”,因为它是一个本地的“stdin”,但map reduce任务可能会在其他节点上运行。 – zsxwing

回答

0

看来你会运行两轮Mapreduce:第一个是Hive查询,第二个是MapReduce流。就我而言,要使用多轮Mapreduce作业,我们总是需要在回合之间写入/读取/读取hdfs。这就是为什么MapReduce总是被称为批处理操作的原因。

所以,你的问题的答案是NO。