从一个统计气象学的例子,来引出MapReduce的写法,对比了一下新旧API的区别以及不一样。新的API主要采用的是虚类而不是接口的方式来提供服务。讨论了数据流:Hadoop的存储,以及工做原理,还有Combiner函数的使用。最后,谈到了使用不一样语言来实现mapreduce功能(Streaming, Pipes),缘由是由于Hadoop使用了Unix标准做为流做为输入输出和应用程序之间的接口,因此咱们可使用任何编程语言经过标准输入输出来写MapReduce程序。java
首先讲解了文件系统的概念,以及Hadoop文件系统的特色:超大文件、流式数据访问、商用硬件、不知足低延迟数据访问、不适合大量小文件、不支持多写入以及任意修改等等。而后又介绍了块存储的特色。利用块存储的原理的优势是:node
而后又继续讲解了namenode和datanode这两个老生常谈的话题,你须要知道这两个node的功能是什么。须要注意的是namenode的安全机制,由于它事关整个文件系统的生死。关于Hadoop文件系统HDFS的高可用性的实现,有不少文章都探讨过了,你们能够去网上搜搜。web
此外这一章节还谈到了文件系统的基本操做,好比复制,对比之类的。数据库
而后接下来比较重点讲的是HDFS的访问,书中介绍了这么几个方式:编程
而后介绍了读写HDFS的方法,揭示了客户端与HDFS交互的背后的原理,这个在个人博文中也有详细的讲到。还讲到了文件一致性,以及数据导入程序Flume和Sqoop,而后是并行复制工具distcp。最后讲Hadoop的存档工具。安全
既然涉及到hadoop的IO,就会有文件的读写,那么读写确定要防止差错,那么监测数据是否损坏的常见措施,就是看数据在第一次引入系统的时候计算校验和,而且在数据统统过一个不可靠的通道进行传输时候再次计算校验和,这样就能发现数据是否损坏。而检测校验和是否匹配并不能纠错,因此这也正是不可使用低端硬件的缘由,换句话说,必定要使用ECC内存(由于ECC内存和普通内存的区别是,ECC是一种普遍应用于计算机领域中的指令纠错技术,ECC内存的意思就是将这种技术应用于内存的制造中)。咱们经常采用CRC-32技术进行校检,默认状况下读取512个字节,而因为CRC的校验和是4个字节,因此存储校验和的额外开销低于1%。服务器
hadoop自带一套原子操做用于用于数据IO操做,其中有一些技术比Hadoop自己更经常使用。好比数据的完整性和数据压缩。由于涉及到IO确定要涉及到内存以及数据流量的大小。具体使用哪种压缩方式,还须要根据Hadoop提供的各类压缩方式的优缺点来断定。咱们能够根据hadoop提供的压缩命令来调整使用哪一种压缩策略,譬如:gzip -1 filename gzip表明的是压缩方式,而-1为优化压缩速度,-9表明了优化压缩空间。这两个选项是矛盾的。网络
因此咱们不只仅要根据现实状况实现不一样种类的数据压缩,还能够根据压缩文件名后缀进行压缩方式的判断,并且在使用mapreduce的时候要考察该压缩方式是否支持切片操做。此外在map和reduce之间也能够进行压缩来进行提速。框架
IO意味着传输,而传输就意味着序列化,而序列化在分布式数据处理领域中常常出现:一个是进程间通讯,另外一个则是永久储存。Hadoop系统中多个节点间的通讯是经过RPC协议进行的,RPC序列化的格式以下:maven
紧凑的格式可以充分利用网络带宽
进程间通讯造成了分布式系统的骨架,因此须要尽可能减小序列化和反序列化性能的开销,这个是最基本的。
为了知足新的需求,协议不断变化,因此在控制客户端和服务器端的过程当中,须要直接引进相应的协议。例如可以在方法调用的过程当中增添新的参数,而且新的服务器须要可以接受来自老客户端的老格式消息。
对于某些系统来讲,但愿能支持以不一样语言写的客户端与服务器交互,因此须要设计一种特定的格式来知足这种需求。
为了支持序列化,hadoop本身采用的是writable类型的,它的特色是紧凑,速度快,可是不易于扩展。为了克服这个缺点,Apache开发了序列化框架Avro。咱们想一下,须要本身开发序列化框架的缘由是啥,仍是由于咱们的字符编码方式有着千差万别,而序列化讲究的是无障碍的快速传输,因此要达到这一点,必需要实现本身的统一编码方式,换句话说就是通用的序列化框架。那么咱们可能会有疑问,为何咱们不用java自带的java object serialization?由于高效,高性能的进程间通讯是hadoop的关键,咱们须要精确的控制链接,延迟和缓冲的处理方式,因此RMI无能为力。总而言之,
因而乎,Avro就成为了本章节详细介绍的重点。那么什么是Avro,如何去理解Avro,我会专门开一篇博文介绍一下。
首先介绍了MP的编写流程及注意事项,我以为不只仅是MP,并且是针对全部的大数据计算程序的必须遵循的步骤,因此这里仍是要啰嗦一下如何确保程序的正确性:
MP的编程遵循必定的特殊流程,首先编写map函数和reduce函数,最好使用单元测试来确保函数的运行是否符合预期。若是小数据集测试合格,那么再放到大数据集合上测试。当程序在数据集上运行的时候,可能会出现不少问题,那么再进行测试修复。当程序逻辑性真确无误后,那么再进行优化调试。
首先,用于配置的API都是经过XML配置文件运行的,此外全部的依赖也是经过maven来管理的,因此这个跟web开发的套路差很少。同时为了简化以命令行的方式运行做业,Hadoop也提供了辅助类,相似GenericOptionsParser,Tool和ToolRunner。此外用MRUnit可很方便的编写测试类。在全部程序都写好了之后,能够在本地运行和集群上运行。在本地上运行没有什么能够说的,那么在集群上运行,分为如下几个步骤:
1. 打包做业 2.启动做业 3.获取结果 4.做业调试 5.做业调优
以上就是Hadoop的运行流程,那么在实际过程当中,咱们如何将复杂的问题转换成MapReduce的工做流。本书的这个章节也作了一个具体的例子分析,这里就再也不赘述。
这个章节详细介绍了1.X版本的hadoop和2.X的不一样,主要就是在YARN上面。基本的流程很少扯,在我以前的几篇博文里面都有提到,简而言之就是:
1.做业的提交 2.做业的初始化 3.任务的分配 4.任务的执行 5.进度和状态的更新 6.做业的完成
而YARN的诞生主要是解决了节点数超过4000之后MP系统扩展性的瓶颈,该章节也详细介绍了yarn在设计理念基础,以及每一个方面与经典mapreduce的不一样。另外还讲述了map到reduce之间的shuffle和排序的细节。
maperduce数据处理模型很简单:map和reduce函数的输入和输出是键值对,第七章主要介绍各类类型的数据如何在MapReduce中使用。
这个章节继续探讨了MapReduce的一些高级特性
计数器(各类各样的计数器类型) 排序 链接 边数据 MP库类等等。
以前的几个章节咱们已经了解了如何在单机上配置hadoop,本章节讲述了如何在计算机集群上构建hadoop系统。
在当集群创建好了以后,就是如何管理该集群了。
Pig为大型数据集的处理提供了更高层次的抽象
这个这里很少作赘述,我在博客:不跟你谈情怀,只跟你聊聊Hive中也有所介绍。
HBase是一个在HDFS上开发的面向列的分布式数据库。