Hadoop是最著名使用最广泛的分布式大数据处理框架,它是用Java开发的。
这本书有一个明确的目标:只要有一台能上网的计算机,就可以让读者在最短的时间内,学会Hadoop的初级开发。所以,这本书只讲干货,也就是必须要知道的Hadoop的最核心知识点,包括如何搭建Hadoop,如何写代码,如何查API。对于更多细节问题,书后会列一个书目给大家参考,这些书已经讲得很好了,不需要在这里饶舌浪费时间。
这本书对读者的预要求很少:懂一点点Linux,懂一点点Java编程。“懂一点点Linux”是指,假如有一台装了Linux操作系统的计算机,能做到开机,输入密码,进入图形界面,打开命令终端,就可以了。“懂一点点Java编程”是指,在Linux上,用记事本写一个Java的HelloWorld程序,然后把它编译出来,执行一下,就可以了。这个预要求非常低,接近于零,所以这本书叫“从零开始学习Hadoop”。Hadoop是用Java开发的,它通过Streaming方式支持其他语言,诸如Python,C++,Ruby,但如果想真正理解Hadoop,必须从Java开始,用其他语言以Streaming方式学Hadoop是一条不归路,这是笔者用一个月时间得来的教训。
“只要有一台能上网的计算机”,Hadoop的伪分布式运行模式,可以在一台电脑上运行Hadoop的全部功能。在伪分布式下编写和运行的代码,不作任何修改便能运行在Hadoop集群上,这是学习Hadoop的最方便的优点之一。
“最短的时间”,这是一个有点长的话题。学习一项技能,有很多种途径。最快的途径找个高手教,高手会说看哪些书,从哪里做一下,哪些地方注意不要犯错,哪些地方是不需要的不要在上面浪费时间,哪些地方很关键要多做做将来会很有用。只要没有出现诸如高手数量不多,或者高手很忙,或者高手是同事但职位只比你高一点点—教会你对他其实没什么好处的这些情况之外,这个途径是最好的。
另外一个途径是报一些培训班学习,费用相对高一些。
性价比最高的途径是自学,如果自学能力比较强,从网上找相关的电子书教学视频官方教程学习,笔者个人比较推崇这种方式,这种方式可以很好地锻炼学习能力。能力是一得永得的,将来学习其他技能可以举一反三,缺点是比较耗时,自学的过程其实很大程度上是试错的过程。如果技术比较复杂,而且工作中很快要用到,或者下个星期就要面试笔试,那肯定是妥妥地来不及的。
如何在最短的时间内解决Hadoop入门问题呢?理性的方式,是从流程和细节上解决。1898年,科学管理之父泰勒做了一个铁块搬运实验。当时,工人们每天平均搬运12~13吨铁块。泰勒的实验方式是对搬运过程计时,分析不同搬运方式的影响,分析休息时间和劳动时间的搭配,最终可以让工人在不太累的情况下,每天搬运47吨铁块,效率提高到近4倍。
事实上,可以用同样的方式解决学习问题。比如说,请一个对Hadoop一无所知的小白同学自学Hadoop,然后要求他记下每天学了哪些内容,遇到什么问题,是怎么解决的,分别花了多少时间,有哪些是必须的,有哪些后来验证是弯路,哪些可以省略。待到他学完了,根据这个学习记录整理出一条快捷之路,避开没用的地方,简化过于复杂的地方,调整到合理的次序,于是就得到一个“最短的时间”学习方案。这本书就是这么产生的,而且是真简化。
“做一遍”是最佳的快速学习方式。比如说,学习C语言编程,如果学习方式是看书,读一遍乃至读十遍,不写代码,不会在大脑留下任何痕迹。如果将书中的例题代码原样输入编译执行,理解会好很多。如果不但调通了例题,而且将书里的大部分习题独立做出来,会觉得自己对C语言很熟悉。如果写了一个有质量的五千到一万行的项目,就觉得自己真的可以用C语言做工作。所以说,做一遍是最好的学习方式。
笔者见过一些高效的人是以反其道而行之的方式学习的。当他们需要用到一种新技术的时候,就找一本相关的书,看一下目录,再看一下每章的简介,大略看看范例。然后,根据范例立刻写代码,需要什么功能,就到书里和API里找,如果遇到Bug,在Google上检索一下。这种方式会很快做完功能,同时也就学会这个技术。如果从头开始看书,一点一点做例题做习题,对他们来说太慢了,时间成本太高,很不划算。