前言
CDH大数据平台
CDH是Cloudera发布的一个自己封装的Hadoop商业版软件发行包,里面不仅包含了Cloudera的商业版Hadoop,能够十分方便地对Hadoop集群进行安装,部署和管理,同时CDH中也包含了各类常用的开源数据处理与存储框架,如Spark,Hive,HBase等。
部署Hadoop集群的时候,可以选择Cloudera Express免费版本。这个版本包含了CDH以及Cloudera Manager核心功能,提供了对集群的管理功能,比如自动化部署,中心化管理,监控,诊断功能等。
另外,Cloudera Express免费版本对集群节点数目是无限制的。收费的Cloudera Enterprise拥有高级管理功能,如提供商业技术支持,自动化备份和灾难恢复,记录配置历史及回滚等,而这些功能Cloudera Express则没有。
Cloudera Manager功能
1.状态管理
- Cloudera Manager Server 维护了集群的各种状态。状态可分为两类:模块和运行时,两者都存储于CMS的数据库中。
- 模块包含集群,主机,服务,角色,配置。运行时包含进程,命令。
2.配置管理(CM在多个层面定义了配置)
- 服务层面:可定义整个服务实例层面的配置,如HDFS服务的默认副本因子,
- 角色组层面:可定义某个角色组的配置,如DataNode的处理线程数量,可根据DataNodes的不同分组进行不同的配置。
- 角色层面:可覆盖从角色层面继承的配置。这种配置需要谨慎使用,因为会造成角色组中的配置分歧。如因为拍错需求临时启用某个角色实例的DEBUG日志。
- 主机层面:根据监控,软件管理,资源管理的不同,有不同的配置。
- CM自身也有很多与管理操作相关的配置。
3.进程管理
- 非CM管理的集群使用脚本进行角色进程的启动,但在CM管理的集群中这类脚本不起作用。
- CM管理的集群中,只能使用CM进行角色进程的启停,CM使用开源的进程管理名为supervisord,其会启动进程,重定向日志,通知进程失败,为进程设置正确的用户ID等等。CM支持自动重启一个崩溃的进程。如果一个进程在启动会频繁崩溃,还会被打上非健康标记。
- 停止CMS和CM代理不会使正在运行的进程被中止。
4.软件包管理
CM支持两种软件分发格式:packages和parcels。
- package:是一种二进制分发格式,包含编译的代码和元数据如包描述,版本,依赖项。包管理系统评估此元数据以允许包搜索,执行升级,确保包的所有依赖关系得到满足。CM使用本地操作系统支持的包管理程序。
- parcel:也是一种二进制分发格式,包含CM需要使用的附加元数据。其余package的却别有:可安装同一个parcel的多个版本,并激活其中一个;parcel可安装到任何路径;通过parcel安装,CM会自动下载并激活和每个节点操作系统版本匹配的parcel包,解决某些操作系统版本不一致问题。
5.主机管理
- CM提供了多种功能,以管理Hadoop集群的主机。第一次运行CM管理控制台时,可搜索主机,并添加到集群,一旦选中了主机,就可以为其分配CDH角色。CM会在主机上自动部署作为集群托管节点所有软件:JDK,CM agent,CDH,Impala,Solr等。
- 服务部署并运行后,管理员控制台中的“Hosts”区域,显示集群中托管主机的总体状态。提供的信息包括主机上的CDH版本,主机所属的集群,运行在主机上的角色的数量。Cloudera管理服务中的主机监控角色执行监控检查并收集主机的统计信息,以允许你监控主机的监控和性能。
6.资源管理
CM允许使用两种资源管理方式:
- 静态资源池:使用Linux cgroups在多个服务间静态进行资源隔离,如HBase,Impala,Yarn分别使用一定百分比的资源。静态资源池默认不启用。
- 动态资源池:用于某些服务内部的资源管理,如Yarn的各种资源调度器,Impala也可对不同池中的查询动态分配资源。
7.用户管理
- 访问CM通过用户账户进行控制。用户账户标识如何对用户进行身份验证,并确定授予用户的权限。
- CM提供了多种用户认证机制。可以配置CM,使用CM数据库认证用户,或使用某种外部认证服务。外部认证服务可以是LADP服务器,或者指定的其他服务。CM还支持使用安全断言标记语言(SAML)来实现单点登录。
8.安全管理
- 认证:认证是指用户或服务证明其有访问某种系统资源的权限。Cloudera集群支持操作系统认证,LDAP,Kerberos等认证方式。LDAP和Kerberos并不是互斥的,很多时候可以一起使用。
- 授权:授权关注谁可以存取或控制指定的资源或服务。CDH目前支持以下几种权限控制:
- 传统的POSIX形式的目录和文件权限控制;
- HDFS扩展的ACL细粒度权限控制;
- HBase可对用户和组设置各种操作的ACL;
- 使用Apache Sentry进行基于角色的全下控制;
- 加密:集群不同层面存储和传输的数据支持不同的加密方式。
9.Cloudera管理服务
Cloudera Management Service 实现了多种管理特性,包括活动监视,主机监控,服务监控,时间服务,告警发布,报表管理等。
- 集群管理:比如添加节点,删除节点
- 配置管理:之前我们手工配置的那些配置文件比如core-site.xml,hdfs-site.xml,zoo.cfg等等,我们都可以通过图形化界面来配置。
- 日志管理:之前我们发现bug了,跑不起来了,得手工去看日志,比如,现在通通可以在CM上查看了!
- 监控:实时监控集群的各种运行状态,cpu,磁盘等的使用率
- 诊断:对集群出现的问题进行诊断,对出现的问题给出建议解决方案。
- 整合Hadoop生态圈中的组件:直接一键安装,不用担心版本匹配问题。
一、集群规划
如果你正准备从0开始搭建一套CDH集群应用于生产环境,那么此时需要做的事情应该是结合当前的数据、业务、硬件、节点、服务等对集群做合理的规划,而不是马上动手去安装软件。
合理的集群规划应该做到以下几点:
- 充分了解当前的数据现状
- 与业务方深入沟通,了解将会在集群上运行的业务,集群将会为业务提供什么服务
- 结合数据现状与业务,合理预估未来的数据量增长
- 盘点当前可用的硬件资源,包括机柜机架、服务器、交换机等
- 当前硬件资源不充足的情况下,根据数据评估情况作出采购建议
- 根据业务属性与组成,合理规划集群的部署架构
- 根据可用硬件资源,对集群节点的服务角色进行合理划分
以上步骤完成之后才是动手进行安装与部署,你将会对集群的架构模式、应用方向与业务场景了然于胸,并确保这个集群(或者是集群组)能够提供稳定、高效、高性能的服务,为业务保驾护航。
需要有能力能够提供集群建设目标:
- 性能需求
- 简单查询100G数据量时,耗时上限
- 复杂查询(join)时,耗时上限
- 历史数据导入时,耗时上限
- 增量数据导入时,耗时上限
- 可靠性需求:每月宕机次数(<1),每月宕机时间(<10min)
- 可用性:每台机器每月的宕机时间
- 容错性:机器故障,数据不丢失
1.1 硬件规划
硬件规划决定集群将使用多少硬件资源,以及什么配置的硬件资源。
可以从以下几个维度进行评估:
- 数据现状
- 盘点所有数据情况,包括数据源、数据量、数据大小、数据维度等信息
- 工作负载
- 评估在集群与数据之上将执行的任务类型
- 如实时计算、离线计算、图像处理、关系网络等应用场景以及是否提供OLTP服务等
- 未来数据量预估
- 根据数据源与业务应用场景可以对未来衍生的数据总量与数据增量做大致评估
- 评估的时间范围视业务场景而定,建议做不少于一年的规划
- 硬件资源现状
- 盘点目前可用的硬件资源,确认是否满足所评估的规模及要求
- 机房机柜空间、电源(双)等是否充足(需考虑后续扩容问题)
- 网络交换机性能是否满足要求(建议万兆网卡(双))
- 查看服务器磁盘、内存、CPU等资源是否需要补充
- 硬件选择
- 现有硬件资源不满足的需求的情况下,结合运维建议,提出需要增加或者新采购的硬件型号、配置等
- 确认所需服务器数量
示例主机列表:
cdh2-1 cdh2-2 cdh2-3 cdh2-4 cdh2-5 cdh2-6 cdh2-7 cdh2-8
服务器硬件情况如下:
数量:8
CPU:10
内存:64G
硬盘:3.3T
1.2 集群架构
混合型集群
指由一个统一的大集群,提供所有大数据服务,所有组件,集中安装在同一个集群中,有部署简单、运维方便、易于使用等优点。
但是由于混合型集群,承载了所有功能,职能繁多,网络带宽、磁盘IO等为集群共享,会因大型离线任务占用大量网络或磁盘IO峰值,对线上业务会造成短暂延迟。
且集群环境较为复杂,有较多对线上业务造成影响的风险。
专用型集群
专用型集群指根据不同的需求与功能职责对集群进行划分,由多个职责不同、硬件隔离的集群组成集群组环境提供服务。
子集群各司其职,根据自身业务,最大化利用硬件资源,互相独立互不影响。部署较为复杂,运维难度增加。
专用型集群根据业务与应用场景可以划分如下:
- 离线计算集群
- 实时计算集群
- 数据服务集群
- GPU深度学习集群
- 图数据库集群
- …………
HBase提供实时读写服务的生产环境下,建议将HBase集群独立部署为数据服务集群,参考:如何基于HBase构建容纳大规模数据、支撑高并发、毫秒响应、稳定高效的OLTP实时系统。
1.3 节点规划
进行节点角色划分时尽可能遵守以下原则:
- CM监控服务在小集群下可以部署在同一主机,大集群下需要独立部署
- 集群主节点与子节点独立部署(HDFS/HBase/Yarn),且各自子节点部署在相同主机上
- 独立部署可以避免