1.1.2 雅虎的Hadoop
谷歌的 GFS 论文所描述的计算挑战及解决方案为 Hadoop 文件系统(Hadoop File System,HDFS)和 MR 分布式计算框架提供了雏形。2006 年 4 月,Hadoop 项目被捐献给了中立的非营利组织 Apache 软件基金会(Apache Software Foundation,ASF),并逐渐演变为 Apache Hadoop 框架中的几个模块:Hadoop Common、MapReduce、HDFS,以及 Apache Hadoop YARN。
尽管 Apache Hadoop 已经在雅虎之外获得了广泛使用,不仅启发了开源社区中的众多成员,还孕育出两家商业公司(Cloudera 和 Hortonworks,现在已经合并),但基于 HDFS 的 MR 框架仍然存在不容忽视的缺点。
第一,管理 Hadoop 集群很难,操作也比较烦琐。第二,Hadoop 的通用批处理 MR API 非常啰唆,需要大段的样板代码配置,而且容错性很差。第三,对于需要多组映射和归约的复杂数据作业来说,各组 MapReduce 间的计算结果要写入硬盘供后续阶段的操作使用(见图 1-1)。这种重复的磁盘输入输出行为带来的代价是,大型的 MR 作业可能要执行几小时甚至几天才能结束。
图 1-1:每组映射和归约计算之间的迭代读写
最后,虽然 Hadoop MR 对于大规模的通用批处理作业来说还可以,但结合机器学习、流处理,或者交互式 SQL 查询等其他工作场景的话,难免力不从心。
为了应对这些新的场景,工程师开发了一些定制化的系统,例如 Apache Hive、Apache Storm、Apache Impala、Apache Giraph、Apache Drill、Apache Mahout,等等。这些项目都有自己的 API 和集群配置选项,因而进一步增加了 Hadoop 集群的运维复杂度,也使得 Hadoop 开发的学习曲线更加陡峭。
有没有办法让 Hadoop 和 MR 更简单且速度更快?(记住 Alan Kay1 的名言:“简单的事情简单做,复杂的事情才可做。”)
1Alan Kay 是美国计算机科学家,2003 年图灵奖得主,Smalltalk 语言之父。——译者注