关于MapReduce

MapReduce与RDBMS的适用场景区别

MapReduce适用场景:
1、适合一次写入,多次读取数据的应用
2、对半结构化或者非结构化数据非常有效,非常适用于分析各种日志文件

RDBMS
适用场景:
1、适合于点查询和更新
2、能够提供低延迟的数据检索
3、快速的少量数据更新,适合持续更新的数据集
4、适用于结构化数据

特征

1、尽量在计算节点上存储数据,以实现数据的本地快速访问,数据本地化是核心特征
2、 能够检测到并重新执行失败的map或者reduce任务,正因为采用无共享框架,MapReduce才能够实现失败检测,这意味着各个任务之间是彼此独立的。因此程序的执行顺序无关紧要
3、将问题分解为独立的小块,然后并行进行计算

详解

MapReduce任务过程

1、过程分为map阶段和reduce阶段,每个阶段都以键值对作为输入和输出

2、map阶段输入的是NCDC原始数据。选择文本格式作为输入格式,将数据集的每一行作为文本输入

3、map函数的键是某一行起始位置相对于文件起始位置的偏移量

4、map函数的输出经由MapReduce框架处理后,最后发送到reduce函数。这个过程基于键来对键值对进行排序和分组。(有代码实现在hadoop权威指南中P24)

代码实现三部分(有代码实现及操作在hadoop权威指南中P24)

1、map函数四个形参类型分别指定输入键、输入值、输出键、输出值。
2、reduce函数的输入类型必须与map函数输出类型一致,形参指定输出类型。
3、代码运行作业

Hadoop的基本类型

hadoop本身提供了一套优于网络序列化传输的基本类型,而不是直接使用java内嵌类型。
这些类型都在org.apache.hadoop.io包中。其中LongWritable相当于java的Long类型,Text相当于String,IntWritable类型相当于Integer类型。

输出文件

1、每个reducer都有一个名为part-00000的输出文件(在输出目录下)

2、新API中map的输出文件名为part-m-nnnnn,reducer的输出文件名为part-r-nnnnn(其中nnnn是从0开始的表示分块序号的整数)

控制作业执行过程的两类节点

一个jobtracker及一系列tasktracker。
Jobtracker通过调度tasktracker上的任务来协调所有运行在系统上的作业。tasktracker在运行任务的同时将运行进度报告发送给jobtracker,jobtracker由此记录每项作业任务的整体进度情况。如果其中有一个任务失败,jobtracker可以在另外一个tasktracker节点上重新调度该任务。

分片

Hadoop将MapReduce的输入数据划分为等长的小数据块,称为输入分片,简称“分片”。
Hadoop为每个分片构建一个map任务,并由该任务来运行用户自定义的map函数从而处理分片中的每条记录。

分片大小的确定

①分片被切分的越细,负载均衡的会更高
②但如果切片切分得太小,那么管理分片的总时间和构建map任务的总时间将决定作业的整个执行时间。
因此对于大多数作业来说,一个合理的分片大小趋于HDFS的一个块的大小,默认是64MB(从2.7.3版本开始block size的默认大小为128M,之前版本的默认值是64M),不过可以针对集群调整这个默认值(对新建的所有文件),或对新建的每个文件具体指定。

为什么最佳分片的大小应该与块大小相同

1、因为它是确保可以存储在单个节点上的最大输入块大小。如果分片跨越两个数据块,那么对于任何一个HDFS节点,基本上都不可能同时存储这两个数据块,因此分片中的部分数据需要通过网络传输到map任务节点,效率低。

2、Hadoop在存储有输入数据(HDFS中的数据)的节点上运行map任务,可以获得最佳性能。这就是所谓的“数据本地化优化”,因为它无需使用宝贵的集群带宽资源。
但是对于一个map任务的输入来说,存储有某个HDFS数据块备份的节点可能正在运行其他map任务,此时作业调度需要在三个备份中的某个数据寻求同个机架中空闲的机器来运行该map任务。
注意:但reduce任务不具备数据本地化的优势——单个reduce任务的输入通常来自于所有mapper的输出(不绝对),排过序的map输出通过网络传输发送到运行reduce任务的节点。数据在reduce端合并,然后由用户定义的reduce函数处理。

Map任务和reduce任务的输出

Map任务输出写入本地硬盘,是中间结果,reduce任务的输出为最终结果,通常存储在HDFS中以实现可靠存储

reduce任务的数量

reduce任务的数量并非由输入数据的大小决定的,而是独立指定的。如果有多个reduce任务,每个map任务就会针对输出进行分区(partition),即为每个reduce任务建一个分区。分区由用户定义的partition函数控制,但通常用默认的partitioner通过哈希函数来分区,很高效。

混洗

Map任务和reduce任务之间的数据流称为(shuffle)混洗。

当数据处理可以完全平行时,即无需混洗时,可能出现无reduce任务的情况。这种情况下,唯一的非本地节点数据传输就是map任务将结果写入HDFS

Combiner优化

集群上可用带宽限制了MapReduce作业的数量,应该尽量避免map任务和reduce任务之间的数据传输。
Hadoop允许用户针对map任务的输出指定一个combiner。Combiner属于优化方案,所以hadoop无法确定要对map任务输出记录调用多少次combiner(如果需要),但无论调用多少次,reducer的输出结果不变。combiner是通过Reducer类来定义的,针对于每个map任务

Hadoop权威指南(第三版)笔记——MapReduce相关推荐

  1. Hadoop权威指南(第三版)笔记——HDFS

    HDFS是Hadoop抽象的文件系统概念的一个实现. 适用场景 适用于大型商用机集群,流式数据访问模式来存储超大文件. 特征 1.超大文件. 2.流式数据访问.HDFS的构建思路是,一次写入,多次读取 ...

  2. hadoop权威指南第三版 发布说明

    (此文摘自http://hadoopbook.com) hadoop权威指南第三版发行说明: 第三版会在2012年5月发行.你现在可以预定一份电子版,或购买"Early Release&qu ...

  3. 《Hadoop权威指南》第二章 关于MapReduce

    <Hadoop权威指南>第二章 关于MapReduce 目录 使用Hadoop来数据分析 横向扩展 注:<Hadoop权威指南>重点学习摘要笔记 1. 使用Hadoop来数据分 ...

  4. Hadoop权威指南(第3版) 修订版(带目录书签) 中文PDF--高清晰

    一.下载地址(永久有效) 百度云盘下载(公开永久):Hadoop权威指南(第3版) 修订版(带目录书签) 中文PDF高清晰 CSDN积分下载:Hadoop权威指南(第3版)+高清晰 二.数据的存储和分 ...

  5. Hadoop权威指南(第二版)pdf中文版

    今天终于找到 hadoop权威指南第二版的中文pdf版本了,发给大家共享一下 下载地址:http://dl.dbank.com/c0hh1arjiz ------------------------- ...

  6. 【hadoop权威指南第四版】第三章hadoop分布式文件系统【笔记+代码】

    3.1块 显示块信息 % hdfs fsck / -files -blocks 3.5 Java接口 3.5.1从hadoop URL读取数据 使用java.net.URL 对象来打开一个数据流 In ...

  7. 【hadoop权威指南第四版】第六章MR的工作原理【笔记+代码】

    6.1 运行MR作业 工作原理 四大模块: 客户端,提交MR作业. jobtracker,协调作业的运行.jobtracker 是一个java应用程序,主类是Jobtracker. tasktrack ...

  8. 【hadoop权威指南第四版】第七章MR的类型与格式【笔记+代码】

    7.1MR类型 7.2 输入格式 7.2.1输入分片与记录 InputFormat类的层次结构 每一个map操作只处理一个输入分片,并且一个一个地处理每条记录,也就是一个键值对. 在数据库中,一个输入 ...

  9. 【hadoop权威指南第四版】第五章MR应用【笔记+代码】

    5.1 API的配置 配置文件 <?xml version="1.0"?> <configuration> <property> <nam ...

  10. 读书笔记《Hadoop权威指南第4版(Hadoop The Definitive Guide 4th)》

    Chapter 1 Meet Hadoop Data Storage and Analysis The problem is simple: although the storage capaciti ...

最新文章

  1. javascript保留字
  2. 金蝶API apiEnv.apiSession.Token = GetToken()报错
  3. TypeScript Type Innference(类型推断)
  4. 计算机联锁与全电子执行单元,计算机联锁全电子执行单元.doc
  5. 使用win32 API 下载文件
  6. 以往计算机二级c语言填空题,计算机二级C语言考试填空题精选4
  7. [洛谷P4430]小猴打架
  8. JavaScript对象的chapterI
  9. 16-作用域(全局作用域及局部作用域)
  10. 一种轻量级的C4C业务数据同步到S/4HANA的方式:Odata通知 1
  11. Rabbits UVALive - 8211
  12. 计算机专业会议评级,2018计算机专业工程教育认证研讨会
  13. mathematica模式匹配
  14. python代码性能优化技巧
  15. c语言if语句教学设计,C实验教案(清华)
  16. matlab sil,丰田使用高精度发动机模型和SIL+M前置开发发动机控制系统
  17. 给推荐系统加入先验知识的方法总结
  18. 2017到2018总结与展望
  19. android https握手失败,Android SSL错误握手失败
  20. jme示例代码中的素材在哪

热门文章

  1. win7无法连接WIFI,安装无线驱动 AR9485 WIFI Driver for Windows 7 (32-bit, 64-bit)
  2. 装饰者模式的应用:react高阶组件和ES6 装饰器
  3. sql语句 替换数据库中某字段中的特定字符
  4. 简单介绍四方聚合支付系统
  5. Ubuntu 字体安装以及 vscode字体配置
  6. 面试系列(三):Java反射机制
  7. c语言输出指定年份中所有的星期六,用C语言编写程序打印任意年份的日历
  8. 图像特征提取 — LBP算法
  9. java web导出excel表格,java 网页导出excel表格数据-java 将页面内容写入excel文件中并可以将其下载到......
  10. Tomcat下载安装