Hadoop 是一个能够对大量数据进行分布式处理的软件框架,目前Hadoop 已经发展成为包含很多项目的集合。Hadoop 的核心是HDFS 和MapReduce,Hadoop 2.0 还包括YARN。随着Hadoop 的兴起,其框架下的开发工具也逐渐丰富,图1.1 所示为Hadoop 的生态系统。下面对其每一个模块进行详细的介绍。
图1.1 Hadoop 的生态系统
(1)HDFS
Hadoop 分布式文件系统(HDFS)是一种可以在低成本计算机硬件上运行的高容错性分布式文件系统。HDFS 提供对应用程序数据的高吞吐量访问,并且适用于具有大数据集的应用程序。它与现有的分布式文件系统有许多相似之处,但也存在一些很明显的区别,这就是:HDFS 放宽了一些可一直操作系统接口(POSIX)的要求,以实现对文件系统数据的流式访问。HDFS 最初是作为Apache Nutch Web 搜索引擎项目的基础结构而构建,目前HDFS 已经成为Apache Hadoop 核心项目的一部分。
HDFS 的设计目标包含如下几个方面:
1)硬件故障
一个HDFS 实例包含数百或数千个服务器计算机,每一个服务器计算机都存储文件系统数据的一部分。实际情况下集群中组件的故障很难被察觉和修复,这使得HDFS 的某些组件始终无法运行。因此,检测故障并快速、自动地从故障中恢复是HDFS 的核心目标。
2)流数据访问
在HDFS 上运行的应用程序需要对其数据集进行流式访问。HDFS 设计初衷是用于批处理,而不是用于用户交互,所有其重点在于数据访问的高吞吐量,而不是数据访问低延迟性。
3)大数据集
在HDFS 上运行着具有大量数据集的应用程序。HDFS 支持大文件数据存储,其文件大小普遍为GB 级到TB 级,因此,为保障程序的正常运行,HDFS 应提供较高的聚合数据带宽,并可以扩展到单个群集中的数百个节点。
4)简单一致性模型
HDFS 应用程序简化了数据一致性问题,并实现了高吞吐量数据访问。这是因为HDFS中文件一次写入多次读取访问,一旦创建、写入和关闭文件,除了追加和截断外,无须更改。
5)跨异构硬件和软件平台的可移植性
HDFS 可以轻松地从一个平台移植到另一个平台,这有助于HDFS 作为大量应用程序的平台。
(2)MapReduce
MapReduce 是一款以可靠、容错的方式并行处理大型硬件集群(数千个节点)中大量数据(多TB 数据集)的软件框架。“Map”(映射)和“Reduce”(简化)的概念以及其主要思想都是从函数式编程语言借用来的。这极大方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。其中Map 对数据集上的独立元素进行指定的操作,生成“键-值”对形式中间结果。Reduce 则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce 这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。
MapReduce 框架是由一个单独运行在主节点的JobTracker 和运行在每个集群从节点的TaskTracker 共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前失败的任务;从节点仅负责完成主节点指派的任务。当一个Job 被提交时,JobTracker 接收到提交作业和其配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker 的执行。
HDFS 和MapReduce 共同组成了Hadoop 分布式系统体系结构的核心内容。HDFS 在集群上实现了分布式文件系统,MapReduce 在任务处理过程中提供了对文件操作和存储等的支持,MapReduce 在HDFS 的基础上实现了任务的分发、跟踪、执行等工作,二者相互作用完成Hadoop 分布式集群的主要任务。
(3)YARN
YARN 是在Hadoop 1.0 基础上衍化而来的,它充分吸收了Hadoop 1.0 的优势,并具有比Hadoop 1.0 更为先进的理念和思想,YARN 是Hadoop 2.0 及以上版本的下一代集群资源管理与调度平台,它的基本思想是将资源管理和作业调度、监视的功能拆分为单独的守护程序。(www.xing528.com)
(4)ZooKeeper
ZooKeeper 是一个为分布式应用所设计的开源协调服务。它可以为用户提供同步、配置、管理、分组和命名等服务。用户可以使用ZooKeeper 提供的接口方便地实现一致性、组管理等协议。ZooKeeper 提供了一种易于编程的环境,它的文件系统使用了目录树结构。ZooKeeper是使用Java 编写的,但是它支持Java 和C 两种编程语言接口。
分布式应用程序使用的情况有很多,例如维护配置信息与命名、提供分布式同步、提供组服务等。协调服务会进行很多工作来修复不可避免的错误和竞争条件,例如协调服务很容易出现死锁的状态。即使每个服务部署正确,这些服务的不同实现也会导致管理复杂。因此,ZooKeeper 的设计目的是减轻分布式应用程序所承担的协调任务。
(5)HBase
HBase 是一个分布式的、面向列的开源数据库,它参考了Google 的BigTable 建模进行开源实现,实现的编程语言为Java。HBase 是Apache 软件基金会的Hadoop 项目的一个子项目,运行于HDFS 文件系统之上,为Hadoop 提供类似于BigTable 规模的服务。因此,它可以容错地存储海量稀疏的数据。
HBase 是一个高可靠、高性能、面向列、可伸缩的分布式数据库,主要用来存储非结构化和半结构化的松散数据。HBase 的目标是对大数据进行随机处理与实时读写访问,它利用廉价计算机集群处理由超过10 亿行数据和数百万列元素组成的数据表。
(6)Spark
机器学习算法通常需要对同一个数据集合进行多次迭代计算,而MapReduce 中每次迭代都会涉及HDFS 的读写,以及在计算过程中缺乏一个常驻的MapReduce 作业,因此,每次迭代都要初始化新的MapReduce 任务,这时MapReduce 就显得效率不高了。同时,基于MapReduce 之上的Hive、Pig 等技术也存在类似问题。
Spark 作为一个研究项目,诞生于加州大学伯克利分校AMP(Algorithms,Machines and People Lab)实验室。AMP 实验室的研究人员发现,在机器学习迭代算法场景下,Hadoop MapReduce 表现得效率低下。为了迭代算法和交互式查询两种典型的场景,Matei Zaharia 和合作伙伴开发了Spark 系统的最初版本。Spark 扩展了广泛使用的MapReduce 计算模型,高效地支撑更多计算模式,包括交互式查询和流处理。Spark 的一个主要特点是能够在内存中进行计算,即使依赖磁盘进行复杂的运算,Spark 依然比MapReduce 更加高效。
(7)Hive
最初,Hive 是由Facebook 开发,后来由Apache 软件基金会开发,并将它作为其名下的一个开源项目,名为“Apache Hive”,它是一个数据仓库基础工具在Hadoop 中用来处理结构化数据,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL 查询功能,可以将SQL语句转换为MapReduce 任务进行运行。Hive 的优点是:学习成本低,可以通过类SQL 语句转换为MapReduce 任务进行运行,不必开发专门的MapReduce 应用,十分适合数据仓库的统计分析工作。
Hive 是建立在Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop 中的大规模数据机制。
(8)Pig
Apache Pig 是一个用于分析大型数据集的平台,该平台包含用于表示数据分析程序的高级语言,以及用于评估这些程序的基础结构。Pig 程序的显著特性是:它的结构适用于并行化,从而使其能够处理非常大的数据集。
要编写数据分析程序,Pig 提供了一种称为Pig Latin 的高级语言。该语言提供了各种操作符,程序员可以利用它们开发自己的用于读取、写入和处理数据的功能。
要使用Pig 分析数据,程序员需要使用Pig Latin 语言编写脚本。所有这些脚本都在内部转换为Map 和Reduce 任务。Apache Pig 项目中有一个名为“Pig 引擎”的组件,它接受Pig Latin 脚本作为输入,并将这些脚本转换为MapReduce 作业。Pig Latin 脚本具有以下关键属性:
①脚本易于编程:由多个相互关联的数据转换组成的复杂任务被明确编码为数据流序列,从而使其易于编写、理解和维护。
②优化机制:任务的编码方式允许系统自动优化其执行,从而使用户能够专注于语义而非效率。
③可扩展性:用户可以创建自己的功能来进行特殊处理。
(9)Sqoop
Sqoop 是一个用来将Hadoop 和关系型数据库中的数据进行转移的工具,它可以将一个关系型数据库(如:MySQL、Oracle、Postgress 等)中的数据导入Hadoop 的HDFS 中,也可以将HDFS 的数据导入关系型数据库中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。