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 = https://www.it610.com/article/9223372036854775807
5、默认分片大小与Block分块大小是相同的原因? Hadoop在存储有输入数据(HDFS中的数据)的节点上运行map任务,可以获得高性能,这就是所谓的数据本地化。所以最佳分片的大小应该与HDFS上的块大小一样,因为如果分片跨越2个数据块,对于任何一个HDFS节点(Hadoop系统保证一个块存储在一个datanode上,基本不可能同时存储这2个数据块),分片中的另外一块数据就需要通过网络传输到map任务节点,与使用本地数据运行map任务相比,效率则更低。优点就是可以实现分块优化,减少网络传输数据,使用本地数据运行map任务。关于大数据技术,MapReduce分片阶段,以上就为大家做了详细的介绍了。MapReduce作为大数据计算的代表性框架,理解和掌握MapReduce实际的程序执行,也是非常有必要的。
推荐阅读
- 项目管理|2次心态变化和27个问题——机制落地的部分全貌与节奏控制
- 设计模式|Kubernetes 为什么需要 Pod(37)
- 人工智能|浙大吴飞「舌战」阿里贾扬清(AI内卷与年薪百万,哪个才是真实())
- 人工智能|阿里云贾扬清(大数据和人工智能一体化是必然趋势)
- Flink|独家专访阿里集团副总裁贾扬清(我为什么选择加入阿里巴巴())
- 人工智能|【送书 10 本】阿里巴巴副总裁贾扬清推荐,国内第一本数据竞赛相关图书,今天正式预售啦...
- java|复旦博士写了130行代码,2分钟解决繁琐核酸报告核查
- 数据库|您有多点会员吗——数据库渐进式创新助力多点稳步推进经营大脑实践
- big|新经济 DTC 转型,一个简单而强大的数据平台至关重要