Skip to content

Hadoop 的生态系统

约 1591 字大约 5 分钟

大数据

2024-02-29

Hadoop 是一个开源的、可运行于大规模集群上的分布式计算平台,它实现了 MapReduce 计算模型和分布式文件系统 HDFS 等功能,在行业内得到了广泛的应用,同时也成为了大数据的代名词。

本文将介绍 Hadoop 的重要特性和其生态系统的各个组件。

Hadoop Logo
Hadoop Logo

简介

Hadoop 是 Apache 软件基金会旗下的一个开源分布式计算平台。开发语言为 Java。

核心

  1. HDFS ( Hadoop Distributed File System ) 。
  2. MapReduce。

特性

  1. 高可靠性。采用荣誉数据存储,即使副本故障,其他副本也可以提供正常服务。
  2. 高效性。能够处理 PB 级别数据。
  3. 高扩展性。Hadoop 的设计目标是可以高效稳定地运行在廉价计算机集群上,可以扩展到上千节点。
  4. 高容错性。自动将错误任务重新分配。
  5. 成本低。可以运行在廉价服务器上。

Hadoop 生态系统

Hadoop 大数据处理框架简介
Hadoop 大数据处理框架简介

HDFS ( 分布式文件系统 )

HDFS 是 Hadoop 项目的两大核心之一,是针对于 Google File System ( GFS ) 的开源实现。HDFS 具有处理超大数据,流式处理和可以运行在廉价服务器上的特点。

HBase ( 分布式实时列式存储数据库 )

HBase 是一个提供高可靠性,高性能,可伸缩,实时读写,分布式的列式存储数据库,一般采用 HDFS 作为其底层存储。

HBase 是针对谷歌 BigTable 的开源实现,二者都采用了相同的数据模型,具有强大的非结构化数据存储能力。

MapReduce ( 分布式计算框架 )

Hadoop MapReduce 是针对谷歌 MapReduce 的开源实现。MapReduce 是一种编程模型,用于大规模数据集 ( 大于 1 TB ) 的并行运算。将大规模集群的并行计算过程高度抽象成两个函数:Map 和 Reduce。

Hive ( Hive QL 数据仓库 )

Hive 是一个基于 Hadoop 的数据仓库工具,可以用于对 Hadoop 文件中的数据集进行数据整理和查询。学习成本较低,因为提供了类似于关系型数据库的 SQL 语言--Hive QL,可以通过 Hive QL 语句快速实现简单的 MapReduce 统计。

Pig ( 数据流式处理 )

Pig 是一种数据流语言和运行环境,可以大大简化 MapReduce 的开发,在 MapReduce 的基础上创建了更简单的过程语言抽象,为 Hadoop 应用程序提供了一种更加接近 SQL 的接口。

Mahout ( 数据挖掘算法库 )

Mahout 提供一些可扩展的机器学习领域经典算法的实现。例如: 聚类,分类,推荐过滤,频繁子项挖掘等。

Zookeeper ( 分布式协调服务系统 )

Zookeeper 是针对谷歌 Chubby 的一个开源实现,提供分布式协调服务。例如: 发布/订阅,负载均衡,命名服务,分布式协调/通知,Master 选举,分布式锁等。

Flume ( 分布式日志采集 )

Flume 是一个可靠的分布式海量日志采集,聚合和运输系统。支持在日志系统中定制各类数据的发送方用于收集数据,同时提供对数据进行简单处理并写道各种数据接收方的能力。

Sqoop ( 数据库间 ETL 工具 )

Sqoop 是 SQL-to-Hadoop 的缩写,主要是用来在 Hadoop 和关系数据库之间交换数据。通过 Sqoop 可以很方便地从 MySQL, Oracle, PostgreSQL 等关系型数据库中导入 Hadoop,或者从 Hadoop 导出到关系型数据库。

Ambari ( 安装,部署,配置和管理工具 )

Ambari 是一种基于 Web 的工具,支持 Hadoop 集群的安装,部署,配置和管理。

提示

下面是架构图中没有,但是也非常重要的组件。

Impala ( 大数据分析查询系统 )

Impala 是 Cloudera 公司主导开发的新型查询系统,它提供 SQL 语义,能查询存储在 Hadoop 的 HDFS 和 HBase 中的 PB 级大数据。已有的 Hive 系统虽然也提供了 SQL 语义,但由于 Hive 底层执行使用的是 MapReduce 引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala 的最大特点也是最大卖点就是它的快速。

  1. Impala 不需要把中间结果写入磁盘,省掉了大量的 I/O 开销。
  2. 省掉了 MapReduce 作业启动的开销。MapReduce 启动 task 的速度很慢 ( 默认每个心跳间隔是 3 秒钟 ) ,Impala 直接通过相应的服务进程来进行作业调度,速度快了很多。
  3. Impala 完全抛弃了 MapReduce 这个不太适合做 SQL 查询的范式,而是像 Dremel 一样借鉴了 MPP 并行数据库的思想另起炉灶。因此可做更多的查询优化,从而省掉不必要的 shuffle、sort 等开销。
  4. 通过使用 LLVM 来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。
  5. 用 C++ 实现,做了很多有针对性的硬件优化,例如使用 SSE 指令。
  6. 使用了支持 Data locality 的 I/O 调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。

Kafka ( 分布式发布订阅消息系统 )

Kafka 是一个基于 Zookeeper 协调的分布式日志系统。常用于日志的收集和消息系统。

如果对 Kafka 这个中间件感兴趣的话,可以查看我的另一篇文章: Kafka 相关的基本概念和常见问题

Spark ( 分布式内存计算实时框架 )

Spark 是 UC Berkeley AMP lab 开源的类 MapReduce 的通用并行框架。不同于 MapReduce 的是 Job 中间结果可保存在内存中,从而减少了对 HDFS 的读写。因此 Spark 能更好地适用于数据挖掘和机器学习等需要迭代的 MapReduce 算法。




贡献者

更新日志

2025/8/5 08:34
查看所有更新日志
  • eb6eb-improve(docs): use pangu formatter
  • 44c43-improve(docs): use svg picture
  • 4e0e0-improve(docs): use chinese punctuation
  • 27a4a-improve(docs): use chinese punctuation
  • fea7c-improve(docs): delete extra whitespace and blank lines
  • c1c02-modify(docs): remanage folders and rename files
  • 90e37-docs: update docs
  • c0924-整理文章格式
  • 4e139-update
  • 539fa-新增文字+CRLF全部替换为LF

Keep It Simple