这的确是一本对 Hadoop 的 MapReduce 内部运行原理讲解的很透彻的书。但是非常可惜,这本书是以 Hadoop 0.20 版本来讲解的,与现在的 Hadoop 主流版本严重脱节。但即使如此,书中大多数内容也仍旧具有参考意义,毕竟很多模块虽然随着版本的更迭差异很大,但核心思想却是不会变的。
这本书,将整个 MapReduce 解剖了个遍,从它的设计理念与架构讲到编程应用,再逐渐深入到节点间的 RPC 通信原理于作业的执行过程。书的后半部分则详细讲解了 MapReduce 管理作业的实现原理以及运行过程。最后还提到了 Hadoop 的集群调优与调度器及安全机制。要是能通本吃透,必然会对整个 MapReduce 了若指掌,但很可惜,我距离吃透还差的很远。
MapReduce 的设计理念就是将远远超出任何一台计算机的处理能力的超大数据量的分析需求分散到若干台计算机上处理,以堆数量的方式来解决单台计算机解决不了的问题。MapReduce 适合用来解决那些可以将问题拆分成若干个子问题,并且这些子问题之间彼此没有耦合关系,可以完全独立地解决任一子问题,进而达到间接解决总问题的目的的问题。MapReduce 的基本架构可以分为Client、JobTracker、TaskTracker 和 Task。这些内容都是很旧的版本上的架构了,不太值得去研究学习了,就不讲了。
而 MapReduce 的编程模型当中,开放给开发者编写的主要有以下几个模块
- InputFormat
- Partitioner
- mapper
- reducer
- OutputFormat
上面 5 个组件涵盖了一个 MapReduce 作业从输入到输出一条龙的定制服务。通过自定义上述几个组件,基本上就能解决任何大数据领域的问题了。
由于 MapReduce 玩的是分布式计算模式,所以跨计算机通信是它的重要依赖环节。MapReduce 采用的是定制版的 RPC 通信机制。MapReduce 的 RPC 采用的是 Java 的 NIO 来作为其网络通信的保障。MapReduce 的 RPC 的基本架构其实与传统的 RPC 架构差异也并不是那么大,都是采用 C/S 架构模式,由三种组件组成:1、通信模块;2、Stub 程序;3、调度程序。RPC 的开发也没什么难的,基本照着模型来一次就能学会了。有兴趣的可以参考这篇博文:https://www.cnblogs.com/chorm590/p/10979833.html
MapReduce 作业的执行过程还算是挺复杂的。但其实它复杂也就复杂在作业的初始化与任务拆解那块。将作业按照集群性能与空闲状态拆分成若干个,并分发下去,再定时监控,这部分都属于管理层的任务,是要麻烦点。子任务的运行过程还相对简单一些,埋头干就是了。其实这也可以引申到我们工作中来,别看管理层平时不干什么具体的活,但其实他们的事情还真不比那些干活的人要少。
再后面部分就是 0.20 版本的 MapReduce 的作业管理模块的内容了,详细讲了 JobTrakcer、TaskTracker 的源码实现以及作业的管理过程实现,很详尽,但于现在没太大价值。就算了。
而关于性能调优、作业调度器与安全机制什么的,于普通开发人员来讲有点遥远,也算了。
如此一来,这本书也就这么算了。。
网友评论