思考小问题
统计一个100G大小的文件进行词频的解决方法
方法一:如果小文件可以编写一个小程序,进行遍历,统计词频。
方法二:编写一个多线程程序,实现并发,比上一个方法更加有效,但是要防止多个线程重复提交(同步互斥问题)。
方法三:程序交给多台服务器去完成,痛点:需要大量人工参与。
方法四:通过MapReduce框架自动化完成
MapReduce
特点:易于编程(有两个接口ma--大任务分成小任务,任务分解,reduce---任务汇总),良好的扩展,高容错性,适合离线处理
是一个编程框架:只需要程序员去设计map,reduce函数
MapReduce语义:相同的key为一组,调用一次reduce方法,在方法内迭代这一组数据的计算
输入(key,val)数据集----》map映射成一个中间结果(k,v)---》reduce(k,v).
先map处理结果作为reduce的输入(线性关系),map的输入的是大数据集的分片split(split窗口机制,大小可以调整,默认split大小近似block大小),默认框架以行为单位,可以实现分布式并行运算。
map的数量取决于split的数量 。
reduce的数量取决于程序员的设计partition
MapTask
map的数量一般比reduce多。
框架内部实现机制(分区,排序,写入磁盘)
map生成<key,value,partition分区>数据,用缓冲区(buffer in memory)暂时存储,积累一定量后一次性写入磁盘。
partition的个数决定reduce的个数,reduce连接网络到各个map中拉取分区。
MapReduce编程模型
Input---->Splitting--->Mapping--->Shuffling--->Reducing--->final result
Mapping:生成键值对
shuffing (洗牌):分组、排序、拉取数据
版本区别:
Hadoop 1.x 提现计算向数据移动(移动计算)问题:压力过大,单点故障
Hadoop 2.x :yarn提供资源管理和调度(RM,AM)
持续更新.......