`
younglibin
  • 浏览: 1207678 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop文件接口FileInputFormat中split计算方法

 
阅读更多

在FileInputFormat map操作中有一块非常中的split的算法 ,

以wordcount为例子,他到底是如果做分片的,我们如何来调优呢,

首先我们来看下他的算法:

在FileInputFormat    public List<InputSplit> getSplits(JobContext job)  中计算 分片大小用到的几个数据我么先来看一下:

 

// 主要以来配置中的 值,缺省为 1 ;

long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));

protected long getFormatMinSplitSize() {
    return 1;
  }

public static long getMinSplitSize(JobContext job) {
    return job.getConfiguration().getLong(SPLIT_MINSIZE, 1L);
  }

public static final String SPLIT_MINSIZE = 
    "mapreduce.input.fileinputformat.split.minsize";

这里  mapreduce.input.fileinputformat.split.minsize 在 /mapred-default.xml 的配置主哦功能默认是 0  ,所以getMinSplitSize 返回缺省值 1 ;

而 getFormatMinSplitSize  返回值 值也是  1;

通过 Max之后 最后得到的值是1 ;

这里 可以配置的 就是 split.minsize  ,所以这个值如果配置的大于1的话 ,那么 minSize  就是  配置主哦功能的split.minsize了,

 

//默认使用最大值,配置了,就使用配置的值;

long maxSize = getMaxSplitSize(job);

public static long getMaxSplitSize(JobContext context) {
    return context.getConfiguration().getLong(SPLIT_MAXSIZE, 
                                              Long.MAX_VALUE);
  }

 public static final String SPLIT_MAXSIZE = 
    "mapreduce.input.fileinputformat.split.maxsize";

 从代码可以看出来,缺省使用了 Long.MAX_VALUE,如果配置就是用 配置的值,

 

// 在配置文件 file.blocksize  core-default.xml 默认值 给的 64*1024*1024

long blockSize = file.getBlockSize();

 

 

 

long splitSize = computeSplitSize(blockSize, minSize, maxSize);

  protected long computeSplitSize(long blockSize, long minSize,
                                  long maxSize) {
    return Math.max(minSize, Math.min(maxSize, blockSize));
  }

 实际上是取出了  在 block中splitMax中取出一个最小值,在和分块最小值中取出 较大的一个,

 

举个例子:

 加入 wordcount中使用 最小分块 为 3  ,最大分块为 10,blocksize 为默认 67108864

,那么最终结果为  是 10 

但是我们在跑wordcount的时候,我们应该是都没有 设置这写参数,那么应该都是默认值:

minSize:1    maxSize:Long.MAX_VALUE-- 9223372036854775807   blocksize:67108864

最终得到的值即:blocksize:67108864

 

 

那么在 wordcount 如果出现块的大小刚好把一个单词截断了怎么办呢?

待续.............

 

 

这个配置项定义了在HDFS上每个block的大小,它的值是以字节为单位。

可以在配置文件hadoop-site.xml(Hadoop 0.20 以前版本)定义,

也可以在JobConf里定义。hdfs中block size定义是以文件为粒度的。

 hadoop的mapper数基本由输入文件的block数决定,如果输入的block

size不够大,导致mapper处理时间很短(不到一分钟),大量这样的mapper

会严重降低计算性能。但是如果输入文件都是小文件,就算blocksize再大,每个

文件也会占一个block,这时候要通过合并小文件来减少mapper数,设置blocksize

是没用的。命令行设置块大小可以加参数,0.20以后的用

hadoop fs -D dfs.block.size=134217728 -put local_name remote_location

之前的可以用fs.local.block.size 参数

新版在 dfs.blocksize中设置

 

 

 

 

分享到:
评论

相关推荐

    hadoop 1.04 api

    在Hadoop 1.0.4中,`org.apache.hadoop.mapreduce.lib.input` 包是MapReduce库中的输入格式类,它提供了多种处理数据输入的方法,为开发者提供了灵活的数据处理入口。 MapReduce 是 Hadoop 的核心计算模型,由两个...

    HadoopMR-CombineLocalFiles:它将目录中的所有本地文件合并为一个文件

    4. 在`getSplits()`方法中,根据目录下的所有文件大小,创建一个大的split,而不是为每个小文件创建一个split。 5. 配置MapReduce作业时,将新创建的InputFormat类作为输入格式设置。 此外,需要注意的是,合并本地...

    Hadoop源码解析---MapReduce之InputFormat

    在Hadoop的生态系统中,MapReduce是处理海量数据的一种编程模型,而InputFormat作为MapReduce编程模型的重要组成部分,是负责处理输入数据的关键接口。为了深入理解MapReduce工作原理,必须掌握InputFormat的设计和...

    Hadoop (十三)Hadoop-MR编程 -- 【模拟qq推荐你可能认识的人】

    1. **数据分片(Split)**:Hadoop首先将大文件分割成多个小块(Block),每个Block通常为128MB或256MB,便于分布式处理。 2. **Map阶段**:每个Block会被分配到集群中的某个节点上,执行Map函数。在这个阶段,Map...

    Hadoop实战

    - **概念**:Hadoop 分布式文件系统是一种高度容错性的文件系统,设计用来部署在低廉的硬件上。 - **特点**:支持超大文件存储,支持流式数据访问,自动保存数据副本,提供高吞吐量访问数据的能力。 - **应用场景...

    大数据-Hadoop-MapReduce介绍

    这个示例展示了如何创建一个简单的 MapReduce 程序,从输入文件中读取文本,统计每个单词出现的次数,并将结果写入输出文件。通过这种方式,用户可以理解 MapReduce 的基本原理及其在实际应用中的使用方法。

    MapReduce Tutorial 思考总结

    在Hadoop框架中,MapReduce负责将大规模数据集分割成较小的数据块,并在集群中并行处理这些数据块,以提高计算效率。以下是MapReduce的一些关键概念和流程的详细解释: 1. **前置条件**:在开始MapReduce工作之前,...

    MapReduce源码分析

    Mapper类提供`map()`方法,开发者需要在这个方法中编写自己的业务逻辑。 **Shuffle阶段** Shuffle阶段介于Map和Reduce之间,它负责收集Map任务产生的中间结果,并按照键进行排序,为Reduce阶段做准备。在源码中,这...

    Windows上向集群提交任务.docx

    - 将打包后的JAR路径设置到`job.setJar`方法中,确保集群能够找到并执行这个JAR。 在实际操作中,还需要考虑Hadoop客户端的安装和配置,包括Hadoop的环境变量设置、配置文件(如`core-site.xml`, `hdfs-site.xml`,...

    WordCount工具

    WordCount工具是Apache Hadoop生态系统中的一个经典示例程序,用于统计文本文件中各个单词出现的频率。在大数据处理领域,Hadoop是一个广泛使用的开源框架,它提供了分布式存储(HDFS)和分布式计算(MapReduce)的...

    17_尚硅谷大数据之MapReduce框架原理1

    - **切片机制**:`FileInputFormat`根据文件大小和配置的`InputSplit`大小计算出输入数据的切片(split),每个split对应一个map任务。`InputSplit`表示数据输入的一块,可以是文件的一部分或整个文件。 在实际应用...

    MapReduce源码流程.pdf

    3.2.3. `initialize()`方法中,`FileInputFormat.createRecordReader()`创建了一个`LineRecordReader`实例,用于读取数据。 3.2.4. `LineRecordReader.initialize()`确保单词不会跨split边界,例如通过确保每个split...

    mapred_tutorial

    在大多数情况下,计算节点和存储节点是相同的,即MapReduce框架和Hadoop分布式文件系统(HDFS)运行在同一组节点上。这种配置允许框架有效地将任务调度到已经拥有数据的节点上,从而实现非常高的集群聚合带宽。 ###...

    HadoopMapReduce:奇怪的人hadoop MapReduce程序

    在IT行业中,Hadoop MapReduce是一种分布式计算框架,主要用于处理和存储海量数据。这个框架源自Google的MapReduce模型,由Apache Hadoop项目实现,是大数据处理领域的基石之一。在这个名为“奇怪的人Hadoop ...

    WordCount:使用 Hadoop MapReduce 框架的字数统计

    本示例中,我们将深入探讨如何使用Hadoop MapReduce进行“WordCount”操作,这是一种基本但实用的统计任务,用于计算文本文件中每个单词出现的次数。由于涉及到的是Java编程,因此我们将使用Java语言来实现这一过程...

    mapreduce运行过程(个人见解如有错误希望大神指导).pdf

    4. 将切片规划列表List(FileSplit)序列化为文件job.split,并将其复制到job资源提交路径中。然后,将job的相关参数写为job.xml文件,并同样复制到job资源提交路径中。 5. 获取job的jar包并复制到job资源提交路径中...

    HadoopMapReduce:Hadoop MapReduce 示例

    在这个main方法中,我们设置了输入输出路径,Mapper和Reducer类,并启动了Job。 在Hadoop MapReduce中,数据会被自动分发到集群中的节点进行处理,然后将结果合并回中心节点。这种分布式处理模式允许处理非常大的...

    拓思爱诺大数据第五天-mapreduce编程

    - FileInputFormat的getSplits()方法根据这些信息计算数据切片(split)。 - 每个切片对应一个MapTask实例。 **1.3.2 FileInputFormat切片机制** **1.3.2.1 切片定义** 在Hadoop中,切片是在InputFormat类中的...

Global site tag (gtag.js) - Google Analytics