`
wx1568908808
  • 浏览: 31320 次
文章分类
社区版块
存档分类
最新评论

Hadoop Streaming和awk

 
阅读更多
  1. Hadoop streaming类似于Unix管道数据流,从标准输入(STDIN)输入,输出到标准输出(STDOUT),数据必须是基于文本的,文本的每一行被认为是一条记录。这也是很多Unix命令,例如:awk的工作方式。在Hadoop streaming中整个数据流就像是一个管道(Pipe),依次经过mapper,mapper sorter,reducer,Unix伪代码表示如下:

    cat [input_file] | [mapper] | sort | [reducer] > [output]

  2. 在streaming中使用Unix命令

        bin/hadoop jar share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar

            -input input/cite75_99.txt -output output  -mapper  'cut -f 2 -d ,'  -reducer 'uniq'

        streaming也可以使用脚本,只要该脚本从STDIN输入,输出到STDOUT

        bin/hadoop jar share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar

            -input input/cite75_99.txt  -output output  -mapper ‘RandomSample.py 10’

            -file RandomSample.py  -D mapred.reduce.tasks=1

 3.  mapper的输出默认以Tab键分割key/value,若没有Tab,则整条记录为key,value为空。Hadoop shuffling将依据key将key/value发送给不同的reducer。但mapper和reducer的工作依然是从STDIN处理一行一行的文本

    hadoop streaming提供参数-inputformat、-outputformat、-partitioner、-combiner、-numReduceTasks指定相应的hadoop job参数。其中-mapper、-reducer、-combiner既可以指定为类名,也可以指定为unix可执行程序。-file参数指定一个文件,将文件打包,和job一起被发送到各个执行节点。-files参数可以指定多个文件,文件名之间采用逗号分隔。-D参数可以指定键值对型的参数,例如:-D mapred.reduce.tasks=0,-D stream.map.output.field.separator=.,-D stream.num.map.output.key.fields=4,分别指定reduce数量为0,map输出字符串以.分割成字段,并设置前4个字段之前的字符串为map输出的key(即第四个.之前的字符串),第四个.之后的字符串为value

4.  Hadoop Stream中常结合awk命令使用。

    awk适用于处理字段型数据行,Pattern中可以调用~和!~支持正则表达式匹配。

    awk可以从shell命令获取输入数据,例如命令“ls”| getline。

    awk可以在print和printf语句后使用>和>>将输出重定向到文件,例如:print $1>"myfiles"。

    awk中可以直接调用shell命令,只需将shell命令置入system函数中,例如:system("ls > myfiles"),但是使用system函数时,awk无法直接给shell命令传递参数,shell命令也无法将输出直接传递给awk。

    awk的getline函数也可以使用<运算符,从文件中逐行读取记录。

    可以将awk程序写进一个脚本中,然后调用命令awk -f my.awk input.file执行,也可以直接在shell命令行中执行awk命令,或者将awk命令写进myawk.sh文件执行。

    awk命令以单引号开始,以单引号结束,awk命令中的字符串一律用双引号。

    字段分隔符FS,是awk的内建变量,其默认是空白和\t,可以在BEGIN pattern中指定:FS="[\t,:]+",表示使用\t、,和:分割字段。

    awk提供close(filename)函数关闭打开的文件,用于确保输出到文件的顺序。

    awk采用内建变量RS,默认为\n分割多行数据。

    awk提供函数split(原字符串,字符串数组,分隔字符),按照分隔字符将原字符串分割,保存在字符串数组中。

    awk提供内建变量ARGC,表示出了-f、-c等参数之外,命令行参数的个数,通过ARGV,读取命令行参数。

    awk中指定ARGV[1] = "-",表示由键盘输入数据。

    awk可以使用function关键字定义函数,函数中定义的变量在函数外也是可见的,因此在定义递归函数时,应特别注意。

    awk正则表达式,置入//之间。

    awk提供next指令,跳过当前数据行,处理下一行,提供exit指令,退出awk程序。

    awk提供内建的字符串函数和数学函数,index(原字符串,找寻的字符串)返回找寻的字符串在原字符串中第一次出现的index,length(字符串)计算字符串的长度,match(原字符串,正则表达式)函数返回匹配结果,sprintf函数将格式化输出到字符串,sub(正则表达式,将替换的新字符串,原字符串)将首次匹配正则表达式的部分替代,substr(原字符串,起始位置,长度)返回子字符串;数学函数包括int取整,sqrt求根号,exp,log,sin,cos,rand,srand。
    

    5.  hadoop streaming中使用awk注意事项

    下面是一个awk命令实例:

    hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar \
    -libjars  parquet_test_1.0.jar \
    -input /user/algo/lujianfeng/parquet-mz-input-test08 \
    -output /user/algo/lujianfeng/parquet-mz/countfield10 \
    -mapper "awk -F'[=\^]' '{for(i=1;i<=NF;i++){printf(\"%s\t1\n\",\$i);}}'" \
    -reducer "awk -F'[\t]' 'BEGIN{key=\"\";num=0;}{if(key!=\$1 && length(key)>0)        {printf(\"%s\t%d\n\",key,num);num=0;} key=\$1;num++;}'"
    

    注意:1. awk命令中的$、“字符必须转义

            2. hadoop streaming中的reducer不同于写java MR程序时的reduce函数,所有发送给一个Reducer的Map输出结果,hadoop streaming中都由同一个awk脚本执行,不会按照key进行分组

            3. hadoop streaming中,reducer处理的数据就是map的输出结果,即一行文本

转载于:https://my.oschina.net/jhone/blog/312062

分享到:
评论

相关推荐

    Hadoop Streaming 官方中文文档

    在文档的部分内容中,我们看到一系列的段落和代码示例,这些示例主要涵盖了Hadoop Streaming的基本使用方法,包括如何设置环境、编写map和reduce脚本、提交作业以及一些高级用法和优化技巧。 #### 环境配置 文档中...

    hadoop-streaming-2.8.0_jar_2.8.0_hadoop_streaming_

    Hadoop Streaming 是一个 Hadoop 组件,允许用户使用可执行的脚本(如 Python 或 Bash)作为 MapReduce 任务的输入和输出处理程序,极大地扩展了 Hadoop 处理数据的能力。 描述中的 "AutoInputFormat....

    Hadoop Streaming程序实例

    Hadoop Streaming是一个强大的工具,它允许用户使用任何可执行文件(如Python脚本、Perl或Bash shell命令)作为MapReduce任务的Mapper和Reducer。这个技术使得非Java开发者也能利用Hadoop的大数据处理能力。在本文中...

    Hadoop - Hadoop Streaming

    Hadoop Streaming 是一种允许用户利用任何可执行脚本或程序(如 Python、Perl 或其他脚本语言)作为 Map 和 Reduce 进程的技术。它通过提供一个框架来实现这一目标,该框架可以读取来自标准输入的数据,并将结果写入...

    Hadoop Streaming 编程

    Hadoop Streaming 的核心理念是通过标准输入和输出进行数据交互,使得非Java语言也能参与到Hadoop的数据处理流程中。 **Hadoop Streaming 原理** Hadoop Streaming 的工作方式是这样的:Mapper 和 Reducer 从标准...

    数据架构师第006节实战.基于hadoop streaming的wordcount .mp4

    数据架构师第006节实战.基于hadoop streaming的wordcount .mp4

    ( Hadoop Streaming编程实战(C++、PHP、Python).pdf )

    Hadoop Streaming利用标准输入和标准输出来实现程序与MapReduce框架之间的通信。这个特性使得已经存在的程序,比如用C++、PHP或Python等语言编写的程序,可以更容易地迁移到Hadoop平台上,从而提高了Hadoop的扩展性...

    HadoopStreaming编程.doc

    Hadoop Streaming是一种编程接口,它允许开发者使用任意可执行文件或脚本(如Shell、Python、Perl等)作为MapReduce作业的Mapper和Reducer。这一技术极大地扩展了Hadoop的适用性,使得非Java程序员也能轻松地在...

    HadoopStreaming

    - `Hadoop Streaming`提供了多输入选项,可以指定多个输入路径和对应的映射器,以支持不同的数据源和数据格式。 - 示例命令: ``` -input "&lt;tag&gt;/path/to/input/files" -mapper "&lt;tag&gt;mapper-command" ``` -...

    hadoop streaming 介绍文档

    hadoop streaming官方介绍文档

    Hadoop streaming详细介绍

    Hadoop streaming 使用Unix的standard streams作为我们mapreduce程序和MapReduce框架之间的接口。所以你可以用任何语言来编写MapReduce程序,只要该语言可以往standard input/output上进行读写。 streamming是天然...

    Hadoop Streaming基本使用方法.docx

    Hadoop Streaming基本使用方法.docx

    Hadoop Streaming基本使用方法.pdf

    Hadoop Streaming基本使用方法.pdf

    Face Recognition(face_recognition) Using Hadoop Streaming API

    Face Recognition(face_recognition) Using Hadoop Streaming API Face Recognition(face_recognition) Using Hadoop Streaming API

    hadoop streaming 表

    Hadoop Streaming是Hadoop的MapReduce编程模型的一个工具,它允许用户使用非Java语言编写MapReduce作业,使得其他编程语言如Python、Ruby和Perl等能够处理Hadoop上的大数据。Hadoop Streaming通过将数据流式传输到...

    Migration from Hadoop Streaming to Spark

    In this talk, we will present our recent effort to migrate AEX pipeline from Hadoop streaming to Spark. We aim to reduce audience model to be refreshed at least 2x faster. We came up an innovative ...

    使用hadoop-streaming运行Python编写的MapReduce程序.rar

    在Hadoop Streaming中,Map和Reduce任务的输入和输出都是通过标准输入/输出(stdin和stdout)进行交互的。Python作为解释型语言,非常适合编写这类任务,因为可以轻松地处理文本数据流。 以下是使用Hadoop ...

Global site tag (gtag.js) - Google Analytics