MapReduce 不仅仅是一个工具,更是一个框架。我们必须拿问题解决方案去适配框架的 map 和 reduce 过程
  很多情况下,需要关注 MapReduce 作业所需要的系统资源,尤其是集群内部网络资源的使用情况。这是MapReduce 框架在设计上的取舍,是在需要考虑并发、容错、扩展性以及其他挑战与只关注数据的分布式处理之间的平衡。但是,独特的系统加上独特的问题使解决方案产生了独特的设计模式。

 
  我们不仅要关注代码的简洁和可维护性,同时还要考虑到任务会在数百台机器的共享集群上处理 TB 级甚至 PB 级的数据,任务性能也需要格外地重视。同时,该作业与共享集群的机器上数以百计的任务存在竞争关系。 一个好的设计可以带来几个数量级的性能提升,因此选择正确的设计来实现 MapReduce 算法就显得尤为重要。
 
  随着 pig、hive 的发展,他们更将能解决 90% 以上的业务场景。 但是那10% 将是他们无法解决的。 这种情况编写MR 就是最好的解决方案。    就像有些时候依然必须用 汇编语言一样。
 
 
 
HDFS 分块  - MapReduce 分析
 
    HDFS 数据划分        : 文件上传之后,第一件事就是数据划分,是按照配置文件的块大小进行的物理分块。 
    Hadoop 数据划分    : 现在版本是 JobClient  去进行划分分析 split.file 写入 HDFS 中,到时候 JobTracker 端读这个文件。计算一个文件 有多少个 Block是由 getSplits这个函数计算的单位是Block个数. 
   MapTask任务分配    : map 的个数是由 splits 长度决定。 一个 splits 不会包含两个 File 的块,不会跨越 File 边界。 splits 和 Block 关系式一对多关系,默认是一对一。
   Reduce 任务        : Shuffle, 也是 Copy 阶段,Reduce Task 从各个 MapTask 上远程拷贝数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放在内存中。
很多情况下 Reduce 执行时需要跨节点拉取其他节点的 map task 结果。 如果集群正在运行的 job 有很多, 那么 task 的正常执行对集群内部的网络资源消耗会很严重。 这种网络小号是正常的。 不能加以限制,能做的就是最大化的减少不必要的消耗。还有在节点内,相比于内存,磁盘 IO 对 job 完成任务影响是很客观的。 
   Shuffer            : 完整的拉取 map 节点数据。 减少对带宽不必要的消耗。 减少磁盘IO对 task 的执行影响。(主要是尽量使用内存而非磁盘。)
 
 
FileSplit 类:

(1)数据切分:按照某个策略将输入数据切分成若干个split,以便确定MapTask个数以及对应的split;

(2)为Mapper提供输入数据:读取给定的split的数据,解析成一个个的key/value对,供mapper使用。

InputFormat有两个比较重要的方法:(1)List<InputSplit> getSplits(JobContext job);(2)RecordReader<LongWritable, Text> createRecordReader(InputSplit split,TaskAttemptContext context)。

 
 
 

一 梳理 从 HDFS 到 MR。的更多相关文章

  1. HDFS和MR的配置和使用

    一.分布式HDFS的安装和启动 ①在$HADOOP_HOME/etc/hadoop/core-site.xml文件 <configuration> <property> < ...

  2. 大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  3. Hadoop HDFS 设计随想

    目录 引言 HDFS 数据块的设计 数据块应该设置成多大? 抽象成数据块有哪些好处? 操作块信息的命令 HDFS 中节点的设计 有几种节点类型? 用户如何访问 HDFS? 如何对 namenode 容 ...

  4. Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

    转自:http://blog.csdn.net/iamdll/article/details/20998035 分类: 分布式 2014-03-11 10:31 156人阅读 评论(0) 收藏 举报 ...

  5. 第十一章: Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

    HDFS的体系架构 整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持,并通过MR来实现对分布式并行任务处理的程序支持. HDFS采用主从(Master/Slave)结构模型,一 ...

  6. Hadoop体系结构之 HDFS

    HDFS采用主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的(在最新的Hadoop2.2版本已经实现多个NameNode的配置-这也是一 ...

  7. Hadoop学习笔记—HDFS

    目录 搭建安装 三个核心组件 安装 配置环境变量 配置各上述三组件守护进程的相关属性 启停 监控和性能 Hadoop Rack Awareness yarn的NodeManagers监控 命令 hdf ...

  8. vivo 万台规模 HDFS 集群升级 HDFS 3.x 实践

    vivo 互联网大数据团队-Lv Jia Hadoop 3.x的第一个稳定版本在2017年底就已经发布了,有很多重大的改进. 在HDFS方面,支持了Erasure Coding.More than 2 ...

  9. inteview que2

    1.spring的缓存,mybatis缓存a.基于注解的方式 三种注解b.mybatis分为一级session和二级缓存mapperc.采用LRU算法(近期最少使用) http://www.iteye ...

随机推荐

  1. shell-1.shell概述、2.shell脚本执行方式

    目录

  2. span文本自动换行

    .span{ word-wrap: break-word; word-break: break-all; overflow: hidden; }

  3. UVA-1347 Tour 动态规划 难以确定的状态

    题目链接:https://cn.vjudge.net/problem/UVA-1347 题意 给出按x坐标排序的几个点. 欲从最左边不回头的走到最右边,然后再返回最左边. 每个点都要被访问,且只能经过 ...

  4. Linux学习之计算机基础理论

    一.描述计算机的组成及其功能. 计算机系统是由硬件系统(hardware)和软件系统(software system)两部分组成. 硬件系统: 从硬件基本结构上来讲,计算机是由运算器.控制器.存储器. ...

  5. Kneser猜想与相关推广

    本文本来是想放在Borsuk-Ulam定理的应用这篇文章当中.但是这个文章实在是太长,导致有喧宾夺主之嫌,从而独立出为一篇文章,仅供参考.$\newcommand{\di}{\mathrm{dist} ...

  6. C# winform压缩文件夹带进度条

    注意:用了开源的CL.IO.Zip库 pbYSJD是进度条的控件名 btnImport是按钮控件名,当压缩结束之后,使按钮处于激活状态,否则无法点击按钮. /// <summary> // ...

  7. 走进 CPU 的 Cache

    看了上一篇文章.你可能非常想知道,为什么程序的执行结果会是这样.如今,就让我们来走进 CPU 的世界. 在 SMP(对称多处理器)时代,多个 CPU 一起工作.使运算能力进一步提升,那么CPU 是怎样 ...

  8. MySQl Study学习之--MySQl二进制日志管理

    MySQl Study学习之--MySQl二进制日志管理 MySQL二进制日志(Binary Log)   a.它包括的内容及作用例如以下:     包括了全部更新了数据或者已经潜在更新了数据(比方没 ...

  9. [转]GLTF-3D图形界的JPEG

    GLTF简介 1.glTF(GL TransmissionFormat),即图形语言交换格式,它是一种3D内容的格式标准,由Khronos Group管理(Khronos Group还管理着OpenG ...

  10. DNS SOA NS区别

    转自 http://bbs.51cto.com/thread-908637-1.html NS服务器里有两个比较重要的记录.一个叫SOA记录(起始授权机构) 一个叫NS(Name Server)记录( ...