Hadoop Streaming

2019-03-28 14:00|来源: 网络

Hadoop版本:Hadoop-0.20.204

Hadoop的Streaming框架允许任何程序语言实现的可执行程序或者脚本在Hadoop MapReduce中使用,方便已有程序向Hadoop平台移植。Streaming的原理是用Java实现一个包装用户程序的MapReduce程序,该程序负责调用MapReduce Java接口获取key/value对输入,创建一个新的进程启动包装的用户程序,将数据通过管道传递给包装的用户程序处理,然后调用MapReduce Java接口将用户程序的输出切分成key/value对输出。Mapper重-input中读入数据(默认是一行一行读),然后提交到output。

如:

  1. $HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-0.20.204.0.jar \  
  2.     -input myInputDirs \  
  3.     -output myOutputDir \  
  4.     -mapper /bin/cat \  
  5. -reducer /bin/wc  

上面的四个参数是最基本的,

  1. -input myInputDirs:指定作业输入,myInputDirs可以是文件或者目录,可以使用*通配符,-input选项可以使用多次指定多个文件或目录作为输入。   
  2. -output myOutputDir:指定作业输出目录,myOutputDir必须不存在,而且执行作业的用户必须有创建该目录的权限,-output只能使用一次。   
  3. -mapper:指定mapper可执行程序或脚本,当然也可以是java类,必须指定且唯一。   
  4. -reducer:指定reducer可执行程序或脚本,同样也可以是java类,必须指定且唯一。   

其他更详细的参数如下:


其中:

[plain]
  1. -file, -cacheFile, -cacheArchive:分别用于向计算节点分发本地文件(特别是当可执行文件在本地时,一定要记得指定)、HDFS文件和HDFS压缩文件。   
  2. -inputformat, -outputformat:指定inputformat和outputformat Java类,用于读取输入数据和写入输出数据,分别要实现InputFormat和OutputFormat接口。如果不指定,默认使用TextInputFormat和TextOutputFormat。   
  3. -numReduceTasks:指定reducer的个数,如果设置-numReduceTasks 0或者-reducer NONE则没有reducer程序,mapper的输出直接作为整个作业的输出。   
  4. -combiner:指定combiner Java类,对应的Java类文件打包成jar文件后用-file分发。   
  5. -partitioner:指定partitioner Java类,Streaming提供了一些实用的partitioner实现。   
  6. -cmdenv NAME=VALUE:给mapper和reducer程序传递额外的环境变量,NAME是变量名,VALUE是变量值。   

相关问答

更多