`

Hadoop代码分析(二)

阅读更多

Inputormat:describes the input-specification for a Map-Reduce job

 

它是一个用于处理指定输入的接口:

1.用于验证输入的有效性;

2.将指定输入切割成许多逻辑上的split供mapper函数处理;

3.提供一个RecodeReader让mapper一点点的处理split中的数据;

Inputformat其中有两个方法createRecodeReader(),getplits(),先看看getsplit(),将指定的输入切割成不同的split,有一个split基类叫做FIleInputFormat,所有的InputFormat都继承该类。大家都知道hadoop中一个block快是64M,代码中用blocksize标识它,getSplit的机制就是:先从minsize,maxsize,blocksize中计算Math.max(minSize, Math.min(maxSize, blockSize)),一般情况下splitsize都是blocksize(只要你的maxsize,minsize设置的别太多分就行了,呵呵~),然后循环的计算(byteremaining(length-splitsize的值)/splitsize)是否大于一个名为SPLIT_SLOP=1.1的值,如果大于,则生成一个FIleSplit:起始位置是上一个split的最后一个位置,长度是splitsize,第一次的起始位置当然是0(源码中用length-bytesRemaining标识),循环的最后将bytesRemaining将去该splitsize,然后继续循环;如果(byteremaining(length-splitsize的值)/splitsize)不大于1.1,并且bytesRemaining不为0,那么也将剩余的bytes生成一个split,其余的代码中也有,想必大家都会看得;

 

下面是源代码:

 

// generate splits
    List<InputSplit> splits = new ArrayList<InputSplit>();
    for (FileStatus file: listStatus(job)) {
      Path path = file.getPath();
      FileSystem fs = path.getFileSystem(job.getConfiguration());
      long length = file.getLen();
      BlockLocation[] blkLocations = fs.getFileBlockLocations(file, 0, length);
      if ((length != 0) && isSplitable(job, path)) { 
        long blockSize = file.getBlockSize();
        long splitSize = computeSplitSize(blockSize, minSize, maxSize);

        long bytesRemaining = length;
        while (((double) bytesRemaining)/splitSize > SPLIT_SLOP) {
          int blkIndex = getBlockIndex(blkLocations, length-bytesRemaining);
          splits.add(new FileSplit(path, length-bytesRemaining, splitSize, 
                                   blkLocations[blkIndex].getHosts()));
          bytesRemaining -= splitSize;
        }
        
        if (bytesRemaining != 0) {
          splits.add(new FileSplit(path, length-bytesRemaining, bytesRemaining, 
                     blkLocations[blkLocations.length-1].getHosts()));
        }
      } else if (length != 0) {
        splits.add(new FileSplit(path, 0, length, blkLocations[0].getHosts()));
      } else { 
        //Create empty hosts array for zero length files
        splits.add(new FileSplit(path, 0, length, new String[0]));
      }
    }
    LOG.debug("Total # of splits: " + splits.size());
    return splits;
  }
 

接下来是RecordRedaer,在源代码中,有一个名为LineRecordReader的类,用于从输入的split读入key/value对,

 

分享到:
评论

相关推荐

    Hadoop源代码分析完整版.pdf

    Hadoop源代码分析完整版.pdf

    Hadoop源代码分析(完整版).pdf

    Hadoop 源代码分析 Hadoop 是一个开源的分布式计算框架,由 Apache 基金会维护。Hadoop 的核心组件包括 HDFS(Hadoop Distributed File System)和 MapReduce。HDFS 是一个分布式文件系统,可以存储大量的数据,而 ...

    Hadoop源代码分析

    《Hadoop源代码分析》是一本深入探讨Hadoop核心组件MapReduce的专著。Hadoop是Apache软件基金会的一个开源项目,旨在提供分布式存储和计算框架,以处理和存储大量数据。MapReduce是Hadoop的核心计算模型,它通过将大...

    深入云计算:Hadoop源代码分析(修订版)

    深入云计算:Hadoop源代码分析(修订版)

    深入云计算 Hadoop源代码分析

    ### 深入云计算 Hadoop源代码分析 #### 一、引言 随着大数据时代的到来,数据处理成为了各个领域中的关键技术之一。Hadoop作为一个开源的大数据处理框架,因其优秀的分布式计算能力,在业界得到了广泛的应用。...

    Hadoop分析气象数据完整版源代码(含Hadoop的MapReduce代码和SSM框架)

    Hadoop分析气象数据完整版源代码(含Hadoop的MapReduce代码和SSM框架) 《分布式》布置了一道小作业,这是作业的所有代码,里面包含了Hadoop的MapReduce代码、和SSM框架显示数据的代码

    Hadoop源代码分析完整版.doc

    "Hadoop源代码分析完整版" Hadoop作为一个开源的分布式计算框架,具有高可扩展性和高性能的特点。Hadoop的源代码分析可以分为多个部分,包括HDFS、MapReduce、YARN等。 首先,让我们了解Hadoop的架构。Hadoop的...

    Hadoop分析气象数据完整版代码

    在这个项目中,我们重点关注的是一套完整的Hadoop分析气象数据的代码,这涉及到分布式计算、数据处理以及数据可视化等多个关键知识点。 首先,我们要理解Hadoop的核心组件:HDFS(Hadoop Distributed File System)...

    Hadoop源代码分析(一)

    在IT行业中,Hadoop是一个广泛使用的开源大数据处理框架,它主要由Apache软件基金会维护。...在阅读博客文章《Hadoop源代码分析(一)》时,可以结合Hadoop的源码,逐步揭开这个强大框架的神秘面纱。

    Hadoop源代码分析完整版

    ### Hadoop源代码分析知识点详解 #### 一、Hadoop与云计算的核心技术 Hadoop作为分布式计算领域的核心框架,其源代码分析对于深入理解云计算的底层实现至关重要。Hadoop最初的设计灵感来源于Google的一系列论文,...

    Hadoop源代码分析(完整版

    在Hadoop源代码分析中,首先,我们可以看到HDFS(Hadoop分布式文件系统)是所有基于Hadoop项目的基础。HDFS的设计灵感来源于Google的GFS(Google File System),它通过将大文件分割成块并复制到多个节点来确保数据...

    Hadoop源代码分析 高清完整中文版PDF下载

    根据提供的文件内容,以下是关于Hadoop源代码分析的知识点总结。 首先,Hadoop项目起源于Google的核心技术论文。Google开发了一系列创新技术用于构建其大规模的分布式计算平台,这些技术包括Google Cluster、Chubby...

    hadoop代码

    在大数据处理领域,Hadoop和HBase是两个非常重要...以上就是关于"Hadoop代码"资源的详细解析,这个资源提供了从基础API使用到高级优化策略的全面学习材料,对于想要深入理解并应用Hadoop和HBase的开发者来说极具价值。

    Hadoop源码分析视频下载

    - 性能调优:学习如何通过调整参数和优化代码来提升Hadoop集群的性能。 通过深入学习和理解Hadoop源码,你将能够更好地驾驭这个强大的大数据处理工具,解决实际项目中的问题,甚至为Hadoop社区贡献自己的改进和...

    hadoop源代码存档

    这个"hadopp源代码存档"包含了Hadoop项目的完整源代码,供开发者深入理解其内部机制,进行二次开发或优化。 一、Hadoop核心组件 Hadoop主要由两个核心组件构成:Hadoop Distributed File System (HDFS) 和 ...

Global site tag (gtag.js) - Google Analytics