hadoop学习;Streaming,aggregate;combiner

文章来源:http://www.itnose.net/detail/6044147.html 更多文章:http://www.itnose.net/type/119.html

hadoop streaming允许我们使用任何可执行脚本来处理按行组织的数据流,数据取自UNIX的标准输入STDIN,并输出到STDOUT

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

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

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

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

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

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

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

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

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

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

combiner,aggregate,hadoop,学习,streaming0

当我们使用的时候,可以直接封装,例如编写ValueHistogram.py对ValueHistogram进行封装

combiner,aggregate,hadoop,学习,streaming1

 

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

combiner,aggregate,hadoop,学习,streaming2

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值