1、序言
这篇文章从十一前开始写,陆陆续续看源码并理解其中的原理。主要了解了Map/Reduce的运行流程,并仔细分析了Map流程以及一些细节,但是没有分析仔细Reduce Task,因为和一个朋友@lidonghua1990一起分析的,他分析ReduceTask,这篇文章的Reduce的注释部分也是由他添加。等到他分析完Reduce之后,再将链接填上。
这篇文章从十一前开始写,陆陆续续看源码并理解其中的原理。主要了解了Map/Reduce的运行流程,并仔细分析了Map流程以及一些细节,但是没有分析仔细Reduce Task,因为和一个朋友@lidonghua1990一起分析的,他分析ReduceTask,这篇文章的Reduce的注释部分也是由他添加。等到他分析完Reduce之后,再将链接填上。
上文主要是数据压缩的角度来分析了MapReduce压缩临时数据的优化,参见:MapReduce优化(一)。而这篇会更多的从代码层面说MR任务优化。
MapReduce大多数任务都是做日志分析,而一般的日志分析也就是高级点的WordCount程序:读入一段文本 -> 获取需要的信息 -> 统计输出。
最近在做一个任务,合并大小文本文件,每个不到5M,合并之后再进行统计分析。但是统计分析结果不对,本来只有60w个文件,但是最后的结果竟然到了200w了,断断续续debug了几天,从合并、map过程、combine过程、reduce过程,都一一过了一遍。最后发现在map过程中的数据就有重复,而且重复的形式很奇怪。
虽然yahoo!关于YARN作为下一代(Next-gen)MapReduce框架的文章(点这里)去年就看过了,但是那个看到是“下一代”,竟然以为只是一个设想,没想到早就发布了版本,导致对于Hadoop的认识还停留在0.20×版本上,真是罪过罪过。由于最近比较忙,闲暇时间扫了扫国内外博客,发现0.23、1.×,以及最近发布的2.×,hadoop的变化非常之大。比如说HDFS Federation(联邦)支持多NameNode并存,也有HA的BackupNode,想多了解的可以看这里以及官方文档。最大的莫过于计算框架了,MapReduce进入了2.0时代,MR2.0或者叫YARN(其实YARN和MapReduce没什么关系了),这篇博客就简要的说说Apache Hadoop MapReduce的前世今生吧。主要是翻译了这篇博客:地址,也加上了自己的一些见解,后续再继续添加对YARN的认识。
今天是图灵的诞辰100周年,Google又推出了有意思的doodle。今天的doodle主要是围绕着图灵机来的,需要完成多个图灵机规则表的选择,共有6关,每完成一关Google就亮一个字母,直到所有字母都亮起来为止。我就直接贴结果了,想知道原理的可以Google一下“图灵 doodle”或者“图灵机”。游戏截图参见文尾。
Hadoop Pipes可供C++开发者开发MapReduce任务。文献与书籍上也写了,C++与Java是通过Socket通信,但是具体的运行机制是什么还是得参考源码。
这篇博文主要从源码角度来讲解Hadoop Pipes运行机制以及设计原理,实际的Hadoop Pipes编程请参见:Hadoop Pipes编程
Hadoop Pipes是Hadoop MapReduce的C++接口代称。不同于使用标准输入和输出来实现的map代码和reduce代码之间的Streaming编程,Pipes使用Socket作为TaskTracker与C++进程之间数据传输的通道,数据传输为字节流。