Skip to content

Hadoop 的生态系统

1643字约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 算法.




变更历史

最后更新于: 查看全部变更历史
  • docs: update docs

    于 2024/11/19
  • 整理文章格式

    于 2024/10/29
  • update

    于 2024/10/17
  • 新增文字+CRLF全部替换为LF

    于 2024/10/17
  • 升级主题+规整文章格式

    于 2024/10/15
  • 升级主题+新增文章+修改格式

    于 2024/10/14
  • 升级版本+规整文档中的格式

    于 2024/10/11
  • 调整头图

    于 2024/9/30
  • 整理图片格式和名称(not finished)

    于 2024/9/30
  • 给予文件夹顺序

    于 2024/9/24
  • 整理文章

    于 2024/9/23
  • first commit

    于 2024/9/20