Hadoop学习3:Hadoop核心组件-MapReduce

Hadoop MapReduce详解
本文详细介绍了Hadoop MapReduce的工作原理及其应用场景,包括HDFS的大数据存储、MapReduce的四个核心步骤、Shuffler的作用及其实现过程等。通过本文,读者可以了解如何通过MapReduce进行高效的大数据处理。

HDFS用于解决大数据的存储,而MapReduce用于解决大数据的分析计算。
MapReduce:Hadoop分布式计算框架的一种,适合于离线计算。
Storm:流式计算框架,适合实时计算。
Spark:内存计算框架,适合快速得到结果。

Mapreduce设计理念

  • 移动计算,而不移动数据
    计算框架MR
    这里写图片描述
  • 四个步骤:
    1 :split(切成块):对HDFS上的数据处理成一个一个的碎片快,每一个片段有一个map线程并发执行;
split计算公式:
max.splitmin.split、block
split = max(min.split , min( block , max.split))
所以一般是Block的大小,即128M

2 :map(Java线程,输出和输入必须键值对),map的执行由程序员控制;
3 :shuffler(合并和排序,相同的key合并,并处理成集合);
4 :reduce(reduce有可能只有一个,有程序决定)

Shuffler

shuffler处于map和reduce之间的一个步骤,大部分工作由MapReduce框架自己完成,程序员只可以控制一小部分。
- 可以把map的输出按照某种key值重新切分和组合成n份,把key值符合某种范围的输出送到特定的reduce去处理;
- 可以简化reduce的过程。
这里写图片描述

在map的机器中操作
1 . map得到的结果放在内存中,当到达一定值就会溢写;每个maptask对应一个内存缓冲区,默认100M,存储map的输出结果。80%时就会溢写,留有20%用于继续处理map的输出结果。
当缓冲区快满的时候,将缓冲区的数据以一个临时文件的方式存放在磁盘。
溢写有单独线程完成,不影响往缓冲区写map结果的线程。(spill.percent,默认80%)。
这里写图片描述
2 . partition,分区。同一分区的数据会被放在同一个reduce中处理,用于解决负载均衡数据倾斜问题。可以自定义,也有默认分区规则(对key取hash值,然后对reduce的个数进行模运算 hashVal%reduceNum)。
3 . sort:默认排序方式-ASCII码值排序,即字典排序。(10排在9的前面),可自定义
4 . spill to disk:溢写到磁盘。
5 . merge on disk:把溢写的文件按照hash值(及key值相同)合并:combiner,目的:提高下一步网络数据copy的效率,可以自定义

进入reduce的机器中操作
6 . 根据分区把各个map数据copy到reduce中。
7 . 将得到的数据merge合并,key相同合并。
8 . 把执行的结果合并。


*注:map不可能产生数据倾斜,只有reduce会产生。
原因:map的数据来源split,而split是按照一定规则的,同时split的数据来源于block,因而,输入map中的数据是大小基本相同的。reduce的数据来源于shuffle的,取决于partition,好的partition可以避免数据倾斜*。

"C:\Program Files\Java\jdk-17\bin\java.exe" -Didea.launcher.port=54222 "-Didea.launcher.bin.path=D:\hadoop\IntelliJ IDEA Community Edition 2018.3.6\bin" -Dfile.encoding=UTF-8 -classpath "D:\hadoop\Hadoop\target\classes;D:\hadoop\hadoop-3.1.4\share\hadoop\client\hadoop-client-api-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\client\hadoop-client-runtime-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\client\hadoop-client-minicluster-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\common\hadoop-kms-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\common\hadoop-nfs-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\common\hadoop-common-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\common\hadoop-common-3.1.4-tests.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\hdfs\hadoop-hdfs-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\hdfs\hadoop-hdfs-nfs-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\hdfs\hadoop-hdfs-rbf-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\hdfs\hadoop-hdfs-3.1.4-tests.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\hdfs\hadoop-hdfs-client-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\hdfs\hadoop-hdfs-httpfs-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\hdfs\hadoop-hdfs-rbf-3.1.4-tests.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\hdfs\hadoop-hdfs-client-3.1.4-tests.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\hdfs\hadoop-hdfs-native-client-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\hdfs\hadoop-hdfs-native-client-3.1.4-tests.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\mapreduce\hadoop-mapreduce-examples-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\mapreduce\hadoop-mapreduce-client-hs-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\mapreduce\hadoop-mapreduce-client-app-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\mapreduce\hadoop-mapreduce-client-core-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\mapreduce\hadoop-mapreduce-client-common-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\mapreduce\hadoop-mapreduce-client-shuffle-3.1.4.jar;D:\hadoop\hadoop-3.1.4\share\hadoop\mapreduce\hadoop-mapreduce-c
最新发布
05-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值