`

Hadoop之MapReduce输入(split)输出

 
阅读更多
Split分割
在执行mapreduce之前,原始数据被分割成若干split,每个split作为一个map任务的输入
在map执行过程中split会被分解成一个个记录(key-value对),map会依次处理每一个记录。
(Key:偏移量,不是行数)

FileInputFormat:

FileInputFormat是所有以文件作为数据源的InputFormat实现的基类,FileInputFormat
保存作为job输入的所有文件,并实现了对输入文件计算splits的方法。至于获得记录的
方法是有不同的子类进行实现的;
1) FileInputFormat只划分比HDFS block大的文件,所以FileInputFormat划分的结果是
           这个文件或者是这个文件中的一部分.               
2) 如果一个文件的大小比block小,将不会被划分,这也是Hadoop处理大文件的效率要比
           处理很多小文件的效率高的原因。
3) 当Hadoop处理很多小文件(文件大小小于hdfs block大小)的时候,由于FileInputFormat
不会对小文件进行划分,所以每一个小文件都会被当做一个split并分配一个map任务,导致
效率底下。

例如:
一个1G的文件,会被划分成16个64MB的split,并分配16个map任务处理,而10000个
100kb的文件会被10000个map任务处理。

获得了输入文件后,FileInputFormat是怎样将他们划分成splits的呢?

input file -->split -->map task

计算SplitSize的函数很简单:

splitSize = max(minsize,min(maxSize,blockSize)) = 64M;
maxSize = mapred.max.split.size 默认最大值整数值
minSize = mapred.min.split.size 默认0

那么我们如何处理同一行垮Split问题呢?
首先map任务getSplit读入一个split-->recordReader一行一行读取数据,如果有一行数据在
两个split中,map读入第一个split后,会去读取留在另一个split中的半行;然而另一个map
读入第二个split时,会自动跳过第一个换行符;


  //此方法每次只读取一行数据,key为偏移量,value为本行数据
public void map(Object key, Text value, Context context)
   throws IOException, InterruptedException {
        StringTokenizer itr = new StringTokenizer(value.toString());
        while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        context.write(word, one);
   }
} 
          
分割成split(不支持的除外)比如:1G的文件切割成64M,放到一个map里面,如果不支持直接把1G
放到map里面
解释map方法中的(key偏移量-value对):
abcdefghigklmnopqrstuvwxyz        key = 0     value=abcdefghigklmnopqrstuvwxyz 
abcdefghigklmnopqrstuvwxyz        key = 26   value=abcdefghigklmnopqrstuvwxyz 
abcdefghigklmnopqrstuvwxyz        key = 52   value=abcdefghigklmnopqrstuvwxyz


转自:http://www.cnblogs.com/zhanghuijunjava/archive/2013/04/25/3036512.html
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    007_hadoop中MapReduce应用案例_1_数据去重

    在MapReduce任务中,这些文件会被Hadoop分片(split)并分发到集群中的各个节点进行并行处理。每个节点上的mapper会读取分片的数据,通过`map()`函数生成中间键值对。例如,如果数据是用户ID和他们的购买记录,...

    006_hadoop中MapReduce详解_3

    在Map阶段,输入数据被分割成多个块(split),每个块由一个Map任务处理。Map函数接收到一个键值对,对其进行处理,并生成新的键值对。这些中间结果随后通过 shuffle 和 sort 阶段进行排序和分区,准备进入 Reduce ...

    Hadoop之MapReduce的Java实现在windows下开发需要的winutils等文件

    此外,还需要创建一个`Job`实例,设置输入输出格式、Mapper和Reducer类,以及其他的配置参数。 在Windows环境下运行MapReduce程序,你可能需要使用模拟HDFS的工具,如MiniDFSCluster,或者通过cygwin等工具模拟...

    hadoop-mapreduce

    Hadoop MapReduce是一种分布式计算框架,是Apache Hadoop生态系统的核心组成部分,主要用于处理和存储大规模数据集。这个项目是一个学习Hadoop MapReduce的实践项目,利用Maven构建,无需单独安装Hadoop环境,只需在...

    MR.rar_hadoop_mapReduce_paidabk

    标题中的“MR.rar_hadoop_mapReduce_paidabk”暗示了这是一个与Hadoop MapReduce相关的压缩文件,其中可能包含了实现MapReduce算法的源代码以及与Hadoop框架相关的JAR包。这个压缩包很可能是为了帮助开发者理解和...

    大数据-Hadoop-MapReduce介绍

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

    Hadoop-mapreduce过程.doc

    MapReduce是Apache Hadoop的核心组件之一,它为大规模数据处理提供了分布式计算框架。本文将从客户端、JobTracker、TaskTracker和Child四个角度,详细阐述MapReduce的工作流程。 1. **客户端提交任务** MapReduce...

    hadoop集群mapreduce例子共52页.pdf.z

    MapReduce是Apache Hadoop框架的核心组件之一,它为大规模数据处理提供了分布式计算模型。本资料“hadoop集群mapreduce例子共52页.pdf”详细介绍了MapReduce的工作原理、架构及其在实际应用中的案例,帮助读者深入...

    完整版大数据云计算课程 Hadoop数据分析平台系列课程 Hadoop 04 MapReduce 共31页.rar

    MapReduce是Hadoop的核心组件之一,主要用于大规模数据集的并行计算。这份课程可能涵盖了MapReduce的基本概念、工作原理、编程模型以及在实际应用中的案例分析。 MapReduce的原理可以这样理解:它将大数据处理任务...

    Hadoop技术MapReduce简介共8页.pdf.zi

    MapReduce是Apache Hadoop生态系统中的核心组件之一,它是一种分布式计算模型,用于处理和生成大规模数据集。在本文中,我们将深入探讨MapReduce的工作原理、关键概念以及它在Hadoop框架中的作用。 MapReduce的核心...

    Hadoop MapReduce教程.pdf

    从给定的文件信息来看,文档标题为"Hadoop MapReduce教程.pdf",描述与标题相同,标签为"Hadoop Map Reduce",部分内容虽然无法完全解析,但可以推断出与Hadoop MapReduce的基本概念、操作流程以及相关的编程模型...

    Hadoop的MapReduce执行过程介绍.pdf

    MapReduce是Hadoop框架的核心组件之一,用于处理和生成大数据集。它主要由两个主要阶段组成:Map阶段和Reduce阶段,这两个阶段都是基于键值对(key-value pair)的操作。 1. Map阶段: 在这个阶段,数据首先被输入...

    词频统计,利用Hadoop中mappereduce进行单词的计数

    Hadoop运行在Hadoop分布式文件系统(HDFS)之上,它能够跨多台服务器存储和处理数据。HDFS将大文件分割成多个块,并将这些块复制到多个节点,以确保数据的可靠性和可用性。 **Hadoop配置与执行** 要进行词频统计,...

    Hadoop技术内幕 深入解析MapReduce架构设计与实现原理[董西成][带书签].pdf 百度网盘下载

    在MapReduce中,原始输入数据被划分为多个分片(Split),每个分片由一个Map任务处理。分片的大小通常是HDFS块的大小,这样可以确保数据的本地性,提高处理效率。分区函数则决定了中间结果如何分配给Reduce任务。 #...

    Hadoop MapReduce Cookbook

    - **InputFormat & OutputFormat**:指定输入输出数据的格式。 - **Partitioner**:控制map输出如何被分发到reduce任务。 - **Combiner**:可选组件,用于减少网络传输量,可以在map端先做局部汇总。 #### 三、...

    Hadoop MapReduce

    词频统计是最经典的MapReduce应用案例之一,用于统计文本文件中每个单词出现的次数。 - **Map函数**: - 输入:文本文件的一行。 - 输出:键值对,键为单词,值为1。 - **Reduce函数**: - 输入:相同的键...

    基于Hadoop MapReduce的电商网站商品数据分析.rar

    为了实现这些分析,开发者需要编写Map和Reduce函数,定义输入输出格式,以及设置相关的配置参数。同时,还需要注意优化MapReduce性能,比如合理设置Split大小、减少Shuffle阶段的数据传输等。 总的来说,基于Hadoop...

    大数据实验报告Hadoop编程实现wordcount单词统计程序附源码.doc

    实验的目的在于熟悉 Hadoop 虚拟机的安装与环境的配置,初步理解 MapReduce 方法,熟悉相关语法,基本掌握编程框架。 实验环境: * 操作系统:Window11 * 虚拟机:Hadoop 虚拟机 * JDK 版本:JDK 1.8 实验内容: ...

    mapreduce项目 数据清洗

    MapReduce的编程模型通常使用Java实现,但也有其他语言如Python和Scala的实现,如Apache Hadoop的MapReduce API(Hadoop Streaming)允许使用任何可执行程序作为mapper和reducer。在本项目中,开发者可以选择最适合...

Global site tag (gtag.js) - Google Analytics