zoukankan      html  css  js  c++  java
  • Hadoop Streaming开发要点

    一.shell脚本中的相关配置

     1 HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
     2 STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
     3 
     4 INPUT_FILE_PATH="/input.txt"
     5 OUTPUT_PATH="/output"
     6 
     7 $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH
     8 
     9 $HADOOP_CMD jar $STREAM_JAR_PATH 
    10       -input  $INPUT_FILE_PATH  
    11       -output  $OUTPUT_PATH   
    12       -mapper  "python map.py"   
    13       -reducer  "python red.py"  
    14       -file  map.py  
    15       -file  red.py  
    16       -jobfonf  mapred.job.name="xxx"    

    -input : 指定作业的输入文件的HDFS路径, 支持使用*通配符, 支持指定多个文件或目录, 可多次使用

    -output : 指定作业的输出文件的HDFS路径, 输出目录不能存在, 执行作业的用户必须有创建该目录的权限, 只能使用一次

    -mapper : 自己写的map程序

    -reducer : 自己写的reduce程序

    -file : 分发文件到计算节点中, 包括map和reduce的执行文件, 以及map和reduce要用的输入文件, 如配置文件. 类似的配置还有-cacheFile,-cacheArchive分别用于向计算节点分发HDFS文件和HDFS压缩文件.(注意: 当输入文件比较大的时候需要先放到HDFS中, 不能用-file分发方式)

    -jobconf : 提交作业的一些配置属性.

      常见配置:

      (1)mapred.map.tasks : map task数目

      (2)mapred.reduce.tasks : reduce task数目

      (3)stream.num.map.output.key.fileds : 指定map task输出记录中key所占的域数目(也就是用几个字段做为key)

      (4)num.key.fields.for.partition : 指定对key分出来的前几个部分做partition而不是整个key, 以下三个配置通常是搭配使用.

           

      其它配置:

      mapred.job.name                        作业名

      mapred.job.priority                   作业优先级

      mapred.job.map.capacity           最多同时运行map任务数

      mapred.job.reduce.capacity          最多同时运行reduce任务数

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

      mapred.compress.map.output           map的输出是否压缩

      mapred.map.output.compression.codec      map的输出压缩方式

      mapred.out.compress                                  reduce的输出是否压缩

      mapred.output.compression.codec            reduce的输出压缩方式

      stream.map.output.field.separator        map输出分隔符

     二.关于文件分发与打包

    (1)如果文件(如字典文件)存放在HDFS中, 希望计算时在每个计算节点上将文件当做本地文件处理, 可以使用以下配置在计算节点缓存文件, Streaming程序通过./linkname访问文件.

    -cacheFile "hdfs://host:port/path/to/file#linkname"          #此处linkname相当于别名

    举个栗子:

     1 HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
     2 STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
     3 
     4 INPUT_FILE_PATH="/The_Man_of_Property.txt"
     5 OUTPUT_PATH="/output_cachefile_broadcast"
     6 
     7 #$HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH
     8 
     9 # Step 1.
    10 $HADOOP_CMD jar $STREAM_JAR_PATH 
    11     -input $INPUT_FILE_PATH 
    12     -output $OUTPUT_PATH 
    13     -mapper "python map.py mapper_func WH" 
    14     -reducer "python red.py reduer_func" 
    15     -jobconf "mapred.reduce.tasks=2" 
    16     -jobconf  "mapred.job.name=cachefile_demo" 
    17     -cacheFile "hdfs://master:9000/cachefile_dir/white_list.txt#WH" 
    18     -file "./map.py" 
    19     -file "./red.py"

    (2)如果要分发的文件有目录结构, 可以先将整个目录打包, 然后上传到HDFS, 再用-cacheArchive来分发压缩包, 栗子如下:

    HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
    STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
    
    INPUT_FILE_PATH="/The_Man_of_Property.txt"
    OUTPUT_PATH="/output_cachearchive_broadcast"
    
    $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH
    
    # Step 1.
    $HADOOP_CMD jar $STREAM_JAR_PATH 
        -input $INPUT_FILE_PATH 
        -output $OUTPUT_PATH 
        -mapper "python map.py mapper_func WH" 
        -reducer "python red.py reduer_func" 
        -jobconf "mapred.reduce.tasks=2" 
        -jobconf  "mapred.job.name=cacheArchive_demo" 
        -cacheArchive "hdfs://master:9000/w.tar.gz#WH"     
        -file "./map.py" 
        -file "./red.py"

    关于linux文件压缩和解压命令见如下链接:

    http://www.cnblogs.com/CoolJayson/p/7469620.html

  • 相关阅读:
    网安-04-DHCP部署与安全、DNS部署与安全
    网安-03-NTFS安全权限、文件共享服务器
    网安-02-批处理、病毒、用户与组管理、破解系统密码
    网安-01-IP详解及简单的DOS命令
    [异常笔记]required a bean of type 'org.quartz.JobExecutionContext' that could not be found
    [异常笔记]poi读取Excel异常
    CentOS7 minimal 没有netstat命令
    Docker运行Nginx服务器
    大数据开发从入门小白到删库跑路(一)- 获取Hadoop
    Docker 运行MangoDB
  • 原文地址:https://www.cnblogs.com/CoolJayson/p/7469392.html
Copyright © 2011-2022 走看看