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和对应的主机名
注意不要把localhost给注释掉。
2.5关闭防火墙
2.6关闭selinux
临时:setenforce 0
永久:(重启后生效)
/etc/selinux/config
selinux=disabled
2.7设置服务器间互相免密登录
所有节点输入ssh-keygen命令生成密钥,一直回车即可
选择其中一个节点,将公钥写入authorized_keys文件中
其他节点将公钥写入此节点的authorized_keys文件中
将此节点的authorized_keys文件分发给所有节点
2.8 设置ntp时间同步
2.9设置swap
所有节点 vim /etc/sysctl.conf
添加 vm.swappiness = 10
查看是否生效 sysctl -p
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/目录下创建一个文件
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-versionmkdir /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和agentyum 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
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
transaction-isolation = READ-COMMITTED
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_size = 64M
query_cache_type = 1
max_connections = 550
log_bin=/var/lib/mysql/mysql_binary_log
server_id = 1
binlog_format = mixed
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
#InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
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
安装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
GRANT ALL ON
服务 | 数据库 | 用户 |
---|---|---|
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
提示如下,表示设置成功。
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
提示
则启动成功,
4.2登录Cloudera Manager安装CDH
浏览器登录Cloudera Manager 地址为cm server的ip,端口为7180,初始用户名密码为admin admin
选择免费版
添加所有的host,这里输入ip、host全名(FQDN)、host短名都可以
点击更多选项More Options
删去外网环境的远程库,添加之前建的本地远程库
http://83.249.174.84/cloudera-repos/cdh6
选择自定义存储库
输入cm的地址
http://83.249.174.84/cloudera-repos/cm6
JDK部分不要勾选
这里有个单用户模式,不要勾选,跳过
提供集群登录方式,可以使用用户名密码,也可以使用私钥文件
点击继续开始安装
(正常情况是所有节点,这里漏掉了一个,应该是前面添加节点的时候node1出了问题。但没关系,集群安装完成之后可以针对node1单独安装)
成功后继续,然后会进行一个检查
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 |
设置数据库
选择数据库安装的节点、数据库类型,输入数据库名、用户名、密码。点击测试连接,通过后进入下一步
然后有一些目录设置完成后开始安装组件
安装成功
添加新节点(把node1加上)
安装完成后,在主界面点击
选择一个服务组件点击实例,为node1分配角色,有的组件可能需要删除角色后再添加,有的则可以迁移。
重新启动
4.4开启高可用
选择Zookeeper组件,点击右侧操作按钮,选择添加角色实例,
将node2-4设置为Zookeeper Server
选择HDFS组件,点击右侧的操作按钮,选择启用 HA
将 node 2-3设置为 NameNode
将 node 2-4 设置为 JournalNode
停止hive 更新Hive Metastore Namenode
5. 集群扩容缩容
5.1添加新的节点
向集群添加新的节点首先需要完成第二节的环境准备工作,包括系统配置、免密通信、主机名、NTP等。还需要更新所有节点的hosts列表,将新添加的主机名写入。
第二步,新添加的主机完成第三节 3.1配置CM和CDH本地库和3.2 安装JDK。3.3安装Cloudera Manager 中只需安装 daemon和agent。
第三步,登录Cloudera Manager管理页面,在主机栏选择添加主机Add hosts
可以选择纳入Cloudera Manager管理后续再加入或者直接加入集群
后续步骤同第四节CDH的安装,
这里的角色分配模式不同,需要选择一个模版。我们可以自定义一个模版或者选择无,后续再进行角色分配。建议按照之前的规划,给不同的节点类型创建模版,例如工作节点,添加HBase Region Server、DataNode、NodeManager.
按照提示走完流程即可完成安装。
5.2添加新的组件
CDH可以在安装时可以选择所需的组件进行安装,不需要安装CDH全量的组件。CDH内包含的组件可以随时添加纳入管理并启用。
点击集群右侧的箭头,选择添加服务即可,后续步骤同安装过程
5.3移除节点
移除节点需要停止主机内的所有角色(即所有组件实例)
在CM界面主机列表选择需要移除的节点,选择停止所有角色
登录服务器停止Cloudera Manager Agent
systemctl stop cloudera-scm-agent
在界面上选择从集群移除和从Cloudera Manager移除
移除节点的时候需要保证集群功能完整,如不能移除所有NameNode或DataNode。为保证集群功能完整,可进行角色迁移。
5.4角色迁移
使用角色迁移,可以在移除或更换节点的时候保证数据不丢失。能够迁移的节点含有NameNode和JournalNode也就是包含元数据的节点。
选择HDFS组件,选择实例,点击迁移角色
其他的角色可以点击添加角色实例按钮进行添加,或选定实例,点击“已选定的操作”进行删除。