hadoop学习;Streaming,aggregate;combiner

hadoop streaming同意我们使用不论什么可运行脚本来处理按行组织的数据流,数据取自UNIX的标准输入STDIN,并输出到STDOUT

我们能够用 linux命令管道查看文本有多少行,cat data.txt |wc -l 以下我们用streaming实现,先将文件放入hdfs,然后输出结果,streaming的包在contrib/streaming以下


通过设定mapper为‘RandomSample.py 10’,我们按十分之中的一个的採样率,没有设定特殊的reducer,一般默认使用IdentityReducer(把输入直接转向输出)

通过HDFS的命令getMerge(输出合并)或其它文件操作,能够获得正确数目的输出文件

随机採样脚本用Python实现,可是仅仅要基于STDIN和STDOUT的脚本语言都能够,当把一个文件当作php脚本时,<?php ...........?>这里的?>要省略

在Sreaming中,每一个mapper都会看到完整的数据流,也正是由mapper负责将完整的数据流切割成记录,而在java模式中,是由框架将输入数据切割为记录,每次仅将一个记录传给map()。

Streaming模式更easy维护一个分片中跨记录的状态信息,我们利用这一点计算多个记录中的最大值。

聚类算法:能够让mapper计算一个分片(多个记录)的最大值,reducer接收这些值并输出一个全局最大值

我们使用聚合函数来计算统计,它通常分为三类:分配型,代数型和全集型。最大函数式是一个分配型的样例,其它分配型包含最小值,求和和计数,分配型函数具有分配律特征,你能够在逻辑上循环的将这些函数应用到更小块的数据上

默认情况下Streaming使用制表符分离记录的key和value,当没有制表符时,整个记录被视为key,而value为空白文本。mapper能够选择把每条记录翻译成一个键值对,还是一行文本

实践上讲reducer的输出直接写入到一个文件里,但技术上讲,在写之前还有个无操作的步骤,在这个步骤中,Streaming API将reducer的输出自己主动用制表符分开,并将键值对送到默认的TextOutPutFormat中,即在文件输出前,默认插入一个制表符

hadoop有个aggregate软件包,它让数据汇集更为简单


当我们使用的时候,能够直接封装,比如编写ValueHistogram.py对ValueHistogram进行封装



在mapper和reducer之间添加了combiner,它在数据的转换上必须同reducer等价,mapreduce能够使用combiner次数不限(0到N),假设我们去掉combiner,reducer输出应保持不变,并且当combiner被应用于中间数据随意子集时,仍需保持等价转换的特性




原文地址:https://www.cnblogs.com/mfrbuaa/p/3761694.html