- HDFS ( Hadoop Distributed File System ) 。
- MapReduce。
Hadoop 的生态系统
Hadoop 是一个开源的、可运行于大规模集群上的分布式计算平台,它实现了 MapReduce 计算模型和分布式文件系统 HDFS 等功能,在行业内得到了广泛的应用,同时也成为了大数据的代名词。
本文将介绍 Hadoop 的重要特性和其生态系统的各个组件。
简介
Hadoop 是 Apache 软件基金会旗下的一个开源分布式计算平台。开发语言为 Java。
特性
- 高可靠性。采用荣誉数据存储,即使副本故障,其他副本也可以提供正常服务。
- 高效性。能够处理 PB 级别数据。
- 高扩展性。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 的最大特点也是最大卖点就是它的快速。
- Impala 不需要把中间结果写入磁盘,省掉了大量的 I/O 开销。
- 省掉了 MapReduce 作业启动的开销。MapReduce 启动 task 的速度很慢 ( 默认每个心跳间隔是 3 秒钟 ) ,Impala 直接通过相应的服务进程来进行作业调度,速度快了很多。
- Impala 完全抛弃了 MapReduce 这个不太适合做 SQL 查询的范式,而是像 Dremel 一样借鉴了 MPP 并行数据库的思想另起炉灶。因此可做更多的查询优化,从而省掉不必要的 shuffle、sort 等开销。
- 通过使用 LLVM 来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。
- 用 C++ 实现,做了很多有针对性的硬件优化,例如使用 SSE 指令。
- 使用了支持 Data locality 的 I/O 调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。
Kafka ( 分布式发布订阅消息系统 )
Kafka 是一个基于 Zookeeper 协调的分布式日志系统。常用于日志的收集和消息系统。
如果对 Kafka 这个中间件感兴趣的话,可以查看我的另一篇文章: Kafka 相关的基本概念和常见问题 。
Spark ( 分布式内存计算实时框架 )
Spark 是 UC Berkeley AMP lab 开源的类 MapReduce 的通用并行框架。不同于 MapReduce 的是 Job 中间结果可保存在内存中,从而减少了对 HDFS 的读写。因此 Spark 能更好地适用于数据挖掘和机器学习等需要迭代的 MapReduce 算法。
本文参考资料
贡献者
更新日志
941fa-feat(theme): upgrade and use collections于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于