文章链接
本节的主要介绍 Apache Hadoop 生态系统组件,我们将学习包括 HDFS 及 HDFS 的组件、MapReduce、YARN、Hive、Apache Pig、Apache HBase 。以及 HBase 组件、HCatalog、Avro,Thrift、Drill、Apache mahout、Sqoop、Apache Flume、Ambari,Zookeeper 以及 Apache OOzie等。

HDFS
HDFS(Hadoop distributed file system ,分布式文件系统)是 Hadoop 生态圈中最重要的组件。它是 Hadoop 最基本的存储系统。Hadoop 分布式文件系统基于Java的文件系统,它为大数据提供了可缩放,容错,可靠,高性价比的数据存储。HDFS 是运行在普通硬件上的分布式文件系统。HDFS已经为很多安装模式做好了默认的配置,从而对大型集群节约了配置时间。Hadoop 可以使用类似与Shell 命令这样的方式和 HDFS 直接交互。
Hadoop HDFS有两个重要的组件,它们是 NameNode 和 DataNode:
NameNode
它也称为 Master 节点。NameNode 并不存储实际数据或者数据集。NameNode 存储元数据,比如数据块的数量,位置,在哪个机架,数据存储在哪个 Datanode 等等。它由文件和目录构成。
HDFS NameNode 的任务:
- 管理文件系统命名空间
- 控制客户端到文件的访问
- 执行文件系统任务,包括命名,关闭,打开文件和目录
DataNode
DataNode 也称为 Slave 节点。HDFS DataNode 负责为 HDFS 存储实际数据。对于每个客户端请求,DataNode 执行读写操作。DataNode 复制的数据块在文件系统中包含两个文件。第一个文件是数据,而第二个文件记录块的元数据。HDFS 元数据包含了数据的校验和(checksum)。在启动时,每个 DataNode 都会连接到它对应的 NameNode 并进行握手。在握手期间将校验命名空间 ID 和DataNode 软件版本。如果发现不匹配 DataNode 将自动失败。
HDFS DataNode 的任务:
- DataNode 执行类似数据块的创建,删除以及根据 NameNode 指导进行复制
- DataNode 管理数据存储
这些就是Hadoop生态系统中所有关于 HDFS 的组件
MapReduce
Hadoop MapReduce 是 Hadoop 生态系统的核心组件,提供了数据处理的能力。MapReduce 是软件框架,它便于你编写应用程序来处理存储在 Hadoop 分布式文件系统中大量结构化及非结构化的数据。
MapReduce 程序天生就是并行的,因此,非常适合在集群的多台机器上上执行大规模的数据分析。它提升了集群平行处理的速度和可靠性。

MapReduce 工作过程
MapReduce 的工作分成两个阶段:
- Map 阶段
- Reduce 阶段
每个阶段都将键值对作为输入和输出。另外,程序员也可以干预两个函数:Map 函数和 Reduce 函数。
Map 函数接收数据集,并且将其转换为另外一个数据集,在 Map 函数中会将这些元素拆分成元组(键值对)。
Reduce 函数从 Map 的输出中接收数据作为输入,然后基于这些 key 和修改过的值组合这些元组。
MapReduce 特点
- 简单-MapReduce任务非常容易运行。应用程序可以使用任何语言进行编写,比如Java,C++以及python
- 可缩放-MapReduce可以处理PB级的数据集
- 高速-对于需要几天处理完成的问题,MapReduce只需要几小时甚至及分钟
- 容错-MapReduce考虑到错误处理。如果一份数据拷贝是无效的,另外一个拥有同样键值对拷贝的机器会用于解决同样的子任务
YARN
YARN(Yet Another Resource Negotiator)是 Hadoop 中提供资源管理的生态圈组件。Yarn 也是 Hadoop 生态圈中最重要的组件之一。YARN 可以称得上是Hadoop 的操作系统,它负责管理和监控工作负载。它允许多个数据处理引擎(比如实时流式处理引擎,批量处理引擎)处理存储在一个平台上的数据。

YARN 是 Hadoop2.x 的数据操作系统。YARN 的主要特性如下:
- 灵活:支持除 MapReduce(批处理)之外的其他专用数据处理模型,例如交互式和流式传输。由于 YARN 的这一特性,其他应用程序也可以与 Hadoop2.x 中的 MapReduce 程序一起运行。
- 高效:由于很多应用程序都可以运行在相同的集群上,因此,Hadoop 效率增长的同时不会对服务质量造成影响。
- 共享:跨多个工作负载提供稳定,可靠,基础安全和共享操作服务。通过附加额外的编程模型,使图处理,迭代模型现在也可以用于数据处理。
Hive
Hadoop 生态圈组件,Apache Hive 是一个开源数据仓库系统,用于查询和分析存储在 Hadoop 上的大数据集。Hive 有3个主要的功能:数据汇总,查询和分析。
Hive 使用的语言叫 HiveQL(HQL),它和 SQL 类似。HiveQL 将类 SQL 查询翻译成 MapReduce Job,从而在 Hadoop 上执行。
Hive 主要部分:
- Metastore:元数据存储
- 驱动(Driver):管理 HiveQL 语句生命周期
- 查询编译器:将 HiveQL 编译成有向无环图(Directed Acyclic Graph,DAG)
- Hive服务器:提供 thrift 接口和 JDBC / ODBC 服务器
Pig
Apache Pig 是一个高级语言平台,用于分析和查询存储在 HDFS 中的大型数据集。作为一个Hadoop 生态圈组件 Pig,它使用 PigLatin 语言。它和 SQL 非常类似。它加载数据,应用所需的过滤器,并将数据转储成所需要的格式。当然要执行程序,Pig 需要 Java 运行环境。
Apache Pig 特性:
- 可扩展:为了执行特殊的处理,用户可以建立自己的功能。
- 效率优化:Pig 系统自动优化执行过程,这样用户仅需要关注语义而不必关注效率
- 处理各类数据-:Pig 既可以分析结构化数据又可以分析非结构化数据
HBase
Apache HBase 是 Hadoop 中的分布式数据库,其设计目的在于在表中存储结构化数据,而这个表可能会有数十亿行几百万列。HBase 是建立在 HDFS 之上的可缩放、分布式的 NoSQL 数据库。HBase提供了实时访问,在 HDFS 上读取或者写入数据。

Hbase 组件
HBase 有两个叫做 HBase Master 和 RegionServer 的组件。
- HBase Master
它并不负责数据存储,而是负责在所有 RegionServer 间做负载均衡
- 维护和监控 Hadoop 集群
- 执行管理(提供接口创建,更新和删除表)
- 控制故障转移
- HMaster 处理 DDL 操作
- RegionServer
它是为客户端请求处理读、写、更新和删除的工作节点。RegionServer 进程运行在每个Hadoop 集群节点。RegionServer 运行在 HDFS 的 DataNode 节点上。
HCatalog
它是 Hadoop 的表和数据存储层。Hadoop 生态圈中的各种组件包括像 MapReduce、Hive、Pig可以利用 HCatalog 非常容易地从集群中读写数据。HCatalog 也是 Hive 的关键组件,用户可以通过它以任何格式和结构存储它们的数据。默认情况下,HCatalog 支持 RCFile、CSV、JSON、SequenceFile以及 ORC 文件格式。
HCatalog的好处
- 启用数据可用性通知
- 通过表的抽象,HCatalog使用户从数据存储的开销中解放出来。
- 为数据清理归档提供可见性
Avro
Avro 在 Hadoop 生态圈当中是最流行的数据序列化系统。Avro 是以开源项目,提供了数据序列化和数据交互服务。这个服务也可以独立使用。使用 Avro 的大数据交互程序可以使用不同语言进行编写。
使用序列化服务的程序可以将数据序列化为文件或者消息。它将数据的定义和数据一起存储在消息或文件中,这样可以使程序能够动态地理解存储在 Avro 文件或者消息中的信息。
- Avro Schema
Avro 依靠 schema 进行序列化和反序列化。Avro 需要 schema 进行数据读写。当 Avro 数据存储在文件中时,它对应的 schema 也一起存储,因此该文件可以被任何程序处理。
- 动态类型
指的是不需要生成代码就可以序列化和反序列化。为了能够进行优化,Avro 也为静态语言提供了代码生成能力。
- Avro的特性:
- 丰富的数据结构
- 远程过程调用
- 压缩,快速,二进制数据格式
- 容器文件存储持久化数据
Thrift
Thrift [θrɪft] 是可扩展的跨语言进行服务开发的软件框架。Thrift 是RPC(Remote Procedure Call,远程过程调用)通讯的接口定义语言。出于性能或者其他原因的考虑,Hadoop 在大量 RPC 调用时会考虑使用 Apache Thrift组件。
Apache Drill
Drill [drɪl] 组件的主要目的是大规模处理结构化和半结构化数据。它是一个低延迟分布式查询引擎,它可以扩展到上千个节点并且查询 PB 级的数据。Drill 是第一个不使用 schema 模型的分布式 SQL查询引擎。
- Apache Drill 的应用
Drill 是 Cardlytics 公司(Cardlytics,Inc 创立于 2008 年,总部位于美国佐治亚州亚特兰大,是一家在美国和英国运营消费数据智能平台的公司)最有价值的工具,该公司为移动公司及互联网银行提供消费者购买数据。Cardlytics 使用 Drill 快速查询并处理万亿级别的记录。
- Apache Drill 特性
Drill 拥有特殊的内存管理系统去进行垃圾回收和优化内存。Drill 和 Hive 兼容性很好,开发人员可以重用现有的 Hive 部署。
- 扩展性:Drill 在所有层包括查询层,查询优化以及客户端API都提供了可扩展的结构。我们可以因特殊目的扩展任何一层。
- 灵活:Dirll 提供了分层的列式数据模型,它可以表示复杂,高度动态的数据,并且允许高效处理。
- 动态 schema 发现:Drill 在开始执行数据查询过程时,不需要为数据指定 schema或者规范数据类型。Drill 以数据单元(也称为批量记录)的形式启动数据处理过程,并且在处理过程中动态发现 schema。
- 去中心化的元数据:和其他 Hadoop SQL 技术不同,Drill 不需要中心化的元数据。Drill 在查询数据时,不需要在元数据中建立和管理表。
Apache Mahout
Mahout [məˈhaʊt] 是一个开源框架,用于建立可扩展的机器学习算法和数据挖掘。一旦数据存储在 Hadoop HDFS 中,mahout 提供的数据科学工具能够从这些大数据集中发现有用的模式。
Mahout 算法包括:
- 聚类(Clustering):把项目进行分类,进行自然分组,使彼此相似的项目位于同一个组。
- 协同过滤(Collaborative filtering):挖掘用户行为从而产生产品推荐(比如亚马逊的推荐功能)。
- 分类(Classifications):从现有分类中学习,将未分类的项目划分到最佳分类。
- 频繁模式挖掘(Frequent pattern mining):它分析在一个组中的项目(比如出现在购物车中的项目或者查询会话中的项目),然后标识出哪些项目通常会出现在一起。
Apache Sqoop
Sqoop 从外部将数据导入到 Hadoop 生态系统,比如 HDFS、HBase 或者Hive。它也可以将数据从 Hadoop 中导出到外部。Sqoop 可以和关系数据库协作,比如 Teradata、Netezza、Oracle、MySQL。

Apache Sqoop特性:
- 从大型机导入连续的数据集:Sqoop 满足了人们对从大型机向 HDFS 导入数据的需求。
- 直接导入 ORC 文件:改进了压缩以及轻量级索引,并且提高了查询性能
- 并行数据传输:具备更高的性能,并且优化了系统利用率。
- 高效的数据分析:通过在数据读取池中将结构化和非结构化数据组织成 schema,从而提高数据分析效率。
- 加速数据拷贝:使从外部系统拷贝到 Hadoop 时,拷贝速度更快。
Apache Flume
Flume 能够将大量的数据从它的原始位置进行收集、聚合甚至移动最后送到HDFS 中。它具有容错和可靠的机制。它让数据流从源头流入 Hadoop 环境。它使用简单可扩展的数据模型支持应用程序做在线分析。使用 Flume,我们可以将来自多个服务器的数据立刻导入到 Hadoop 中。
Ambari
Ambari 是一个管理平台,用于配置、管理、监控 Hadoop 集群,并为其提供安全保障。通过使用Ambari 这样一致化,安全的操作控制平台,Hadoop 管理将更加轻松。

Ambari的特性:
- 简化了安装、配置和管理过程:Ambari 以可扩展的方式,轻松高效地建立和管理集群。
- 集中的安全设置:对于跨整个平台管理和配置集群安全性来说,Ambari 大大削减了这种复杂度。
- 高扩展和可定制:Ambari 高度可扩展,而且能够管理定制的服务
- 集群健康全面可视化:Ambari 确保集群是监控的,而且可以通过各种方法进行全方位监控。
Zookeeper
Apache Zookeeper 是一个集中服务,为 Hadoop 生态圈提供维护配置信息、命名服务、提供分布式同步以及分组服务。Zookeeper 管理和协调大型集群中的机器。

Zookeeper特性:
- 快速:Zookeeper 读数据比写数据更快速,其比例为10 : 1。
- 有序:Zookeeper 维护一个所有事务的记录。
Oozie
它是针对 Hadoop 任务的工作流调度系统。Oozie 将多个顺序任务组合从一个工作逻辑单元。Oozie 框架完全可以和 Hadoop 集成在一起,YARN 是架构中心,并且支持 MapReduce、Pig、Hive以及 Sqoop 等 Hadoop 任务。
在 Oozie 中,用户可以建立工作流的有向无环图(DAG,Directed Acyclic Graph),它可以在Hadoop 中并行和按顺序运行。Oozie 是可扩展的,而且能够及时管理 Hadoop 集群中数以千计的工作流的执行。Oozie 也非常灵活。可以非常轻松地开始、停止、挂起和返回任务。它甚至可以跳过特定的故障节点或者直接返回。
Oozie 任务有两种基本类型:
- Oozie 工作流:存储和运行由 Hadoop 任务(比如 MapReduce、Pig、Hive)构成的工作流。
- Oozie 协调器(Oozie Coordinator):它基于预定义调度信息和数据可用性运行工作流任务。
以上就是几乎所有的Hadoop生态圈组件的介绍。