广州万户网站公司,河南省建设执业资格中心网站,中国电信 网站备案,无锡网站广优化公司Hadoop之MapReduce
1. MapReduce是什么
MapReduce是一个分布式运算程序的编程框架#xff0c;旨在帮助用户开发基于Hadoop的数据分析应用。它的核心功能是将用户编写的业务逻辑代码与自带的默认组件整合#xff0c;形成一个完整的分布式运算程序#xff0c;并并发运行在一…Hadoop之MapReduce
1. MapReduce是什么
MapReduce是一个分布式运算程序的编程框架旨在帮助用户开发基于Hadoop的数据分析应用。它的核心功能是将用户编写的业务逻辑代码与自带的默认组件整合形成一个完整的分布式运算程序并并发运行在一个Hadoop集群上。 2. MapReduce的优点
1) 易于编程
MapReduce框架只需实现几个简单的接口用户便可以快速开发出一个分布式程序。这使得编写分布式程序的复杂性大大降低从而促进了MapReduce的普及。
2) 良好的扩展性
随着计算需求的增加用户只需简单地增加机器即可提升计算能力Hadoop会自动将任务分配到新增的节点上。
3) 高容错性
Hadoop设计时考虑到了在廉价PC机器上运行的需求因此具备高容错性。如果某个节点宕机Hadoop会自动将计算任务转移到其他节点上无需人工干预。
4) 适合PB级以上海量数据的离线处理
Hadoop可以实现大规模服务器集群的并发工作提供高效的数据处理能力。 3. MapReduce的缺点
1) 不擅长实时计算
MapReduce无法像MySQL或Oracle那样在毫秒或秒级内快速返回查询结果适合批处理场景而非实时应用。
2) 不擅长流式计算
MapReduce的输入数据集是静态的无法处理动态输入数据因此不适合流式计算场景。
3) 不擅长DAG有向无环图计算
对于存在依赖关系的多个应用程序MapReduce在处理时会导致大量的磁盘IO影响性能。 4. MapReduce核心思想
以统计单词出现次数为例MapReduce程序通常分为两个阶段Map阶段和Reduce阶段。
Map阶段
读取输入数据并按行处理。按空格切分每一行生成键值对KV对。将KV对按键分区分发到不同的Reduce任务。
Reduce阶段
每个Reduce任务接收并处理来自Map阶段的输出数据。统计以特定字母开头的单词数量。将结果输出到文件。
案例流程
输入数据一个包含多个单词的文本文件。Map阶段将这些单词分为不同的分区例如 分区1以a-p开头的单词分区2以q-z开头的单词 Reduce阶段统计每个分区的单词数量输出结果到文件。
假设我们有一个文本文件内容如下
apple banana grape
orange kiwi banana
apple orange peach
kiwi banana zebra
grape orange1. InputFormat
InputFormat 将读取这个文本文件并将其分割成多个Splits。假设每行作为一个Split。 Split 1: apple banana grapeSplit 2: orange kiwi bananaSplit 3: apple orange peachSplit 4: kiwi banana zebraSplit 5: grape orange
2. Map阶段
在Map阶段Mapper会处理每个Split并将每个单词映射为键值对KV对。
2.1 Mapper处理
对于每个Split中的每一行Mapper会按空格分隔单词并生成中间的KV对。例如 对于Split 1: apple banana grape 生成 KV 对 (apple, 1)(banana, 1)(grape, 1) 对于Split 2: orange kiwi banana 生成 KV 对 (orange, 1)(kiwi, 1)(banana, 1) 对于Split 3: apple orange peach 生成 KV 对 (apple, 1)(orange, 1)(peach, 1) 对于Split 4: kiwi banana zebra 生成 KV 对 (kiwi, 1)(banana, 1)(zebra, 1) 对于Split 5: grape orange 生成 KV 对 (grape, 1)(orange, 1)
2.2 生成的中间KV对
经过Mapper处理所有中间的数据可能如下所示
(apple, 1)
(banana, 1)
(grape, 1)
(orange, 1)
(kiwi, 1)
(banana, 1)
(apple, 1)
(orange, 1)
(peach, 1)
(kiwi, 1)
(banana, 1)
(zebra, 1)
(grape, 1)
(orange, 1)3. Shuffle阶段
Shuffle阶段负责将这些中间的KV对根据键进行分组和排序。
3.1 分区逻辑
将相同键的所有中间KV对聚集到一起并根据字母范围进行分区 分区1a-q: apple: (apple, 1), (apple, 1)banana: (banana, 1), (banana, 1), (banana, 1)grape: (grape, 1), (grape, 1)kiwi: (kiwi, 1), (kiwi, 1)orange: (orange, 1), (orange, 1)peach: (peach, 1) 分区2r-z: zebra: (zebra, 1)
4. Reduce阶段
Reduce阶段会有两个Reducer分别处理这两个分区的数据。
4.1 ReduceTask处理 ReduceTask 1处理分区1 a-q 输入(apple, 1)
(apple, 1)
(banana, 1)
(banana, 1)
(banana, 1)
(grape, 1)
(grape, 1)
(kiwi, 1)
(kiwi, 1)
(orange, 1)
(orange, 1)
(peach, 1)处理统计数量输出apple: 2
banana: 3
grape: 2
kiwi: 2
orange: 2
peach: 1ReduceTask 2处理分区2 r-z 输入(zebra, 1)处理输出zebra: 15. 输出
最终结果将被写入到HDFS中的指定文件格式如下
apple: 2
banana: 3
grape: 2
kiwi: 2
orange: 2
peach: 1
zebra: 15. MapReduce运行三大进程
MapReduce运行时的进程包括
MrAppMaster负责整体程序的调度和状态协调。MapTask负责Map阶段的数据处理流程。ReduceTask负责Reduce阶段的数据处理流程。