Hadoop是一个由Apache基金会开发的分布式系统基础架构。开发人员可以在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的威力进行高速并行运算以及海量数据的分布式存储。Hadoop大数据技术架构如图1所示。
图1 Hadoop大数据技术架构
然而,Hadoop不是一个孤立的技术,而是一套完整的生态圈,如图2所示。在这个生态圈中,Hadoop最核心的组件就是分布式文件系统HDFS和分布式计算框架MapReduce。HDFS为海量的数据提供了存储,是整个大数据平台的基础,而MapReduce则为海量的数据提供了计算能力。在它们之上有各种大数据技术框架,包括数据仓库Hive、流式计算Storm、数据挖掘工具Mahout和分布式数据库HBase。此外,ZooKeeper为Hadoop集群提供了高可靠运行的框架,保证Hadoop集群在部分节点宕机的情况下依然可靠运行。Sqoop与Flume分别是结构化与非结构化数据采集工具,通过它们可以将海量数据抽取到Hadoop平台上,进行后续的大数据分析。
图2 Hadoop大数据生态圈
Cloudera与Hortonworks是大数据的集成工具,它们将大数据技术的各种组件集成在一起,简化安装、部署等工作,并提供统一的配置、管理、监控等功能。Oozie是一个业务编排工具,我们将复杂的大数据处理过程解耦成一个个小脚本,然后用Oozie组织在一起进行业务编排,定期执行与调度。
01分布式文件系统
过去,我们用诸如DOS、Windows、Linux、UNIX等许多系统来在计算机上存储并管理各种文件。与它们不同的是,分布式文件系统是将文件散列地存储在多个服务器上,从而可以并行处理海量数据。
Hadoop的分布式文件系统HDFS如图3所示,它首先将服务器集群分为名称节点(NameNode)与数据节点(DataNode)。名称节点是控制节点,当需要存储数据时,名称节点将很大的数据文件拆分成一个个大小为128MB的小文件,然后散列存储在其下的很多数据节点中。当Hadoop需要处理这个数据文件时,实际上就是将其分布到各个数据节点上进行并行处理,使性能得到大幅提升。
图3 分布式文件系统HDFS
同时,每个小文件在存储时,还会进行多节点复制(默认是3节点复制),一方面可以并行读取数据,另一方面可以保障数据的安全,即任何一个节点失效,数据都不会丢失。当一个节点宕机时,如果该节点的数据不足3份,就会立即发起数据复制,始终保持3节点的复制。正因为具有这样高可靠的文件存储,Hadoop的部署不需要备份,也不需要磁盘镜像,在Hadoop集群的各个节点中挂载大容量的磁盘并配置Raid0就可以了。
02分布式计算框架
Hadoop的另一个关键组件是分布式计算框架MapReduce,它将海量数据的处理分布到许多数据节点中并行进行,从而提高系统的运行效率。
MapReduce计算词频的处理过程如图4所示。在这个过程中,首先输入要处理的数据文件,经过Splitting将其拆分到各个节点中,并在这些节点的本地执行Mapping,将其制作成一个Map。不同的任务可以设计不同的Map。譬如,现在的任务是计算词频,因此该Map的key是不同的词,value是1。这样,在后续的处理过程中,将相同词的1加在一起就是该词的词频了。
图4 分布式计算框架MapReduce
Mapping操作执行完以后,就开始Shuffling操作。它是整个执行过程中效率最差的部分,需要在各个节点间交换数据,将同一个词的数据放到同一个节点上。如何有效地降低交换的数据量成为优化性能的关键。接着,在每个节点的本地执行Reducing操作,将同一个词的这些1加在一起,就得到了词频。最后,将分布在各个节点的结果集中到一起,就可以输出了。
整个计算有6个处理过程,那么为什么它的名字叫MapReduce呢?因为其他处理过程都被框架封装了,开发人员只需要编写Map和Reduce过程就能完成各种各样的数据处理。这样,技术门槛降低了,大数据技术得以流行起来。
03优缺点
与传统的数据库相比,MapReduce分布式计算虽然有无与伦比的性能优势,但并不适用于所有场景。MapReduce没有索引,它的每次计算都是“暴力全扫描”,即将整个文件的所有数据都扫描一遍。如果要分析的结果涉及该文件80%以上的数据,与关系型数据库相比,能获得非常优异的性能。如果只是为了查找该文件中的某几十条记录,那么它既耗费资源,性能也没有关系型数据库好。因此,MapReduce的分布式计算更适合在后台对批量数据进行离线计算,即一次性对海量数据进行分析、整理与运算。它并不适用于在前台面向终端用户的在线业务、事务处理与随机查询。
同时,MapReduce更适合对大数据文件的处理,而不适合对海量小文件的处理。因此,当要处理海量的用户文档、图片、数据文件时,应当将其整合成一个大文件(序列文件),然后交给MapReduce处理。唯有这样才能充分发挥MapReduce的性能。
本文摘编自《架构真意:企业级应用架构设计方法论与实践》,经出版方授权发布。