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. c#获取DataTable某一列不重复的值,或者获取某一列的所有值

    实现该功能是用了DataView的筛选功能,DataView表示用于排序.筛选.搜索.编辑和导航的 DataTable 的可绑定数据的自定义视图. 这里做了一个简单易懂的Demo来讲述该方法. 1.建 ...

  2. 搭建javawebxiangmu

    https://blog.csdn.net/qq_23994787/article/details/73612870#

  3. 15条JavaScript最佳实践【转】

    本文档整理大部分公认的.或者少有争议的JavaScript良好书写规范(Best Practice).一些显而易见的常识就不再论述(比如要用对象支持识别判断,而不是浏览器识别判断:比如不要嵌套太深). ...

  4. 关于python return 和 print 的区别

    概念上一个是 返回值   一个是打印输出 区别一:return是结束语一般放在函数的最后,当你在return 结束后面再写一些东西是不执行的如 下 def renshu(x,y): h=x+y pri ...

  5. Linux系统下安装配置 OpenLDAP + phpLDAPadmin

    实验环境: 操作系统:Centos 7.4 服务器ip:192.168.3.41 运行用户:root 网络环境:Internet LDAP(轻量级目录访问协议)是一个能实现提供被称为目录服务的信息服务 ...

  6. hdu 2191 悼念512汶川大地震遇难同胞——珍惜如今,感恩生活

    #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ...

  7. codeforces 570 D Tree Requests

    题意:给出一棵树.每一个结点都有一个字母,有非常多次询问,每次询问.以结点v为根的子树中高度为h的后代是否可以经过调整变成一个回文串. 做法: 推断能否够构成一个回文串的话,仅仅须要知道是否有大于一个 ...

  8. C内存管理一 概述

    我们写了这么多年的程序猿.可能理论方面还比不上大学生.有人 "嘘"我了,假设有能回答下面几个问题的同学请举手: 1.面试常常遇到:同学请说说堆栈的差别? 2.同学请说说一个函数在堆 ...

  9. SFTP的使用

    SFTP的使用: 1.项目中需要引入jar包,下载地址:https://sourceforge.net/projects/jsch/files/jsch.jar/ 2.需要下载SFTP服务器,下载地址 ...

  10. java 类和对象10

    创建一个Point类,有成员变量x,y,方法getX(),setX(),还有一个构造方法初始化x和y.创建类主类A来测试它. public class Print { private int x; p ...