MapReduce块划分与区块划分
MapReduce是一种编程模型,用于处理大量数据,在MapReduce中,输入数据被分割成独立的块,这些块被称为“Split”,每个Split由一个Map任务处理,因此Split的数量决定了Map任务的数量。
map个数的确定
map数与split数的关系:在MapReduce作业中,map任务的数量是由输入数据的split数量决定的,每个split都会由一个单独的map任务来处理。
InputFormat的作用:InputFormat类负责将输入数据划分为多个逻辑上的InputSplit,并为每个InputSplit提供一个RecordReader,将其内容转换为键值对。
FileInputFormat的使用:FileInputFormat是InputFormat的一个子类,通常用于处理存储在HDFS上的文件,TextInputFormat和SequenceFileInputFormat都是其子类,分别用于处理普通文本文件和Sequence文件。
split的划分过程
计算split大小:split的大小是根据block大小(默认为HDFS设置的文件存储BLOCK大小)、最小split大小和最大split大小来计算的,默认情况下,split大小等于block大小。
遍历文件并计算split:遍历输入目录中的每个文件,根据文件长度和split大小来确定split的数量和大小,如果文件长度为0且设置了跳过零长度文件的参数,则不生成split;否则,根据文件长度和split大小生成相应数量的split。
避免过小的split:在划分split时,会判断剩余待切分文件大小是否大于split大小的1.1倍,以避免生成过多的小split。
分片大小的选择
默认分片大小:在Hadoop 2.x中,默认的block大小是128MB,而在Hadoop 1.x中是64MB,可以在hdfssite.xml文件中通过dfs.block.size属性设置block大小。
自定义分片大小:可以通过设置mapredsite.xml文件中的mapreduce.input.fileinputformat.split.minsize和mapreduce.input.fileinputformat.split.maxsize参数来自定义分片的最小和最大大小。
分片大小的选择依据:选择适当的分片大小可以平衡计算资源和网络传输效率,如果分片太小,会导致管理分片的总时间和构建Map任务的总时间增加;如果分片太大,可能会导致跨块读取数据,增加网络传输成本。
相关问答FAQs
1、MapReduce中如何确定Map任务的数量?
在MapReduce作业中,Map任务的数量是由输入数据的split数量决定的,每个split都会由一个单独的Map任务来处理,Map任务的数量等于split的数量。
2、为什么MapReduce中的分片大小通常与HDFS的块大小一致?
分片大小与HDFS的块大小一致可以优化性能和减少网络传输数据量,当分片跨越两个数据块时,部分数据需要通过网络传输到Map任务节点,这会增加网络IO的压力并降低程序的通信效率,最佳分片大小应该和HDFS上的块大小一致。
MapReduce通过将大文件划分为多个split来提高并行度,每个split由一个Map任务处理,split的划分由InputFormat类完成,通常使用FileInputFormat及其子类,分片大小的选择影响计算资源和网络传输效率,通常与HDFS的块大小一致以优化性能。
序号 | 概念 | 描述 |
1 | MapReduce块划分 | 将输入数据集分割成多个小的数据块(通常称为”切片”),每个块会被分配给一个Map任务进行处理。 |
2 | 切片大小 | 每个切片的大小通常取决于输入数据的大小和MapReduce作业的配置。 |
3 | Map任务分配 | 每个切片被分配给一个Map任务,Map任务负责将输入切片转换成键值对输出。 |
4 | 切片划分逻辑 | 固定大小切片:切片大小固定,适用于文本文件等均匀分布的数据。 |
动态大小切片:切片大小根据文件大小动态调整,适用于非均匀分布的数据。
最小化切片大小:切片大小至少为128MB,适用于大型文件,防止内存溢出。
最大化切片大小:切片大小最大为1GB,适用于处理大型文件,提高效率。
| 5 | 区块划分 | 在Hadoop中,数据存储在HDFS(Hadoop Distributed File System)中,HDFS将文件分割成固定大小的数据块。 |
| 6 | 数据块大小 | HDFS默认的数据块大小为128MB或256MB,但可以根据需要进行调整。 |
| 7 | 数据块分配 | HDFS中的数据块会被分配到集群中的不同节点上,以实现数据的冗余和负载均衡。 |
| 8 | 数据块映射 | HDFS会维护一个数据块映射,记录每个数据块存储在哪个节点上,以便MapReduce作业可以高效地访问数据。 |
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1182092.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复