主页 > 新闻资讯 > 大数据学习:MapReduce分片阶段详解

大数据学习:MapReduce分片阶段详解

作者:张老师 浏览次数: 2020-12-31 16:46
MapReduce作为第一代的大数据计算引擎,其经典地位至今仍然得到认可,MapReduce之后的Spark计算引擎,本质上来说,依然是借用了MapReduce的核心思想。今天的大数据学习分享,我们就主要来讲讲MapReduce计算前的准备阶段,也就是Split分片阶段。

通常来说,MapReduce运行可以分为4个阶段,分别是Split阶段—Map阶段 —Shuffle阶段 —Reduce阶段。Split是正式计算前的重要准备阶段。

大数据学习:MapReduce分片阶段详解

1、Split输入分片的概念

所谓输入分片,并不是真的把原来的一个大文件,比如说10MB的文件,切分成10个1MB的小文件,这里的分片不是物理分片,而是逻辑分片。

所谓逻辑分片就是根据文件的字节索引进行分割,比如0~1MB位置定义为第一个分片,1MB~2MB定义为为第二个分片,依次类推……而原来的大文件还是原来的大文件,不会受到影响,因此,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组。

2、分片数量与Map Task数量的关系?

Map Task的个数等于split的个数。Mapreduce在处理大文件的时候,会根据一定的规则,把大文件划分成多个分片,这样能够提高map的并行度。划分出来的就是InputSplit,每个map处理一个InputSplit,因此,有多少个InputSplit,就有多少个map task。

3、由谁来划分分片?

主要是InputFormat类来负责划分Split。InputFormat类有2个重要的作用:

1)将输入的数据切分为多个逻辑上的InputSplit,其中每一个InputSplit作为一个map的输入。

2)提供一个RecordReader,用于将InputSplit的内容转换为可以作为map输入的k,v键值对。

FileInputFormat是InputFormat的子类,是使用比较广泛的类,输入格式如果是hdfs上的文件,基本上用的都是FileInputFormat的子类,如TextInputFormat用来处理普通的文件,SequceFileInputFormat用来处理Sequce格式文件。FileInputFormat类中的getSplits(JobContext job)方法是划分split的主要逻辑。

4、分片的大小由谁来决定?

每个输入分片的大小是固定的,默认情况下,输入片(InputSplit)的大小与数据块(Block)的大小是相同的。Hadoop 2.x默认的block大小是128MB,Hadoop 1.x默认的block大小是64MB,可以在hdfs-site.xml中设置dfs.block.size,注意单位是byte。

分片大小范围可以在mapred-site.xml中设置,最小分片大小:mapred.max.split.size,minSplitSize大小默认为1B,maxSplitSize大小默认为Long.MAX_VALUE = 9223372036854775807

5、默认分片大小与Block分块大小是相同的原因?

Hadoop在存储有输入数据(HDFS中的数据)的节点上运行map任务,可以获得高性能,这就是所谓的数据本地化。

所以最佳分片的大小应该与HDFS上的块大小一样,因为如果分片跨越2个数据块,对于任何一个HDFS节点(Hadoop系统保证一个块存储在一个datanode上,基本不可能同时存储这2个数据块),分片中的另外一块数据就需要通过网络传输到map任务节点,与使用本地数据运行map任务相比,效率则更低。优点就是可以实现分块优化,减少网络传输数据,使用本地数据运行map任务。

关于大数据学习,MapReduce分片阶段,以上就为大家做了详细的介绍了。MapReduce作为大数据计算的代表性框架,理解和掌握MapReduce实际的程序执行,也是非常有必要的。成都加米谷大数据,专业大数据培训机构,大数据开发、数据分析与挖掘,零基础班本月正在招生中,课程大纲及试学视频可联系客服领取!
热点排行
推荐文章
立即申请>>