美文网首页
hadoop streaming

hadoop streaming

作者: code_plus | 来源:发表于2018-06-01 10:59 被阅读0次

    Hadoop Streaming

    Hadoop提供的一种可是使用其他语言实现mapreduce程序的API。

    执行逻辑

    输入输出基于系统标准输入、标准输出。map阶段的输入是按照行读入的,所以比较适合文本处理,如果是SequenceFile这种二进制文件,会有问题。map阶段的输出是将key和value用tab间隔,写到标准输出。
    reduce阶段会对key进行排序,但是不会形成传统的输出形式:key->value_list。reduce阶段的输入也是key和value对,只是框架保证相同的key一定是连续在一起,所以不同key的边界需要自己判断,通常reduce阶段会有一个lask_key变量。

    map阶段

    import sys
    
    for line in sys.stdin:
        # map do something
        ...
        # map output
        print '%s\t%s' % (key, val)
    

    reduce阶段

    import sys
    
    lask_key = None
    
    for line in sys.stdin:
        (key, val) = line.strip().split("\t")
        # reduce do something
        ...
        # reduce output
        print '%s\t%s' % (key,val)
    

    本地测试

    cat input/sample.txt | map.py | sort | reduce.py
    

    hadoop运行

    hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar -input input -output output -map map.py -reducer reduce.py -files map.py,reduce.py
    

    二进制文件

    SequenceFile

    hdfs上大量文件是以SequenceFile形式存储的。这种情况下需要将key和value转化为字符串形式,并以tab间隔。在执行时,添加-inputformat SequenceFileAsTextInputFormat参数。

    参数
    inputformat SequenceFileAsTextInputFormat

    相关资料

    https://hadoop.apache.org/docs/r2.7.2/hadoop-streaming/HadoopStreaming.html
    《Hadoop.The.Definitive.Guide.4th.Edition》Chapter2,Hadoop Streaming

    相关文章

      网友评论

          本文标题:hadoop streaming

          本文链接:https://www.haomeiwen.com/subject/izmhsftx.html