1. 综述

1.1 集群整体规划

一个小型CDH高可用集群的架构规划如下:

节点类型 功能节点 主节点/网关节点 工作节点 客户端节点
数量 1 2 3-10 1
组件 Cloudera Manager;
Cloudera Manager Service(包含Activity Monitor, Alert Publisher, Event Server, Host Monitor, Service Monitor)
主节点1:Namenode;
JournalNode;
FailoverController;
YARN ResourceManager;
ZooKeeper;
JobHistory Server;
HiveServer2;
Hive Metastore;
Hue;
HBase Master;
HBase Thrift Server主节点2:Namenode;
JournalNode;
FailoverController;
YARN ResourceManager;
ZooKeeper;
Spark History Server;
HiveServer2;
Hive Metastore;
HDFS httpFS;
HBase Master;
DataNode;
YARN NodeManager;
HBase RegionServer其中一台额外安装:Zookeeper
JournalNode
CDH CLI
配置要求 最低要求:
内存:8 GB
CPU:4 核
存储:/usr 下 1 GB
/var 下 30 GB
/opt 下 15 GB
网络:千兆以太网
推荐配置:
内存:16-32 GB
CPU:8-16 核
存储:/usr 下 10GB
/tmp 下 20GB
/opt 下 50GB
/var 下 50GB
整体 200-300 GB
网络:万兆以太网
最低要求:
内存:16 GB
CPU:8 核
存储:/usr 下 1 GB
/var 下 30 GB
/opt 下 15 GB
网络:千兆以太网
推荐配置:
内存:32-64 GB
CPU:16 核
存储:/usr 下 10GB
/tmp 下 20GB
/opt 下 50GB
/var 下 50GB
整体 200-300 GB
网络:万兆以太网
最低要求:
内存:4 GB
CPU:4 核
存储:OS: /usr 下 1 GB
/var 下 30 GB
/opt 下 15 GB
数据盘: 4块 1 TB SATA盘
网络:千兆以太网
推荐配置:
内存:32-64 GB
CPU:32-64 核
存储:OS: /usr 下 10GB
/tmp 下 20GB
/opt 下 50GB
/var 下 50GB
数据盘: 12-24块 1-4 TB SATA盘
网络:万兆以太网
最低要求:
内存:2 GB

功能节点:为Cloudera Manager节点,提供集群的安装、监控、运维、配置、节点添加、节点移除等功能。
主节点/网关节点:为CDH的领导节点,负责调度任务,数据存取指令。并包含了各类组件的Server服务。
工作节点:负责存储数据和作业的运行。
客户端节点:用于提交任务到集群。

集群服务:

名称 功能
Cloudera Manager 集群的安装、监控、运维、配置、节点添加、移除、迁移
HDFS 数据存储
YARN(MR2) 资源调度,MapReduce计算引擎
Zookeeper 分布式协同管理,高可用组件
Hive 数据的SQL化操作
Spark 计算引擎
HBase 分布式实时数据库(列式存储Wide Column)
Hue UI工作界面
其他组件
Impala 快速的SQL查询(不适合长时间的批量任务)
Oozie 作业流调度引擎
Sentry 权限管控
Solr/Key-value Store Indexer 文本检索(HBase)
Kudu 列式存储数据库
Sqoop 关系式数据库和Hadoop数据迁移
Flume 日志采集
Kafka 消息中间件
Isilon 分布式文件系统
S3 Connector 亚马逊S3文件系统连接器

1.2 集群安装过程

本文档的安装演示过程以7个节点的CDH集群为例,包含1个功能节点、2个主节点/网关节点、3个工作节点与1个客户端节点。
主要的安装步骤为:
1. 准备安装介质。
2. 修改系统配置、配置主机间免密通信、配置NTP时间同步。
3. 安装与配置Cloudera Manager,包含所依赖的数据库安装和配置。
4. 通过Cloudera Manager部署CDH集群,给不同的节点类型分配不同组件角色

2. 环境要求与准备

2.1 软件支持

操作系统:

操作系统 版本
RHEL-compatible
RHEL/CentOS/OL with RHCK kernel 7.7,7.6,7.5,7.4,7.3,7.2,6.10,6.9
Oracle Linux 7.6,7.4,7.3,7.2,6.10
SUSE Linux Enterprise Server
SLES 12SP4(不能使用自带的MariaDB 10.2,使用MariaDB 10.0替代),12SP3
Ubuntu
Ubuntu 18.04 LTS(Bionic)
16.04 LTS(Xenial)

数据库:

数据库 版本
MySQL 5.1;5.5;5.6;5.7
MariaDB 5.5;10.0;10.1
PostgreSQL 8.4;9.2;9.4;9.5;9.6;10.X0
Oracle 12.2;18;19


JDK:

JDK 版本
Oracle JDK 最低要求:1.8u31
推荐:1.8u74; 1.8u91; 1.8u102; 1.8u111; 1.8u121; 1.8u131; 1.8u141; 1.8u162; 1.8u181;
最新测试版本:1.8u181
Open JDK 最低要求:1.8u181
推荐/最新测试版本:1.8u212

2.2手册示例的硬件软件环境与规划

服务器:

数量 CPU 内存 磁盘 操作系统
8 8核 16 GB 300 GB CentOS 7.3

数据库:MySQL 5.7
JDK:Oracle JDK 1.8u102

主机名 节点类型(见1.1节)
node1 功能节点
node2-3 主节点/网关节点
node4-7 工作节点
node0 客户端节点

2.3 安装介质准备

组件 文件 地址
Cloudera Manager cm6.3.1-redhat7.tar.gz;allkeys.asc http://archive.cloudera.com/cm6/6.3.1
CDH CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel;manifest.json http://archive.cloudera.com/cdh6/6.3.2/parcels/
GPL EXTRAS GPLEXTREAS-6.3.2-1.gplextras6.3.2.p0.1605554-el7.parcel;manifest.json http://archive.cloudera.com/gplextras6/6.3.2/parcels/
JDK JDK 1.8u102
MySQL mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
mysql-connector-java-5.1.39-bin.jar

2.4配置主机列表

所有节点设置主机名
hostnamectl set-hostname
编辑/etc/hosts,添加所有服务器ip和对应的主机名
CDH 6.3.2平台安装部署手册 - 图1
注意不要把localhost给注释掉。

2.5关闭防火墙

systemctl stop firewalld

2.6关闭selinux

临时:setenforce 0
永久:(重启后生效)
/etc/selinux/config
selinux=disabled

2.7设置服务器间互相免密登录

所有节点输入ssh-keygen命令生成密钥,一直回车即可
CDH 6.3.2平台安装部署手册 - 图2
选择其中一个节点,将公钥写入authorized_keys文件中
CDH 6.3.2平台安装部署手册 - 图3
其他节点将公钥写入此节点的authorized_keys文件中
CDH 6.3.2平台安装部署手册 - 图4
将此节点的authorized_keys文件分发给所有节点
CDH 6.3.2平台安装部署手册 - 图5

2.8 设置ntp时间同步

启用NTP实现服务器时间同步

2.9设置swap

所有节点 vim /etc/sysctl.conf
添加 vm.swappiness = 10
查看是否生效 sysctl -p
CDH 6.3.2平台安装部署手册 - 图6

2.10 关闭透明大页面

临时关闭
echo never> /sys/kernel/mm/transparent_hugepage/defrag
echo never> /sys/kernel/mm/transparent_hugepage/enabled
永久关闭
vim /etc/rc.local
把上面的命令写入,重启生效

2.11确保系统yum源可用

创建本地系统yum源
内网环境/etc/yum.repo.d/目录下的CentOS-base repo不可用,很多软件无法安装,需要建立本地yum源。
http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock(在离线yum安装报错里可以找此网址,不同系统的release,arch,repo等参数有所不同)
寻找一个镜像地址,你可以在此选择自己需要的软件包,也可以将系统包内所有文件下载下来。一个快捷的方法是使用wget命令
wget -r -np -R index.html -e robots=off http://www.example.com
-r 遍历所有文件和目录
-np 不到上一层目录
-R 不下载 index.html文件
-e robots=off 不使用此命令的话可能下载的只有一个robot.txt

将无法使用会报错的yum源文件改掉
mv CentOS-Base.repo CentOS-Base.repo.bak

在/etc/yum.repos.d/目录下创建一个文件.repo
vim /etc/yum.repos.d/localyum.repo

添加如下内容
[localyum]
name=localyum
#baseurl 输入你想要存放rpm文件的目录url
baseurl=file:///opt/centos
enable=1
#禁用GPG校验
gpgcheck=0
将你需要安装的rpm文件放入你指定的目录中

输入命令
createrepo /opt/centos
yum clean all
yum makecache
可以选择每个节点重复以上操作,或者让其他节点读取某一台节点的系统yum源。如果要让其他节点读取此节点
此节点安装httpd服务
yum -y install httpd
systemctl start httpd
systemctl enable httpd

yum源文件夹放在 /var/www/html/目录下
localyum.repo 文件中baseurl因改为
file:///var/www/html/centos
执行以下命令
createrepo /var/www/html/centos
yum clean all
yum makecache
其他节点的repo文件改为:
[localyum]
name=localyum
#baseurl 输入你想要存放rpm文件的目录url
baseurl=http://83.249.174.84/centos
enable=1
#禁用GPG校验
gpgcheck=0

依然重新加载cache
yum clean all
yum makecache

3. 安装Cloudera Manager

3.1 配置CM和CDH本地库

将cm的tar包上传至服务器并解压到node1节点 /var/www/html/cloudera-repos/目录
将allkeys.asc文件放到此目录中
tar -zxvf cm6.3.1-redhat7.tar.gz -C /var/www/html/cloudera-repos/
mv allkeys.asc /var/www/html/cloudera-repos/cm6
chmod -R ugo+rX /var/www/html/cm6

将 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel和对应的manifest.json放在一个文件夹中,命名为cdh6,放在/var/www/html/cloudera-repos/目录下。
将GPLEXTREAS-6.3.2-1.gplextras6.3.2.p0.1605554-el7.parcel和对应的manifest.json放在一个文件夹中,命名为gplextras6放在/var/www/html/cloudera-repos/目录下
mv -r cdh6 /var/www/html/cloudera-repos/
mv -r gplextras6 /var/www/html/cloudera-repos/
chmod -R ugo+rX /var/www/html/cdh6
chmod -R ugo+rX /var/www/html/gplextras6

创建repo文件并分发到所有节点
vim /etc/yum.repos.d/cloudera-repo.repo
添加内容
[cloudera-repo]
name=cloudera-repo
baseurl=http://83.249.174.84/cloudera-repos/cm6
enabled=1
gpgcheck=0

yum clean all
yum makecache

3.2 安装JDK

要求:
每个节点JDK必须一致
JDK必须是64位
JDK必须安装在/usr/java/jdk-version
mkdir /usr/java
tar -zxvf jdk-8u102-linux-x64.tar.gz -C /usr/java

添加环境变量
vim /etc/profile
添加
export JAVA_HOME=/usr/java/jdk1.8.0_102
export PATH=$JAVA_HOME/bin:$PATH
保存退出并使其生效
source /etc/profile

3.3 安装 Cloudera Manager

所有节点安装 daemon和agent
yum install cloudera-manager-daemons.x86_64 cloudera-manager-agent.x86_64
CM server节点安装server

3.4 安装和配置数据库

安装MySQL
将Mysql安装到Cloudera Manager节点:node1。推荐使用rpm安装MySQL,卸载掉原来的MySQL或Mari0DB,使用mysql官网的rpm-bundle.tar版本。
解压后依次安装。
tar -vxf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
rpm -ivh +rpm``包名
这些包有相互依赖的关系,可能还有一些系统的依赖,根据提示逐步安装每一个。本身安装server和client及其依赖即可,但后续一些组件需要其中一部分不常用的包,为了方便起见这里一次性安装完整。

修改mysql配置
vim /etc/my.cnf

  1. # read_rnd_buffer_size = 2M
  2. datadir=/var/lib/mysql
  3. socket=/var/lib/mysql/mysql.sock
  4. transaction-isolation = READ-COMMITTED
  5. # Disabling symbolic-links is recommended to prevent assorted security risks
  6. symbolic-links=0
  7. key_buffer_size = 32M
  8. max_allowed_packet = 32M
  9. thread_stack = 256K
  10. thread_cache_size = 64
  11. query_cache_size = 64M
  12. query_cache_type = 1
  13. max_connections = 550
  14. log_bin=/var/lib/mysql/mysql_binary_log
  15. server_id = 1
  16. binlog_format = mixed
  17. read_buffer_size = 2M
  18. read_rnd_buffer_size = 16M
  19. sort_buffer_size = 8M
  20. join_buffer_size = 8M
  21. #InnoDB settings
  22. innodb_file_per_table = 1
  23. innodb_flush_log_at_trx_commit = 2
  24. innodb_log_buffer_size = 64M
  25. innodb_buffer_pool_size = 4G
  26. innodb_thread_concurrency = 8
  27. innodb_flush_method = O_DIRECT
  28. innodb_log_file_size = 512M
  29. log-error=/var/log/mysqld.log
  30. pid-file=/var/run/mysqld/mysqld.pid
  31. sql_mode=STRICT_ALL_TABLES


启动mysql

systemctl start mysqld
systemctl enable mysqld

如果使用MySQL 5.7 第一次会使用一个临时密码,安装完后在/var/log/mysqld.log里面能找到。Gykj_1234
运行 /usr/bin/mysql_secure_installation

CDH 6.3.2平台安装部署手册 - 图7
安装MySQL JDBC Driver
使用5.1.X且在5.1.26以后的版本,不要使用8的版本,将mysql-connector-java-5.1.39-bin.jar放至/usr/share/java 目录下,并改名为mysql-connector-java.jar

为Cloudera软件创建数据库
登录mysql
使用以下命令为各组件创建数据库
CREATE DATABASE DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON .* TO ‘’ @ ‘%’ IDENTIFIED BY ‘

的名字如下

服务 数据库 用户
Cloudera Manager Server scm scm
Activity Monitor amon amon
Reports Manager rman rman
Hue hue hue
Hive Metastore Server metastore hive
Sentry Server sentry sentry
Cloudera Navigator Audit nav nav
Cloudera Navigator Metadata Server navms navms
Oozie oozie oozie

设置Cloudera Manager数据库
运行以下命令
/usr/share/cmf/schema/scm_prepare_database.sh mysql scm scm
提示如下,表示设置成功。
CDH 6.3.2平台安装部署手册 - 图8

4. 安装CDH

4.1 启动 Cloudera Manager

所有节点启动agent
systemctl start cloudera-scm-agent
server节点启动server
systemctl start server cloudera-scm-server

查看启动日志
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
提示
CDH 6.3.2平台安装部署手册 - 图9
则启动成功,

4.2登录Cloudera Manager安装CDH

浏览器登录Cloudera Manager 地址为cm server的ip,端口为7180,初始用户名密码为admin admin
CDH 6.3.2平台安装部署手册 - 图10
选择免费版
CDH 6.3.2平台安装部署手册 - 图11
添加所有的host,这里输入ip、host全名(FQDN)、host短名都可以
CDH 6.3.2平台安装部署手册 - 图12
CDH 6.3.2平台安装部署手册 - 图13
点击更多选项More Options
CDH 6.3.2平台安装部署手册 - 图14
删去外网环境的远程库,添加之前建的本地远程库
http://83.249.174.84/cloudera-repos/cdh6

CDH 6.3.2平台安装部署手册 - 图15

选择自定义存储库
输入cm的地址
http://83.249.174.84/cloudera-repos/cm6
CDH 6.3.2平台安装部署手册 - 图16
JDK部分不要勾选

CDH 6.3.2平台安装部署手册 - 图17
这里有个单用户模式,不要勾选,跳过
CDH 6.3.2平台安装部署手册 - 图18
提供集群登录方式,可以使用用户名密码,也可以使用私钥文件
CDH 6.3.2平台安装部署手册 - 图19
点击继续开始安装
(正常情况是所有节点,这里漏掉了一个,应该是前面添加节点的时候node1出了问题。但没关系,集群安装完成之后可以针对node1单独安装)
CDH 6.3.2平台安装部署手册 - 图20

CDH 6.3.2平台安装部署手册 - 图21
成功后继续,然后会进行一个检查
CDH 6.3.2平台安装部署手册 - 图22

4.3节点角色分配

选择组件
选择集群所需的组件:
HDFS、YARN、Zookeeper、Hive、Hue、Spark
其他组件可以后续添加

分配角色
按照之前规划给节点分配角色

主机名 角色
node2 HDFS NameNode;HDFS FailoverController;
HDFS Balancer;YARN ResourceManager;
YARN JobHistory Server;HiveServer2;
Hive Metastore Server;Hue Server;HBase Thrift Server;HBase Master
node3 HDFS SecondaryNameNode;
HDFS FailoverController;
HDFS Balancer;HDFS httpFS
YARN ResourceManager;HiveServer2;
Hive Metastore Server;Hue Server;
HBase Master
node4-7 HDFS DataNode;YARN NodeManager
node0 Hive Gateway;Spark Gateway;HBase Gateway; HDFS Gateway



CDH 6.3.2平台安装部署手册 - 图23
设置数据库
选择数据库安装的节点、数据库类型,输入数据库名、用户名、密码。点击测试连接,通过后进入下一步
CDH 6.3.2平台安装部署手册 - 图24

然后有一些目录设置完成后开始安装组件
CDH 6.3.2平台安装部署手册 - 图25
CDH 6.3.2平台安装部署手册 - 图26
安装成功

添加新节点(把node1加上)
CDH 6.3.2平台安装部署手册 - 图27
CDH 6.3.2平台安装部署手册 - 图28

CDH 6.3.2平台安装部署手册 - 图29
安装完成后,在主界面点击
CDH 6.3.2平台安装部署手册 - 图30
选择一个服务组件点击实例,为node1分配角色,有的组件可能需要删除角色后再添加,有的则可以迁移。
CDH 6.3.2平台安装部署手册 - 图31

重新启动
CDH 6.3.2平台安装部署手册 - 图32

4.4开启高可用

选择Zookeeper组件,点击右侧操作按钮,选择添加角色实例,
将node2-4设置为Zookeeper Server
CDH 6.3.2平台安装部署手册 - 图33
选择HDFS组件,点击右侧的操作按钮,选择启用 HA
CDH 6.3.2平台安装部署手册 - 图34
CDH 6.3.2平台安装部署手册 - 图35
CDH 6.3.2平台安装部署手册 - 图36
将 node 2-3设置为 NameNode
将 node 2-4 设置为 JournalNode
CDH 6.3.2平台安装部署手册 - 图37


停止hive 更新Hive Metastore Namenode
CDH 6.3.2平台安装部署手册 - 图38

5. 集群扩容缩容

5.1添加新的节点

向集群添加新的节点首先需要完成第二节的环境准备工作,包括系统配置、免密通信、主机名、NTP等。还需要更新所有节点的hosts列表,将新添加的主机名写入。
第二步,新添加的主机完成第三节 3.1配置CM和CDH本地库和3.2 安装JDK。3.3安装Cloudera Manager 中只需安装 daemon和agent。
第三步,登录Cloudera Manager管理页面,在主机栏选择添加主机Add hosts
CDH 6.3.2平台安装部署手册 - 图39
可以选择纳入Cloudera Manager管理后续再加入或者直接加入集群
CDH 6.3.2平台安装部署手册 - 图40
后续步骤同第四节CDH的安装,
CDH 6.3.2平台安装部署手册 - 图41
这里的角色分配模式不同,需要选择一个模版。我们可以自定义一个模版或者选择无,后续再进行角色分配。建议按照之前的规划,给不同的节点类型创建模版,例如工作节点,添加HBase Region Server、DataNode、NodeManager.
CDH 6.3.2平台安装部署手册 - 图42
按照提示走完流程即可完成安装。

5.2添加新的组件

CDH可以在安装时可以选择所需的组件进行安装,不需要安装CDH全量的组件。CDH内包含的组件可以随时添加纳入管理并启用。
点击集群右侧的箭头,选择添加服务即可,后续步骤同安装过程
CDH 6.3.2平台安装部署手册 - 图43

5.3移除节点

移除节点需要停止主机内的所有角色(即所有组件实例)

在CM界面主机列表选择需要移除的节点,选择停止所有角色
CDH 6.3.2平台安装部署手册 - 图44
CDH 6.3.2平台安装部署手册 - 图45
登录服务器停止Cloudera Manager Agent
systemctl stop cloudera-scm-agent
在界面上选择从集群移除和从Cloudera Manager移除

移除节点的时候需要保证集群功能完整,如不能移除所有NameNode或DataNode。为保证集群功能完整,可进行角色迁移。

5.4角色迁移

使用角色迁移,可以在移除或更换节点的时候保证数据不丢失。能够迁移的节点含有NameNode和JournalNode也就是包含元数据的节点。
选择HDFS组件,选择实例,点击迁移角色
CDH 6.3.2平台安装部署手册 - 图46
CDH 6.3.2平台安装部署手册 - 图47
其他的角色可以点击添加角色实例按钮进行添加,或选定实例,点击“已选定的操作”进行删除。