Hadoop学习笔记总结

01. InputFormat和OutFormat

1. 整个MapReduce组件

InputFormat类和OutFormat类都是抽象类。

可以实现文件系统的读写,数据库的读写,服务器端的读写。

这样的设计,具有高内聚、低耦合的特点。

2. 提交任务时,获取split切片信息的流程

  1. JobSubmitter初始化submitterJobDir资源提交路径,是提交到HDFS保存文件路径,一些Jar包和配置文件:

  2. 接下来,是JobSubmitter中将切片信息写入submitJobDir目录。

    int maps = writeSplits(job, submitJobDir);

  3. writeSplits方法中,首先会通过反射拿到用户设置的InputFormat子类的实例(默认为TextInputFormat类),然后调用FileInputFormat的getSplit方法(父类公共方法)再获得切片的信息,封装到InputSplit中,返回List。

     InputFormat<?, ?> input =
    ReflectionUtils.newInstance(job.getInputFormatClass(), conf);
    List<InputSplit> splits = input.getSplits(job);
  4. 最后将切片描述信息写到submitterJobDir资源提交路径中。

     JobSplitWriter.createSplitFiles(jobSubmitDir, conf, jobSubmitDir.getFileSystem(conf), array);
  5. InputSplit包含block块所在位置主机,路径,偏移量等信息。分片数据不包含数据本身,而是指向数据的引用。

  6. input.getSplits()方法解析



    由FileInputFormat类中getSplits方法决定。

    计算公式:

     //computeSplitSize中
    minSize=max{getFormatMinSplitSize(),mapred.min.split.size} (getFormatMinSplitSize()大小默认为1B)
    maxSize=mapred.max.split.size(不在配置文件中指定时大小为Long.MAX_VALUE)
    //blockSize是默认的配置大小:128MB //分片大小的计算公式
    splitSize=max{minSize,min{maxSize,blockSize}}

默认情况下,minSize < blockSize < maxSize

所以,默认不在配置文件配置split最大值和最小值,分片大小就是blockSize,128MB。

公式的含义:取分片大小不大于block,并且不小于在mapred.min.split.size配置中定义的最小Size。

举例说明如何控制分片大小:

3. 为什么Hadoop不擅长小文件

逻辑上,FileInputFormat生成的分块是一个文件或者该文件的一部分,如果是很多小文件,就生成了很多的逻辑block。默认情况下,一个分片就是一个block,因而,会有很多个map任务,每次map操作都有很多额外的开销。

因此,运行大量小文件的任务,会增加运行作业的额外开销;浪费NameNode内存。

解决:CombineFileInputFormat

参考《Hadoop权威指南》

初接触,记下学习笔记,还有很多问题,望指导,谢谢。

Hadoop_FileInputFormat分片的更多相关文章

  1. elasticsearch高级配置一 ---- 分片分布规则设置

    cluster.routing.allocation.allow_rebalance 设置根据集群中机器的状态来重新分配分片,可以设置为always, indices_primaries_active ...

  2. redis分片

    本文是在window环境下测试 什么是分片 当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储 那么当多个请求来取数据时,如何知道数据在哪个redis呢,redis有 ...

  3. CephRGW 在多个RGW负载均衡场景下,RGW 大文件并发分片上传功能验证

    http://docs.ceph.com/docs/master/radosgw/s3/objectops/#initiate-multi-part-upload 根据分片上传的API描述,因为对同一 ...

  4. Ceph RGW服务 使用s3 java sdk 分片文件上传API 报‘SignatureDoesNotMatch’ 异常的定位及规避方案

    import java.io.File;   import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile ...

  5. IP分片详解

    IP分片是网络上传输IP报文的一种技术手段.IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组.不同的链路类型规定有不同最大长度的链路层数据帧,称为链路层MTU(最大传输单 ...

  6. MongoDB的分片(9)

    什么是分片 分片是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载.基本思想就是将集合切成小块,这些块分散到若干片里, ...

  7. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  8. 用百度webuploader分片上传大文件

    一般在做文件上传的时候,都是通过客户端把要上传的文件上传到服务器,此时上传的文件都在服务器内存,如果上传的是视频等大文件,那么服务器内存就很紧张,而且一般我们都是用flash或者html5做异步上传, ...

  9. mongodb分片配置

    通过YUM库自动安装Mongodb 手动安装配置mongodb 验证mongodb主从复制过程 验证mongodb副本集并实现自动切换 实验mongodb使用gridfs存放一个大文件 1.创建数据目 ...

随机推荐

  1. LeetCode2:Median of Two Sorted Arrays

    题目: There are two sorted arrays A and B of size m and n respectively. Find the median of the two sor ...

  2. 线段树的区间更新---A Simple Problem with Integers

    POJ   3468 Description 给出了一个序列,你需要处理如下两种询问. "C a b c"表示给[a, b]区间中的值全部增加c (-10000 ≤ c ≤ 100 ...

  3. ahjesus ubuntu10.4安装ruby2.1.1

    sudo apt-get install python-software-properties sudo apt-add-repository ppa:brightbox/ruby-ng sudo a ...

  4. H5调用Android播放视频

    webView.loadUrl("http://10.0.2.2:8080/assets/RealNetJSCallJavaActivity.htm"); js调用的Java文件中 ...

  5. mysql root用户kill connection报ERROR 1095 (HY000): You are not owner of thread N

    今日某系统mysql root用户kill connection时报ERROR 1095 (HY000): You are not owner of thread N 按说通过root用户具有supe ...

  6. TSQL生成Combguid

    Nhibernate实现combguid /// <summary> /// Generate a new <see cref="Guid"/> using ...

  7. python基础之常用模块以及格式化输出

    模块简介 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...

  8. 管理系统的前端解决方案:Pagurian V1.3发布

    Pagurian 一个管理系统的前端解决方案, 致力于让前端设计,开发,测试,发布更简单. 功能简介 Pagurian 适用于Web管理级的项目 基于Sea.js遵循CMD规范,友好的模块定义,使业务 ...

  9. Android Service获取当前位置(GPS+基站)

    需求详情:1).Service中每隔1秒执行一次定位操作(GPS+基站)2).定位的结果实时显示在界面上(要求得到经度.纬度)技术支持:1).获取经纬度通过GPS+基站获取经纬度,先通过GPS来获取, ...

  10. SharePoint 2013 跨网站集发布功能简介

    在SharePoint Server 2013网站实施中,我们经常会遇到跨网站集获取数据,而2013的这一跨网站集发布功能,正好满足我们这样的需求. 使用SharePoint 2013中的跨网站发布, ...