您的位置:首页 > 编程语言

Hadoop实践(三)---MapReduce框架编程笔记

2016-08-28 15:57 239 查看
MapReduce框架通过把计算逻辑转移到数据所在的机器,而不是把数据转移到其能够处理的机器上,从而充利用本地性优势。

Combiner函数

进行键值对的聚合操作时,会产生大量I/O和网络流量I/O,为了压缩map和reduce步骤间需要的网络带宽,程序员可以选择在map一侧进行预聚合,而预聚合通过提供的Combiner函数完成。Combiner函数和reduce函数类似,不同之处在于,前者并不传递给定键的所有值,而是把传递进来的输入值之和作为输出值传递出去。

其他的MapReduce开源实现

Sphere Starfish Riak等 这些开源项目实现了Google文档描述的特性或者其中的部分特性。

【Hadoop MapReduce 作业的 I/O性能严重依赖HDFS】


map任务包含2个子任务(map和merge),reduce任务只包含1个子任务。shuffle和sort首先发生,由系统完成。每个子任务可以拆分为多个子阶段,如:read-map、spill、mege、copy-map和reduce-write。

影响MapReduce性能的因素

1.硬件(或资源)因素,如CPU时钟,磁盘I/O,网络带宽和内存大小。

2.底层存储系统。

3.输入数据、分拣(shuffle)数据以及输出数据的大小,这与作业的运行时间密切相关。

4.作业算法(或者程序),如map、reduce、partition、combine和compress。有些算法很难再MapReduce中概念化,或者在MapReduce中效率可能会降低。

其他可能对MapReduce性能构成潜在影响的因素

I/O模式:也就是从存储系统获取数据的方式。从底层存储系统去读数据有2中模式:

1.1直接I/O:通过硬件控制器把数据直接从本地硬盘中读取到内存中,不需要进程间通信成本。

1.2流式I/O:通过特定进程间通行手段,如TCP/IP和JDBC,从其他正在运行进程(典型情况是存储系统进程)读取数据。

输入数据解析:是指从存储系统获取数据时,从原始数据到键值对的转换过程。

输入数据存储:当MapReduce获取数据并进行下一步处理时,所在的存储系统必须保证高速访问和数据可用性(如HDFS和HBase)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息