【云计算 Hadoop】Hadoop 版本 生态圈 MapReduce模型(二)

3. Reduce 数据流



Reduce任务 : map 任务的数量要远远多于 Reduce 任务;


-- 无本地化优势 : Reduce 的任务的输入是 Map 任务的输出, reduce 任务的绝大多数数据 本地是没有的;


-- 数据合并 : map 任务 输出的结果, 会通过网络传到 reduce 任务节点上, 先进行数据的合并, 然后在输入到reduce 任务中进行处理;


-- 结果输出 : reduce 的输出直接输出到 HDFS中;


-- reduce数量 : reduce数量是特别指定的, 在配置文件中指定;




MapReduce数据流框图解析 :


-- 单个MapReduce的数据流 :

【云计算 Hadoop】Hadoop 版本 生态圈 MapReduce模型(二)



-- 多个MapReduce模型 :

【云计算 Hadoop】Hadoop 版本 生态圈 MapReduce模型(二)



-- 没有Reduce程序的MapReduce数据流 :

【云计算 Hadoop】Hadoop 版本 生态圈 MapReduce模型(二)





Map输出分区 : 多个 reduce 任务, 每个reduce 任务都对应着 一些map任务, 我们将这些map 任务 根据其输入reduce 任务进行分区, 为每个reduce 建立一个分区;


-- 分区标识 : map结果有许多种类键, 相同的键对应的数据 传给 一个reduce, 一个map 可能会给多个reduce输出数据;


-- 分区函数 : 分区函数可以由用户定义, 一般情况下使用系统默认的分区函数 partitioner, 该函数通过哈希函数进行分区;




混洗 : map 任务 和 reduce 任务之间的数据流成为混;


-- reduce数据来源 : 每个 reduce 任务的输入数据来自多个map


-- map 数据去向 : 每个 map 任务的结果都输出到多个 reduce 中;




没有Reduce : 当数据可以完全并行处理的时候, 就可以不适用reduce, 只进行map 任务;




4. Combiner 引入



MapReduce瓶颈 : 带宽限制了 MapReduce 执行任务的数量, Map 和 Reduce 执行过程中需要进行大量的数据传输;\


-- 解决方案 : 合并函数 Combiner, 将 多个 Map 任务输出的结果合并, 将合并后的结果发送给 Reduce 作业;




5. Hadoop Streaming



Hadoop多语言支持 : Java, Python, Ruby, C++;


-- 多语言 : Hadoop 允许使用 其它 语言写 MapReduce 函数;


-- 标准流 : 因为 Hadoop 可以使用 UNIX 标准流 作为 Hadoop 和 应用程序之间的接口, 因此 只要使用标准流, 就可以进行 MapReduce 编程;




Streaming处理文本 : Streaming在文本处理模式下, 有一个数据行视图, 非常适合处理文本;


-- Map函数的输入输出 : 标准流 一行一行 的将数据 输入到 Map 函数, Map函数的计算结果写到 标准输出流中;


-- Map输出格式 : 输出的 键值对 是以制表符 分隔的行, 以这种形式写出的标准输出流中;


-- Reduce函数的输入输出 : 输入数据是 标准输入流中的 通过制表符 分隔的键值对 行, 该输入经过了Hadoop框架排序, 计算结果输出到标准输出流中;




6. Hadoop Pipes



Pipes概念 : Pipes 是 MapReduce 的C++ 接口;


-- 理解误区 : Pipes 不是使用 标准 输入 输出流作为 Map 和 Reduce 之间的Streaming, 也没有使用JNI编程;


-- 工作原理 : Pipes 使用套接字作为 map 和 reduce 函数 进程之间的通信;


上一篇:【云计算 Hadoop】Hadoop 版本 生态圈 MapReduce模型(一)


下一篇:【Android 应用开发】Android应用的自动更新模块(三)