目前我有一个有3个节点的Hadoop集群(ubuntu)。
我想用Hadoop Streaming来运行python R脚本,但我不知道仅仅执行HS是否真的能让所有节点都能工作。
如果可以的话,请给我一个方向,让我在集群上运行Streaming。
谢谢你
Hadoop Streaming是一个内置的jarutility,它允许你使用任何可执行文件或脚本作为mapper或reducer来创建和运行MapReduce作业。
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper /bin/cat \
-reducer /bin/wc
在上面的命令中,mapper和reducer都是可执行文件,它们从stdin中读取输入(逐行)并将输出发送到stdout。该实用程序将创建一个 MapReduce 作业,将该作业提交给适当的群集,并监控该作业的进度,直到它完成。
-input: directoryfile-name 映射器的输入位置。
-output: directory-name reducer的输出位置。
-mapper: 可执行文件或脚本或 JavaClassName 所需的 Mapper 可执行文件。
-reducer: 可执行文件或脚本或JavaClassName Required Reducer可执行文件。
-file文件名:使映射器、还原器或组合器的可执行文件在计算节点上本地可用。
例1:一个用户定义的python可执行文件作为映射器。选项"-file myPythonScript.py "使python可执行文件作为作业提交的一部分运到集群机器上。
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper myPythonScript.py \
-reducer /bin/wc \
-file myPythonScript.py
例2:发送一个Java类作为参数给mapper或reducer。
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer /bin/wc
来源:Hadoop Streaming jar Hadoop Streaming jar