• 8.1.2hadoop Streaming 作业原理和参数设置


    1.1.1         Stream 作业

    1hadoop streaming

    Hadoop streaming是hadoop的一个工具,用于运行费java的maper或reducer作业,例如maper和reducer是C++编写的可执行程序或者脚本文件。同时也可以是java类。

    HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar

        -input myInputDirs

        -output myOutputDir

        -mapper /bin/cat

        -reducer /bin/wc

    2Stream工作原理

    如果可执行程序被用于maper和reducer,可执行程序作为单独的进程启动,mapper任务运行时,将输入按照分隔符切分成行(默认情况下每一行tab之前的为键key,之后为值value,如果没有tab,整行为键,值为null,key和value的分隔符可以设置),提供给可执行程序的标准输入,可执行程序处理之后输出到标准输出,mapper任务收集标准输出的内容,转换为key/value对,作为maper/reducer的输出。用户可以设定stream.non.zero.exit.is.failure true 或false 来表明streaming task的返回值非零时是 Failure 还是Success。默认情况,streaming task返回非零时表示失败。

    3)集群运行可执行程序一起打包提交

    如果是集群运行stream作业,需要用-file参数指定可执行程序,framework将可执行程序一起打包提交到集群运行。例如下面的-file myPythonScript.py除了可执行文件外,其他mapper或reducer需要用到的辅助文件(比如字典,配置文件等)也可以用这种方式打包上传。

    HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar

        -input myInputDirs

        -output myOutputDir

        -mapper myPythonScript.py

        -reducer /bin/wc

        -file myPythonScript.py

    -file myDictionary.txt

    4Stream只使用mapper的设置

    有时只需要map函数处理输入数据。这时只需把mapred.reduce.tasks设置为零,Map/reduce框架就不会创建reducer任务,mapper任务的输出就是整个作业的最终输出。

    为了做到向下兼容,Hadoop Streaming也支持“-reduce None”选项,它与“-jobconf mapred.reduce.tasks=0”等价。

    5Stream参数设置

    -inputformat JavaClassName

    设置输入值类型

    -outputformat JavaClassName

    设置输出值类型

    -partitioner JavaClassName

    设置分区类

    -combiner JavaClassName

    设置combine函数类

    -input myinputdir

    设置输入路径

    -output myoutputdir

    设置输出路径

    -cluster name

    切换集群

    -dfs host:port or local

    设置新的hdfs或者用local表示本地

    -jt host:port or local

    设置新的jobtracker或者用local表示本地

    -file ./map_sort.py

    将当前目录的map_sort.py文件(10M以内)上传到计算节点

    -cacheFile "hdfs://hadoop-master:8020/fruit.txt#fruit

    HDFS中已经存在的文件发送到需要使用该文件的节点。“#”是给要分发的文件起别名(符号链接),在Mapreduce程序中直接使用该别名就可访问该文件。

    -cacheArchive “hdfs://hadoop-master:8020/fruit.tar.gz#fruitlink

    -cacheArchive:将HDFS中已经存在的压缩文件fruit.tar.gz分发到相应的计算节点并解压,fruitlink指向解压后的文件夹。

    -jobconf mapred.reduce.tasks=2

    Hadoop的参数设置,这里表示用两个reduce任务,还有很多其他任务。

    6Streaming输入输出键值分隔符设置

    默认是tab作为分隔符,如果键值中包含tab键,则需要将分隔符设置为其他符号。除了分隔符,还要对键所占分隔符的数量stream.num.map.output.key.fields和stream.num.reduce.output.key.fields进行设置,例如一行数据是a,b,c,数量设置为1,则a是键,b,c是值,如果设置为2,则a,b是键,c是值。

    属性名称

    描述

    stream.map.input.field.separator

    String,默认 ,map输入键值分隔符

    stream.reduce.input.field.separator

    String,默认 ,reduce输入键值分隔符

    stream.map.output.field.separator

    String,默认 ,map输出键值分隔符

    stream.reduce.output.field.separator

    String,默认 ,reduce输出键值分隔符

    stream.num.map.output.key.fields

    Map输出键值字符串中,键占的字段数

    stream.num.reduce.output.key.fields

    reduce输出键值字符串中,键占的字段数

    这参数的作用如图所示,参数作为内部分隔设置,与总的输入input和输出output无关。如果用标准的TextOutputFormat作为output的输出格式,则默认会用tab分隔,写入输出文件。可以通过属性mapreduce.output.textoutput.format.separator来修改output输出的分隔符。

     

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:

    https://www.cnblogs.com/bclshuai/p/11380657.html

     

  • 相关阅读:
    bzoj 1821: [JSOI2010]Group 部落划分 Group
    codevs 1217 借教室
    洛谷 P2678 跳石头
    洛谷 P1316 丢瓶盖
    洛谷 P2683 小岛
    洛谷 P2431 正妹吃月饼
    loj #6092. 「Codeforces Round #418」恋爱循环
    loj #6091. 「Codeforces Round #418」幻想特快
    loj #6090. 「Codeforces Round #418」尘封思绪
    前端移植说明
  • 原文地址:https://www.cnblogs.com/bclshuai/p/12242172.html
Copyright © 2020-2023  润新知