Centos7.5离线搭建CDH6.3

环境:CentOS 7.5, CDH 6.3

本文记录在 CentOS 7.5 下完全离线部署 CDH 6.3 的完整过程。之前搭建过 CDH 5.x,每次都会遇到一些问题,这次把 6.x 的搭建过程记录下来。

一、搭建前的环境准备

1. 版本与依赖要求

  • 操作系统:RHEL 7.27.5 / CentOS 7.27.5(64 位)
  • Python:2.7+(安装 Hue 需要,不支持 Python 3)、perl、python-psycopg2 2.5.4+
  • Java:仅支持 Oracle 64 位 JDK 8(最低 1.8u31,推荐 1.8u74+)
  • 数据库:生产环境需外部数据库,MySQL 5.7 或 MariaDB 5.5/10.0;库表必须使用 UTF8 编码(不要用 utf8mb4)
  • MySQL 5.7 需额外安装 MySQL-shared-compat 或 MySQL-shared 包
  • 浏览器:Chrome 63+ / Firefox 59+ / IE 11+ / Edge 41+

2. 网络与安全配置(所有节点)

设置唯一主机名并配置 hosts:

hostnamectl set-hostname <主机名>          # 每台节点唯一
vim /etc/hosts # 写入集群所有主机名与 IP,禁止大写、禁止重复 IP

注意:CDH 不支持 IPv6,建议在系统层面禁用。

禁用防火墙:

systemctl stop firewalld
systemctl disable firewalld

SELinux 设为 permissive:

getenforce          # enforcing 才需要改
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
setenforce 0

3. 时间同步 NTP(所有节点)

集群时间必须同步:选一个节点做 NTP 服务端,其余节点做客户端。

yum -y install ntp
systemctl start ntpd && systemctl enable ntpd
# 客户端向服务端同步(服务端 IP 如 192.168.2.10)
ntpdate -u 192.168.2.10

4. 安装 JDK 8(所有节点)

cd /opt
wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
tar -zxvf jdk-8u202-linux-x64.tar.gz

~/.bashrc 添加环境变量:

export JAVA_HOME=/opt/jdk1.8.0_202   # 换成自己的解压目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source ~/.bashrc
java -version

5. 局域网 Yum 源

安装 CM 需要大量依赖,建议先在集群内某节点搭一个局域网 Yum 源(如用 httpd + createrepo,或 FTP 方式),后续所有节点都指向它。

二、准备离线安装包

  1. CDH Parcel 包(放到 CM Server 的 parcel-repo):CDH-6.0.1-1.cdh6.0.1.p0.590678-el7.parcel 及 manifest.json
  2. Cloudera Manager RPM 包(cm6/6.3.1,从 archive.cloudera.com 下载到 /opt/cloudera-repos):
cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-server-db-2-6.3.1-1466458.el7.x86_64.rpm
oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm # 约 176MB
  1. MySQL 驱动:mysql-connector-java-5.1.47.tar.gz

三、搭建本地 CM Yum 源(CM Server 节点)

不要尝试用 FTP 搭建 CM 的 Yum 库。

yum -y install httpd createrepo
systemctl start httpd && systemctl enable httpd
cd /opt/cloudera-repos
createrepo .
mv cloudera-repos /var/www/html/

浏览器验证:http://<server-ip>/cloudera-repos/ 能看到 RPM 列表即可。

在 CM Server 节点创建 repo 文件:

vim /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name=Cloudera Manager 6.3.1
baseurl=http://<server-ip>/cloudera-repos/
gpgcheck=0
enabled=1
yum clean all && yum makecache

四、安装 Cloudera Manager

yum install -y cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server

五、配置 Parcel 存储库

将 CDH Parcel 与 manifest.json 上传到 CM Server 的 /opt/cloudera/parcel-repo/:

cd /opt/cloudera/parcel-repo
sha1sum CDH-6.0.1-1.cdh6.0.1.p0.590678-el7.parcel | awk '{print $1}' > CDH-6.0.1-1.cdh6.0.1.p0.590678-el7.parcel.sha
chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo/*

六、配置 MariaDB / MySQL

1. 安装并启动

yum -y install mariadb-server
systemctl start mariadb && systemctl enable mariadb

2. 修改配置 /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
transaction-isolation = READ-COMMITTED
symbolic-links = 0
key_buffer = 16M
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_limit = 8M
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_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

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d

重启生效:systemctl restart mariadb

3. 安装 JDBC 驱动(CM Server 节点)

tar zxvf mysql-connector-java-5.1.47.tar.gz
mkdir -p /usr/share/java/
cp mysql-connector-java-5.1.47-bin.jar /usr/share/java/mysql-connector-java.jar

4. 创建 CDH 所需数据库

按需创建数据库及对应用户(UTF8 编码):

CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm';
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'amon';
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'rman';
GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'hive';
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie';
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'hue';
FLUSH PRIVILEGES;

5. 初始化 CM 数据库

/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
# 输入 scm 用户的密码,看到 Started Jetty server 前耐心等待

七、启动 CM 并安装 CDH

systemctl start cloudera-scm-server
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log

看到日志输出 Started Jetty server 后,浏览器访问:

http://<server-ip>:7180     # 默认账号/密码:admin / admin

Web 界面操作要点:

  1. 选择要安装的集群机器;
  2. 若只有一台机器,选「基础安装」,把所有角色分配到这一台上;
  3. 填写之前准备好的 MySQL 库信息;
  4. 等待各服务安装完成 —— 单机部署时中间可能因 GC 导致步骤失败,多试几次即可;
  5. Parcel 分发与激活在 Web 界面完成。

八、集群优化参考

备注

  • 安装完成后如需要可重新启用 SELinux(改回 enforcing 并 setenforce 1)。
  • 生产环境不建议使用内置 PostgreSQL,务必使用本文的外部数据库方案。