【问题标题】:Take the output of "select" in hive as the input of Hadoop jar input file将 hive 中“select”的输出作为 Hadoop jar 输入文件的输入
【发布时间】:2013-08-05 20:52:31
【问题描述】:

我正在试验一个名为 vowpal wabbit 的机器学习包。 要在我们的 hadoop 集群上运行 vowpal wabbit,建议这样做:

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”命令放在哪里?

附:我找到了“hive --service jar”,它看起来像 hadoop jar,这在这里有用吗?

谢谢!几周前我刚开始学习 hadoop 和 hive,所以如果您有更好的设计或解决方案,请随时告诉我。我可以重写所有东西。

【问题讨论】:

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

标签: hadoop jar hive hadoop-streaming


【解决方案1】:

您似乎要运行两轮 Mapreduce:第一轮是 Hive 查询,第二轮是 MapReduce 流。就我而言,要使用多轮 Mapreduce 作业,我们总是需要在轮次之间向/从 hdfs 写入/读取。这就是为什么 MapReduce 总是被称为批处理操作。

所以,你的问题的答案是否定的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多