zoukankan      html  css  js  c++  java
  • Hadoop Streaming框架使用(一)

    Streaming简介 

    Streaming框架允许任何程序语言实现的程序在Hadoop MapReduce中使用,方便已有程序向Hadoop平台移植。因此可以说对于hadoop的扩展性意义重大,今天简单说一下。

    Streaming的原理是用Java实现一个包装用户程序的MapReduce程序,该程序负责调用MapReduce Java接口获取key/value对输入,创建一个新的进程启动包装的用户程序,将数据通过管道传递给包装的用户程序处理,然后调用MapReduce Java接口将用户程序的输出切分成key/value对输出。 

    Streaming优点

    1 开发效率高,便于移植

    只要按照标准输入输出格式进行编程,就可以满足hadoop要求。因此单机程序稍加改动就可以在集群上进行使用。 同样便于测试

    只要按照 cat input | mapper | sort | reducer > output 进行单机测试即可。

    如果单机测试通过,大多数情况是可以在集群上成功运行的,只要控制好内存就好了。

        2 提高程序效率

    有些程序对内存要求较高,如果用java控制内存毕竟不如C/C++。

    Streaming不足

        1 Hadoop Streaming默认只能处理文本数据,无法直接对二进制数据进行处理 

        2 Streaming中的mapperreducer默认只能向标准输出写数据,不能方便地处理多路输出 

    具体参数介绍

    -input    <path>

    输入数据路径

    -output   <path>

    输出数据路径

    -mapper  <cmd|JavaClassName>

    mapper可执行程序或Java类

    -reducer  <cmd|JavaClassName>

    reducer可执行程序或Java类

    -file            <file>        Optional

    分发本地文件

    -cacheFile       <file>        Optional

    分发HDFS文件

    -cacheArchive   <file>         Optional

    分发HDFS压缩文件

    -numReduceTasks  <num>     Optional

    reduce任务个数

    -jobconf | -D NAME=VALUE    Optional

    作业配置参数

    -combiner <JavaClassName>    Optional

    Combiner Java

    -partitioner <JavaClassName>   Optional

    Partitioner Java

    -inputformat <JavaClassName>  Optional

    InputFormat Java

    -outputformat <JavaClassName> Optional

    OutputFormat Java

    -inputreader <spec>            Optional

    InputReader配置

    -cmdenv   <n>=<v>           Optional

    传给mapper和reducer的环境变量

    -mapdebug <path>             Optional

    mapper失败时运行的debug程序

    -reducedebug <path>           Optional

    reducer失败时运行的debug程序

    -verbose                      Optional

    详细输出模式

     下面是对各个参数的详细说明:

    -input <path>:指定作业输入,path可以是文件或者目录,可以使用*通配符,-input选项可以使用多次指定多个文件或目录作为输入。

    -output <path>:指定作业输出目录,path必须不存在,而且执行作业的用户必须有创建该目录的权限,-output只能使用一次。

    -mapper:指定mapper可执行程序或Java类,必须指定且唯一。

    -reducer:指定reducer可执行程序或Java类,必须指定且唯一。

    -file, -cacheFile, -cacheArchive:分别用于向计算节点分发本地文件、HDFS文件和HDFS压缩文件

    -numReduceTasks:指定reducer的个数,如果设置-numReduceTasks 0或者-reducer NONE则没有reducer程序,mapper的输出直接作为整个作业的输出。

    -jobconf | -D NAME=VALUE:指定作业参数,NAME是参数名,VALUE是参数值,可以指定的参数参考hadoop-default.xml特别建议-jobconf mapred.job.name='My Job Name'设置作业名,使用-jobconf mapred.job.priority=VERY_HIGH | HIGH | NORMAL | LOW | VERY_LOW设置作业优先级,使用-jobconf mapred.job.map.capacity=M设置同时最多运行Mmap任务,使用-jobconf mapred.job.reduce.capacity=N设置同时最多运行Nreduce任务。

    常见的作业配置参数如下表所示: 

    mapred.job.name

    作业名

    mapred.job.priority

    作业优先级

    mapred.job.map.capacity

    最多同时运行map任务数

    mapred.job.reduce.capacity

    最多同时运行reduce任务数

    hadoop.job.ugi

    作业执行权限

    mapred.map.tasks

    map任务个数

    mapred.reduce.tasks

    reduce任务个数

    mapred.job.groups

    作业可运行的计算节点分组

    mapred.task.timeout

    任务没有响应(输入输出)的最大时间

    mapred.compress.map.output

    map的输出是否压缩

    mapred.map.output.compression.codec

    map的输出压缩方式

    mapred.output.compress

    reduce的输出是否压缩

    mapred.output.compression.codec

    reduce的输出压缩方式

    stream.map.output.field.separator

    map输出分隔符

     -combiner:指定combiner Java类,对应的Java类文件打包成jar文件后用-file分发。

    -partitioner:指定partitioner Java类,Streaming提供了一些实用的partitioner实现,参考KeyBasedFiledPartitonerIntHashPartitioner

    -inputformat, -outputformat:指定inputformatoutputformat Java类,用于读取输入数据和写入输出数据,分别要实现InputFormatOutputFormat接口。如果不指定,默认使用TextInputFormatTextOutputFormat

    -cmdenv NAME=VALUE:给mapperreducer程序传递额外的环境变量,NAME是变量名,VALUE是变量值。

    -mapdebug, -reducedebug:分别指定mapperreducer程序失败时运行的debug程序。

    -verbose:指定输出详细信息,例如分发哪些文件,实际作业配置参数值等,可以用于调试。

  • 相关阅读:
    智能移动机器人背后蕴含的技术——激光雷达
    Kalman Filters
    Fiddler抓HttpClient的包
    VSCode开发WebApi EFCore的坑
    WPF之小米Logo超圆角的实现
    windows react打包发布
    jenkins in docker踩坑汇总
    Using ML.NET in Jupyter notebooks 在jupyter notebook中使用ML.NET ——No design time or full build available
    【Linux知识点】CentOS7 更换阿里云源
    【Golang 报错】exec gcc executable file not found in %PATH%
  • 原文地址:https://www.cnblogs.com/xupeizhi/p/2943356.html
Copyright © 2011-2022 走看看