本篇文章将向大家介绍 Hadoop 生态系统的不同组件。也正是因为这些组件,使得 Hadoop 如此强大。通过学习 HDFS 和 HDFS组件、MapReduce、YARN、Hive、Pig、HBase 和 HBase组件、HCatalog、Avro、Thrift、Drill、Mahout、Sqoop、Flume、Ambari、Zookeeper 和 OOzie 等 Hadoop 生态系统组件,深入了解 Hadoop 生态系统。
HDFS 是一个基于 Java 的 Hadoop 分布式文件系统(Hadoop Distributed File System
),是 Hadoop 生态系统中最重要的组成部分。HDFS 是 Hadoop 的主要存储系统,为大数据提供可扩展的、高容错的、可靠的和具有成本效益的数据存储。
HDFS 被设计用来部署在低廉的硬件上,在许多安装中已经被设为默认配置。它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。Hadoop 通过类似 Shell 的命令与 HDFS 直接交互。
HDFS 有两个主要组件:NameNode 和 DataNode。
NameNode 也被称为主节点,但它并不存储实际的数据或数据集。NameNode 存储的是元数据,即文件的权限、某一上传文件包含哪些 Block 块、Bolck 块保存在哪些 DataNode 上等细节信息。它由文件和目录组成。
NameNode 的任务:
(2)DataNode
DataNode 负责将实际数据存储在 HDFS 中,并负责来自文件系统客户的读写请求。在启动时,每个 Datanode 连接到其相应的 Namenode 并进行握手。命名空间 ID 和 DataNode 的软件版本的验证是通过握手进行的。当发现不匹配时,DataNode 会自动关闭。
DataNode 的任务
MapReduce 是 Hadoop 生态系统的核心组件,提供数据处理。MapReduce 是一个软件框架,用于轻松编写应用程序,处理存储在 Hadoop 分布式文件系统中的大量结构化和非结构化数据。
MapReduce 程序具有并行性质,因此对于使用集群的多台机器进行大规模数据分析非常有用,提高了计算速度和可靠性。
MapReduce 的每个阶段都有键值对作为输入和输出。Map 函数获取一组数据并将其转换为另一组数据,其中各个元素被分解为元组(键/值对)。函数将 Map 的输出作为输入,并根据键来组合这些数据元组,相应地修改键的值。
MapReduce的特点
YARN(Yet Another Resource Negotiator
)作为一个 Hadoop 生态系统的组件,它提供了资源管理。YARN 也是 Hadoop 生态系统中最重要的组件之一。YARN 被称为 Hadoop 的操作系统,因为它负责管理和监控工作负载。它允许多个数据处理引擎(如实时流和批处理)来处理存储在一个平台上的数据。
Hive 是一个开源的数据仓库系统,用于查询和分析存储在 Hadoop 文件中的大型数据集。Hive 主要做三个功能:数据汇总、查询和分析。
Hive 使用的语言称为 HiveQL(HQL),与 SQL 类似。HiveQL 自动将类似 SQL 的查询翻译成 MapReduce 作业,并在Hadoop上执行。
Pig 是一个高级语言平台,用于分析和查询存储在 HDFS 中的巨大数据集。Pig 作为 Hadoop 生态系统的一个组成部分,使用 PigLatin 语言,它与 SQL 非常相似。它的任务包括加载数据,应用所需的过滤器并以所需的格式转储数据。对于程序的执行,Pig 需要 Java 运行环境。
HBase 是 Hadoop 生态系统的一个组成部分,它是一个分布式数据库,被设计用来在可能有数十亿行和数百万列的表中存储结构化数据。HBase 是一个建立在 HDFS 之上,可扩展的、分布式的 NoSQL 数据库。HBase 提供实时访问 HDFS 中的数据的读取或写入。
HBase 有两个组件,即 HBase Master 和 RegionServer。
(1)HBase Master
(2)RegionServer
HCatalog 是 Hadoop 的一个表和存储管理层。HCatalog 支持 Hadoop 生态系统中的不同组件,如MapReduce、Hive 和 Pig,以方便从集群中读写数据。HCatalog 是 Hive 的一个关键组件,使用户能够以任何格式和结构存储他们的数据。默认情况下,HCatalog 支持 RCFile
、CSV
、JSON
、sequenceFile
和 ORC
文件格式。
Acro 是 Hadoop 生态系统的一部分,是一个最流行的数据序列化系统,为 Hadoop 提供 数据序列化和数据交换服务。这些服务可以一起使用,也可以独立使用。大数据可以使用 Avro 交换用不同语言编写的程序。
使用序列化服务,程序可以将数据序列化为文件或消息。它将数据定义和数据一起存储在一个消息或文件中,使得程序可以很容易地动态理解存储在 Avro 文件或消息中的信息。
Thrift 是一个用于可扩展的跨语言服务开发的软件框架,同时是一种用于 RPC(远程程序调用)通信的接口定义语言。Hadoop 做了大量的 RPC 调用,因此有可能出于性能或其他原因使用 Thrift。
Hadoop 生态系统组件的主要目的是大规模数据处理,包括结构化和半结构化数据。Drill 是一个低延迟的 分布式查询引擎,旨在扩展到几千个节点并查询 PB 级的数据。Drill 是第一个具有无模式模型的分布式 SQL 查询引擎。
Drill 有专门的内存管理系统,可以消除垃圾回收,优化内存分配和使用。Drill 与 Hive 发挥得很好,允许开发者重用他们现有的 Hive 部署。
Mahout 是用于创建可扩展的机器学习算法和数据挖掘库的开源框架。一旦数据被存储在 HDFS 中,Mahout 提供了数据科学工具来自动寻找这些大数据集中有意义的模式。
Mahout的算法包括
Sqoop 将数据从外部来源导入相关的 Hadoop 生态系统组件,如 HDFS、Hbase 或 Hive。它还可以将数据从 Hadoop 导出到其他外部来源。Sqoop 与关系型数据库一起工作,如 Teradata、Netezza、Oracle、MySQL。
Flume 有效地收集、汇总和移动大量的数据,并将其从原点送回 HDFS。它是容错和可靠的机制。Flume 允许数据从源头流入 Hadoop 环境。它使用一个简单的可扩展的数据模型,允许在线分析应用。使用 Flume,我们可以从多个服务器立即获得数据到 Hadoop。
Ambari 是一个用于配置、管理、监控和保护 Apache Hadoop 集群的管理平台。由于 Ambari 提供了一致的、安全的操作控制平台,Hadoop 管理变得更加简单。
Ambari的特点
Zookeeper 用于维护配置信息、命名、提供分布式同步和提供组服务。Zookeeper 管理和协调一个大型的机器集群。
Zookeeper 的特点:
Oozie 是一个工作流调度系统,用于管理 Apache Hadoop 作业。Oozie 将多个作业按顺序组合成一个逻辑的工作单元。Oozie 框架与 Apache Hadoop 栈完全集成,以 YARN 为架构中心,支持 Apache MapReduce、Pig、Hive 和 Sqoop 的 Hadoop 作业。
在 Oozie 中,用户可以创建工作流的有向无环图,它可以在 Hadoop 中并行和顺序运行。Oozie 是可扩展的,可以管理 Hadoop 集群中成千上万的工作流的及时执行。Oozie 也是非常灵活的。人们可以轻松地启动、停止、暂停和重新运行工作。它甚至可以跳过一个特定的故障节点,或在 Oozie 中重新运行它。
Oozie 作业有两种基本类型
参考:https://data-flair.training/blogs/hadoop-ecosystem-components/