我是在2008 年秋天参加VeriSign 的互联网抓取和分析项目的时候开始接触Hadoop 的,我的团队与Doug Cutting 以及Nutch 项目的人就如何有效地存储和管理TB 级的抓取数据和分析数据得出相似的结论。当时我们已经建立了自己的分布式系统,但是这个系统无法系统地将抓取的数据与新添加的数据合并。
在研究了Hadoop 项目后,我们发现它很适合我们的需求——它支持大数据存储,并提供数据合并机制。在几个月的时间内,我们创建并开发了包含多个MapReduce 作业的MapReduce 应用,并将这个应用与我们自己的MapReduce 工作流管理系统部署在一个拥有18 个节点的小集群上。通过这个小集群可以观察我们的MapReduce 作业是如何在几分钟内处理完数据的。当然,我们没想到的是,在调试和优化MapReduce 作业上会花费这么多时间;更没想到的是,我们担负起生产管理员这一新职责时,在支持生产的头几个月内我们遇到大量的磁盘故障问题。
随着对Hadoop 熟悉程度的提高,我们运用Hadoop 继续建立了更多的功能以帮助处理大规模数据集。我们还开始在公司内部宣传Hadoop 的优点,并发动其他面临处理大数据的项目使用Hadoop。
在运用Hadoop(尤其是在处理MapReduce 时)的过程中我们遇到的最大挑战是重新学习如何使用它解决问题。MapReduce 有自己并行处理进程的方法,这种处理方式与我们通常使用的JVM 程序完全不同。最大的障碍就是训练我们的大脑去熟悉MapReduce 的处理方法,Chuck Lam 在2010 年编写出版的Hadoop in Action 一书详细讲解了MapReduce 的相关信息。
当你习惯了使用MapReduce 后,接下来就需要学习如何使用Hadoop,如何将数据导入和导出HDFS,如何在Hadoop 中高效处理数据。Hadoop 的这些方面还没有引起很广泛的关注,这也是我要撰写本书的潜在原因——主要介绍Hadoop 的一些高级应用,并涉及Hadoop 的一些难点问题。
我相信目前已经有很多读者有Hadoop 的相关应用经验,我写本书的目的只是为了将我的个人经验转化为书本知识。我对本书中的实例进行了验证,这并不是一个愉快的过程,但是编写本书的过程中所运用到的新方法和工具使我对Hadoop 有了进一步的了解,希望读者通过本书可以获取Hadoop 的更多知识。