1 CDH
1.1 生态体系
CDH生态体系中,自底向上归纳为下面四大部分:
- 数据迁移层:通过批量加载处理(Sqoop)、流式实时传输(Flume、Kafka)将数据移入移出Hadoop;
- 数据存储层:主要包括具有高批处理性的HDFS,具有高随机读写性的HBase,以及批处理性和随机读写性介于两者之间的Kudu;
- 资源管理与安全管制层:由Yarn提供资源管理,Sentry提供安全管制;
-
数据处理分析层:
- 数据处理主要由适用于大型数据集离线批处理的MapReduce,以及基于内存快速处理的Spark完成;
- 数据分析主要由适用对于大数据集的批处理作业Hive,以及提供实时交互查询的Impala;
-
此外还包括直接使用简单自然语言访问数据的搜索服务Apache Solr;
1.2 各层相关组件概念及原理
1.2.1 数据迁移层
Sqoop
用于将关系型数据库与Hadoop生态(HDFS,HBase,Hive)中的数据进行相互转移;
通过MapReduce任务(主要为Map),映射传输关系型数据库与Hadoop中的数据;
-
基于JDBC和关系型数据库进行交互;
Kafka
一个用于构建实时数据管道和流应用程序的分布式消息系统;
客户端和服务器之间的通信是通过TCP协议完成;
作为一个集群运行在一个或多个可跨多个数据中心的服务器上;
-
Kafka集群以Topic的形式存储流记录信息;
Flume
一个分布式日志采集系统,同时也采集网络流量数据、社交媒体生成的数据、电子邮件消息等多种信息;
Event为数据传输的基本单元,由载有数据的字节数组和可选的headers头部信息构成;
使用事务的方式确保Event的可靠传输;
-
Agent 是一个 (JVM) 进程;
1.2.2 数据存储层
HDFS
分布式文件存储系统,主从式架构(Master/Slave);
每个文件具有多个备份;
包括NameNode、SecondaryNameNode、DataNode三大角色;
NameNode主要负责文件系统命名控件的管理,存储文件目录的Metadata元数据信息等;
SecondaryNameNode主要用于备份NameNode中的元数据信息,加快集群启动时间等;
DataNode主要负责存储客户端发送的Blok数据块,执行数据块的读写操作;
-
NameNode与DataNode通过心跳机制进行通信;
HBase
分布式NoSQL数据库,列存储;
客户端访问数据时采用三级寻址:ZooKeeper文件---> -ROOT-表---> .META.表--->用户数据表;
查询时采用惰性缓存机制,当客户端通过已有的缓存去具体的region服务器中没有找到时,再通过三级寻址,将最新的地址进行缓存;
-
数据先写入MemStore缓存,并在Hlog中记录,系统周期性的将MemStore中的内容写入StoreFile文件,当StoreFile过大时,会触发分裂操作;
1.2.3 资源管理与安全管制层
YARN
- 资源管理调度框架,将资源管理、作业调度/监控分成两个独立的守护进程,分别由ResourceManager、ApplicationMaster负责;
- ResourceManager 包括Scheduler、ApplicationsManager;
- Scheduler 负责为应用程序分配资源;
- ApplicationsManager 负责处理提交的作业,与NodeManager通信 ,要求其为应用程序启动ApplicationMaster,并在任务失败时重新启动ApplicationMaster的服务;
- NodeManager 为所在机器的代理,负责监视Container资源使用情况,并将其报告给Scheduler;
- Container 包括CPU、内存、磁盘、网络等资源,是一个动态资源划分单位,具体资源量根据提交的应用程序的需求而变化;
- ApplicationMaster 为运行应用程序向ResourceManager申请资源、与NodeManager通信以启动或者停止任务、监控所有任务的运行情况;
-
CDH动态资源池默认采用的DRF( Dominant Resource Fairness)计划策略。当内存不够时,空虚的 CPU 不会再被分配任务;当CPU 不够时,多余的内存也不会再启动任务
Sentry
a pluggable authorization engine
可自定义授权规则以验证用户或应用程序对Hadoop资源的访问请求
高度模块化(pluggable ),可以支持Hadoop中各种数据模型的授权
Sentry Server 管理授权元数据,提供安全检索和操作元数据的接口
-
Sentry Plugin 提供操作存储在Sentry Server中的授权元数据的接口,以及 authorization policy engine
1.2.4 数据处理分析层
MapReduce
离线分布式计算框架;
分而治之,任务分解,结果汇总;
自定义map、reduce函数,输入输出为<key, value>键值对;
用户编写MR程序,通过Client提交到JobTracker,JobTracker将任务分发到TaskTrackers执行,JobTracker与TaskTracker间通过心跳机制通信;
Hive
- 基于Hadoop的一个数据仓库工具,适用于离线批处理作业;
- Hive 本身不存储数据,而是管理存储在HDFS上的数据,其主要是通过Hive Driver将用户的SQL语句解析成对应的MapReduce程序;
- 不支持事务;
- Metastore Database 独立的数据库,依赖于传统的RDBMS,如MySQL或PostgreSQL,保存有关Hive数据库、表、列、分区和Hadoop底层数据文件和HDFS块位置等的元数据;
- Driver:包括编译器、优化器、执行器,根据用户编写的 Hive SQL 语句进行解析、编译优化、生成执行计划,然后调用Hadoop的MapReduce计算框架,形成对应的 MapReduce Job;
Impala
对HDFS、HBase中的数据提供交互式SQL查询
Hive Metastore 存储Impala可访问数据的元数据信息 (Impala 中表的元数据存储借用的是 Hive中的Metastore)
Statestore 监控集群中各个Impala节点的健康状况,提供节点注册,错误检测等
Impala Daemon(Impalad) 运行在集群每个节点上的守护进程(与DataNode在同一主机上运行)。每个 Impalad 进程,都包含有Query Planner、Query Coordinator、Query Exec Engine三大模块
QueryPalnner 接收来自Clients的SQL语句,并解释成为执行计划
Query Coordinator 将执行计划进行优化和拆分,形成执行计划片段,并调度这些片段分发到各个节点上
Query Exec Engine 负责执行计划片段,最后返回中间结果,这些中间结果经过聚集之后最终返回给Clients
Hive 适合于长时间的批处理查询分析,而 Impala 适合于实时交互式 SQL 查询。 Hive本身并不执行任务的分析过程,而是依赖于MapReduce执行框架。而Impala没有使用 MapReduce 进行并行计算, Impala 把整个查询分析成一个执行计划树,而不是一连串的 MapReduce 任务, 它使用与商用并行关系数据库 MPP 中类似的查询机制
2 Cloudera Manager
2.1 功能简述
- 一个用于管理CDH群集的端到端的应用程序;
- 自动化Hadoop安装过程, 缩短部署时间;
- 提供实时的集群概况,例如节点、服务的运行状况;
- 提供了集中的中央控制台对集群的配置进行更改;
- 整合了各种报告和诊断工具,帮助优化性能和利用率;
2.2 整体架构
- Server:Cloudera Manager的核心,管理Web服务器和应用程序逻辑,负责安装软件,配置,启动和停止服务,以及管理运行服务的集群;
- Agent:安装在集群中的主机上, 负责启动和停止进程,解压缩配置,触发安装和监视主机;
- Management Service: 执行各种监视,警报和报告等功能;
- Database: 存储集群的配置、监控等信息;
- Cloudera Repository: Cloudera Manager分发的软件仓库;
-
Clients:提供与Server交换的接口
- Admin Console:管理员管理集群和Cloudera Manager的Web UI界面;
-
API:提供开发人员创建自定义的Cloudera Manager应用程序;
参考资料
Cloudera Enterprise 6.2.x Document
《Cloudera Hadoop 大数据平台实战指南》
各组件官网(Sqoop,Kafka,Flume,Hadoop,Spark,Hive,Impala,Sentry,HBase)