Hadoop Streaming 编写

Hadoop Streaming 编写

Mapreduce

mapreduce

Hadoop Streaming 命令行

$HADOOP_HOME/bin/hadoop jar streaming
options:
    (1)-input:输入文件路径
    (2)-output:输出文件路径
    (3)-mapper:用户自己写的mapper程序,可以是可执行文件或者脚本
    (4)-reducer:用户自己写的reducer程序,可以是可执行文件或者脚本
    (5)-file:打包文件到提交的作业中,可以是mapper或者reducer要用的输入文件,如配置文件,字典等。
    (6)-partitioner:用户自定义的partitioner程序
    (7)-combiner:用户自定义的combiner程序(必须用java实现)
    (8)作业的一些属性(以前用的是-jonconf)
        1)mapred.map.tasks:map task数目
        2)mapred.reduce.tasks:reduce task数目
        3)stream.map.input.field.separator/stream.map.output.field.separator: map task输入/输出数据的分隔符,默认均为\t。
        4)stream.num.map.output.key.fields:指定map task输出记录中key所占的域数目
        5)stream.reduce.input.field.separator/stream.reduce.output.field.separator:reduce task输入/输出数据的分隔符,默认均为\t。
        6)stream.num.reduce.output.key.fields:指定reduce task输出记录中key所占的域数目

streaming 程序编写

        #这是一个python版本hadoop streaming[Map|reduce]     
        import sys

        for line in sys.stdin:
            lineArray = line.strip().split('\t') #解析数据
            #如果是reduce , 数据是有序的,按照顺序处理相同key就可以了
            #dosomthing
        #数据什么样的分隔符,可以在hadoop streaming 进行设置 , 但是程序还是会读入行;

你要做的

Trick

    cat data.txt | python map.py | sort | python reduce.py #输入数据,在map里处理,管道输出,sort排序后,reduce进行处理

参考

Fork me on GitHub