`
刘小小尘
  • 浏览: 67533 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用CombineFileInputFormat处理小文件的mapreduce程序

 
阅读更多

Dealing with lots of small files in Hadoop MapReduce with CombineFileInputFormat

Input to Hadoop MapReduce process is abstracted by InputFormat. FileInputFormat is a default implementation that deals with files in HDFS. With FileInputFormat, each file is splited into one or more InputSplits typically upper bounded by block size. This means the number of input splits are lower bounded by number of input files. This is not an ideal environment for MapReduce process when it's dealing with large number of small files, because overhead of coordinating distributed processes is far greater than when there are relatively small number of large files. Note here when the input split spills over block boundaries this could work against the general rule of 'having process close to data', because blocks could be at different network locations.

Enter CombineFileInputFormat, it packs many files into each split so that each mapper has more to process. CombineFileInputFormat takes node and rack locality into account when deciding which blocks to place in the same split so it doesn't suffer from the same problem of simply having a big split size.

public class MyCombineFileInputFormat extends CombineFileInputFormat {

  public static class MyKeyValueLineRecordReader implements RecordReader {
    private final KeyValueLineRecordReader delegate;

    public MyKeyValueLineRecordReader(
      CombineFileSplit split, Configuration conf, Reporter reporter, Integer idx) throws IOException {
      FileSplit fileSplit = new FileSplit(
        split.getPath(idx), split.getOffset(idx), split.getLength(idx), split.getLocations());
      delegate = new KeyValueLineRecordReader(conf, fileSplit);
    }

    @Override
    public boolean next(Text key, Text value) throws IOException {
      return delegate.next(key, value);
    }

    @Override
    public Text createKey() {
      return delegate.createKey();
    }

    @Override
    public Text createValue() {
      return delegate.createValue();
    }

    @Override
    public long getPos() throws IOException {
      return delegate.getPos();
    }

    @Override
    public void close() throws IOException {
      delegate.close();
    }

    @Override
    public float getProgress() throws IOException {
      return delegate.getProgress();
    }
  }

  @Override
  public RecordReader getRecordReader(
    InputSplit split, JobConf job, Reporter reporter) throws IOException {
    return new CombineFileRecordReader(
      job, (CombineFileSplit) split, reporter, (Class) MyKeyValueLineRecordReader.class);
  }
}

CombineFileInputFormat is an abstract class that you need to extend and override getRecordReader method. CombineFileRecordReader manages multiple input splits in CombineFileSplit simply by constructing new RecordReader for each input split within. MyKeyValueLineRecordReader creates a KeyValueLineRecordReader to delegate operations to.

Remember to set mapred.max.split.size to a small multiple of block size in bytes as otherwise there will be no split at all.
分享到:
评论

相关推荐

    使用Eclipse编译运行MapReduce程序.doc

    使用Hadoop-Eclipse Plugin,可以在Eclipse内浏览、上传和下载HDFS中的文件,这对于开发和调试MapReduce程序非常方便。 #### 1.3.5 在Eclipse中创建MapReduce项目 创建新的Java项目,编写MapReduce程序,例如经典的...

    使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

    ### 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 #### Hadoop 2.x 版本变化及依赖分析 在Hadoop 2.x版本中,相较于早期版本,其架构和依赖库有了明显的变化。在早期版本如1.x中,所有的依赖都集中在`...

    window下eclipse中运行mapreduce程序所需要的Hadoop全部jar包

    在Windows环境下,使用Eclipse开发MapReduce程序时,必须确保所有必要的Hadoop库都被正确引入。这是因为MapReduce是Hadoop生态系统中的核心组件,用于处理分布式计算任务。以下是一些关于如何在Eclipse中配置和使用...

    Hadoop集群搭建部署与MapReduce程序关键点个性化开发.doc

    总的来说,搭建Hadoop集群和开发MapReduce程序是一个系统性的工程,涉及到操作系统管理、网络配置、Java编程以及大数据处理原理。对于初学者来说,遵循详尽的步骤和代码示例是非常有益的,而逐步熟悉并理解这些过程...

    MapReduce2.0程序设计多语言编程(理论+实践)

    3. **Java编程**:Java是MapReduce的原生语言,使用Hadoop的API可以直接创建MapReduce程序。Java API提供了丰富的类和接口,使得开发过程更为直观和便捷。例如,`org.apache.hadoop.mapreduce`包下的各种类和接口,...

    MapReduce Shuffle 过程图解 Xmind文件

    MapReduce Shuffle 过程图解 Xmind文件

    中文分词mapreduce程序

    总结来说,这个“中文分词MapReduce程序”是一个基于Java的分布式分词工具,利用MapReduce模型对大量中文文本进行高效分词处理,通过分词将原始文本转化为可供分析的词汇单元,并在Reduce阶段完成词频统计。...

    第一个Mapreduce程序.pdf

    在准备数据方面,需要为WordCount程序创建一个文本文件(words.txt),该文件包含了需要进行MapReduce处理的数据。文本文件准备好后,需要上传到HDFS(Hadoop Distributed File System)的指定目录。HDFS是一个...

    windows下编写mapreduce程序

    3. **编程语言**:MapReduce程序通常用Java编写,因为它是最兼容的编程语言,Hadoop的API也主要是为Java设计的。然而,也可以使用其他语言,如Python或C++,通过Hadoop Streaming接口。 4. **MapReduce基本流程**:...

    实验项目 MapReduce 编程

    实验项目“MapReduce 编程”旨在让学生深入理解并熟练运用MapReduce编程模型,这是大数据处理领域中的核心技术之一。实验内容涵盖了从启动全分布模式的Hadoop集群到编写、运行和分析MapReduce应用程序的全过程。 ...

    用mapreduce进行文本处理

    ### 使用MapReduce进行文本处理 #### 一、引言与背景 MapReduce 是一种用于处理大规模数据集(尤其是海量文本数据)的编程模型及其相关的实现。这种模型最初由 Google 提出,并被广泛应用于搜索引擎和大数据处理...

    大数据实验5实验报告:MapReduce 初级编程实践

    【MapReduce初级编程实践】是大数据处理中的一项基础任务,主要应用于大规模数据集的并行计算。在这个实验中,我们关注的是如何利用MapReduce来实现文件的合并与去重操作。MapReduce是一种分布式计算模型,由Google...

    mapreduce程序

    Map阶段是MapReduce工作流程的第一步,它接收输入数据集,并将其分割成多个小的数据块,每个数据块由一个Map任务处理。Map函数通常用于对原始数据进行预处理,如解析、过滤和转换。在这个阶段,数据本地化策略确保...

    hadoop学习本地win测试mapreduce程序,所要用到的环境软件.rar

    这个"hadopp学习本地win测试mapreduce程序,所要用到的环境软件.rar"压缩包文件包含了实现这一目标所需的关键组件和工具。下面,我们将详细探讨这些知识点。 1. Hadoop:Hadoop是Apache基金会开源的一个分布式计算...

    Hadoop平台搭建(单节点,伪分布,分布式文件系统及其上MapReduce程序测试)

    Hadoop是Apache软件基金会的一个开源项目,它提供了一个分布式文件系统(HDFS)和一个并行处理框架MapReduce,非常适合处理和存储大量数据。 首先,我们从单节点模式开始。在这个模式下,所有的Hadoop组件都运行在...

    搭建Hadoop集群,写mapreduce程序处理数据

    搭建了一个完全分布式Hadoop集群,并通过Java写了mapreduce程序处理数据,需要下载的可以找我要具体数据。

    Windows下Eclispe远程开发Mapreduce程序

    在Windows环境下,使用Eclipse进行远程开发MapReduce程序是一个复杂的过程,涉及到多个步骤,包括环境配置、插件安装以及依赖管理。以下是对整个过程的详细解释: 首先,我们需要准备必要的工具和库。`hadoop-...

    MapReduce简单程序示例

    在提供的压缩文件"MapReduce简单程序示例.rar"中,可能包含了一个这样的示例程序,以及相关的指导文档"新建文本文档.txt"。通过阅读和运行这些示例,你可以更深入地了解MapReduce的工作原理和编程模式。在实际应用中...

    MapReduce详解包括配置文件

    1. **文件切片**:在MapReduce任务启动之前,首先对输入文件进行逻辑上的切片处理。每个切片对应一个独立的Map任务。切片的大小默认与HDFS块大小一致,但可以通过配置调整。 2. **Map任务**:每个Map任务处理一个...

    大数据分析课程设计后端大数据分析MapReduce程序和sql脚本.zip

    大数据分析课程设计后端大数据分析MapReduce程序和sql脚本.zip 95分以上必过项目,下载即用无需修改。 大数据分析课程设计后端大数据分析MapReduce程序和sql脚本.zip 95分以上必过项目,下载即用无需修改。大数据...

Global site tag (gtag.js) - Google Analytics