0%

CDH 6.3.1 安装

CDH 6.3.1 安装


前言

CDH6集群的完全离线部署

环境要求

安装之前查阅下官方文档的要求

个人关注 操作系统、数据库、JDK 三个点

操作系统

选用 CentOS 7.5

Cloudera Manager和CDH内置嵌入式PostgreSQL数据库,用于非生产环境。生产环境不支持PostgreSQL数据库,必须为集群配置专用外部数据库。

注意:

  • 数据库需要使用UTF8编码。对于MySQL和MariaDB,必须使用UTF8编码,而不是utf8mb4
  • 对于MySQL5.7,必须要额外安装MySQL-shared-compat或者MySQL-shared包

Java要求

支持Oracle 64位JDK8,不支持JDK7,JDK9

安装之前

Host

主机YZ-JDB-106-38-13的名称中有大写字符。在这种情况下,通过Kerberos进行的身份验证将无法正常工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 一定要注意 hostname 不能包含下划线
# 设置唯一主机名

# 修改hostname
hostname yz-100-73-18-59 # 直接修改命令
hostname # 查看修改后的hostname

# 修改网络配置文件
vim /etc/sysconfig/network
HOSTNAME=yz-JDB-106-35-3

# 修改hosts文件
# 把集群所有的ip与对应的hostname
vim /etc/hosts
100.73.41.20 yz-100-73-41-20
100.73.41.21 yz-100-73-41-21
100.73.41.22 yz-100-73-41-22
ssh免密

手动操作如下的代码块所示。 参考自CentOS 配置集群机器之间SSH免密码登录

上图就是SSh免密登陆原理图,从上图可以看出,SSH免密登陆的前提是使用ssh-keygen -t RSA生成公私秘钥对,
然后通过ssh-copy-id -i ~/.ssh/id_rsa.pub user@host命令将公钥分发至远程主机。
接下来的每次免密登陆步骤如下:

  1. 用户使用ssh user@host命令对远程主机发起登陆;
  2. 远程主机对用户返回一个随机串;
  3. 用户所在主机使用私钥对这个随机串进行加密,并将加密的随机串返回至远程主机;
  4. 远程主机使用分发过来的公钥对加密随机串进行解密;
  5. 如果解密成功,就证明用户的登陆信息是正确的,则允许登陆;否则反之。
    通过ssh-copy-id user@host命令分发的公钥都会被保存至远程主机的~/.ssh/authorized_keys文件中。
1
2
3
4
5
6
7
8
9
10
11
12
13
# 集群密码登录
# 集群中的每台主机上执行下面命令,一路回车,可生成本机的 rsa 类型的密钥
ssh-keygen -t rsa
# 执行完之后在 ~/.ssh/ 目录下会生成一个保存有公钥的文件:id_rsa.pub

# 把公钥写入 authorized_keys 文件
# 把自己的公钥拷贝到集群中的Master机
ssh-copy-id root@HadoopMaster

# 最终Master机上生成~/.ssh/authorized_keys文件 该文件保存所有机器的公钥
# 把~/.ssh/authorized_keys 拷贝到集群的其他机器上
scp ~/.ssh/authorized_keys root@HadoopSlave1:~/.ssh/
scp ~/.ssh/authorized_keys root@HadoopSlave2:~/.ssh/
关闭防火墙
1
2
3
4
5
6
7
8
# 查看防火墙
systemctl status firewalld

# 关闭防火墙
systemctl stop firewalld

# 开机禁用
systemctl disable firewalld
禁用 SELinux
1
2
3
4
5
6
7
# 关闭SELINUX
# 临时生效
setenforce 0

# 永久生效
vim /etc/selinux/config
SELINUX=disabled
启用 NTP

集群中所有节点的时间必须要保持同步,可以选择集群中其中一个节点作为ntp服务端,其余节点作为客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 停止影响的服务
systemctl stop chronyd
systemctl disable chronyd

# 安装ntp软件
yum -y install ntp

# 配置主节点ntp配置文件
vim /etc/ntp.conf

driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
restrict default nomodify notrap
server ntp1.aliyun.com prefer
minpoll 6
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys

# 配置其他节点ntp文件,同样修改ntp.conf文件
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
#这里是主节点的主机名或者ip
server cdh-master.test.com
minpoll 6
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys

# 启动ntp服务
systemctl start ntpd

# 查看ntp服务
systemctl status ntpd

# 在其它节点上手动同步主节点的时间,换成你自己的主节点IP
ntpdate -u 192.168.0.201

# 配置开机自启动
systemctl enable ntpd

# 确认是否同步成功
ntpstat (若网络没问题,过一会synchronised to NTP server ...)
ntpq -p (若网络没问题,过一会会看到有一行开头会有个星号)

NTP服务端重启后,客户机要等5分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。

虚拟内存参数设置

需要调整的参数为vm.swappiness,是一个0-100的值,用于控制应用数据从物理内存到磁盘上的虚拟内存的交换,值越高,交换越积极,值越小,交换的次数越少

在大多数Linux系统上,该参数默认值为60,这并不适用于Hadoop集群,因为即使有足够的内存,也可能会进行进程的交换,从而可能会影响Hadoop的性能和稳定性

1
2
3
4
5
6
7
8
# 查看当前该项参数值
cat /proc/sys/vm/swappiness

# 修改该项参数值(临时生效)
sysctl -w vm.swappiness=0

# (重启后永久生效)
echo vm.swappiness = 0 >> /etc/sysctl.conf
禁用 tuned 服务

如果您的群集主机正在运行RHEL / CentOS 7.x,请通过运行以下命令禁用”tuned”服务

1
2
3
4
5
6
7
8
9
10
11
12
13
# 确保tuned服务已开启
systemctl start tuned

# 关闭tuned服务
tuned-adm off

# 确保没有已激活的配置
tuned-adm list
如果输出内容中包含No current active profile表示关闭成功

# 关闭并且禁用tuned服务
systemctl stop tuned
systemctl disable tuned

官方文档Disable the tuned Service

禁用 THP

大多数Linux平台都包含一个名为transparent hugepages的功能,该功能可能会严重降低Hadoop集群的性能

在root权限下,使用以下命令

1
2
3
4
5
# 检查THP是否启用
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag

输出[always] never意味着THP已启用,always [never]意味着THP未启用

该图就表示THP已启用

要禁用透明大页面,请在所有群集主机上执行以下步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 编辑文件,最下面添加两行配置,重启服务器生效
vim /etc/rc.d/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 赋予/etc/rc.d/rc.local文件可执行权限
chmod +x /etc/rc.d/rc.local

# 修改GRUB配置, 仅RHEL/CentOS 7.x需要进行该项操作
# 在GRUB_CMDLINE_LINUX项目后面添加一个参数
vim /etc/default/grub
transparent_hugepage=never

# 执行命令
grub2-mkconfig -o /boot/grub2/grub.cfg

还可以使用以下命令即刻生效禁用透明的大页面, 但请记住,重新启动后它将失效

1
2
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

官方文档介绍Disabling Transparent Hugepages (THP)

安装 mysql5.7

CDH 对 MySQL 有一些限制,具体如下

  1. MySQL 默认的 datadir 目录是/var/lib/mysql,要确保该目录存在的分区有足够的空间。
  2. 如果 MySQL 启用了 GTID 复制,会导致 Cloudera Manager 安装失败。
  3. 数据库需要使用UTF8编码。对于MySQL和MariaDB,必须使用UTF8编码,而不是utf8mb4
  4. 对于MySQL5.7,必须要额外安装 MySQL-shared-compat 或者 MySQL-shared 包,因为 Cloudera Manager Agent 包的安装依赖这两个

只需要在集群中某一个节点上安装即可

我这选用MySQL 5.7.25

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 首先卸载操作系统可能会自带的mariadb-libs
yum -y remove mariadb-libs

解压mysql rpm-bundle tar包
tar -zxvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar

# 开始安装mysql, 一定要按照下面的顺序来安装,否则会安装不成功
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm #(安装Cloudera Manager6需要)

# 启动mysql服务
systemctl start mysqld
# 如果无法启动,则需要修改mysql数据目录所有者:chown -R mysql:mysql /var/lib/mysql/

# 查看root用户初始密码
grep password /var/log/mysqld.log

1
2
3
4
5
6
7
8
9
10
11
12
13
# 登录mysql修改root密码
mysql -uroot -p
# 如果密码复杂度不够,则会禁止修改,默认密码规则为:包含数字、大小写字母、特殊字符,同时还有长度要求
# 可以通过修改全局参数来解决,但是还是要求密码长度至少为8位
mysql> set global validate_password_policy=0;
mysql> set password = password('12345678');

# 设置远程登录权限
mysql> grant all privileges on *.* to 'root'@'%' identified by '12345678';
mysql> flush privileges;

# 修改mysql数据库默认编码
查看原数据库编码:mysql> SHOW VARIABLES LIKE 'char%';可以看到数据库和服务端的编码都还不是utf8:

编辑/etc/my.cnf文件,在[mysqld]下面添加一行character-set-server=utf8

重启mysql服务:systemctl restart mysqld,再次登录数据库查看编码,修改成功

这里我贴出我的 my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
transaction-isolation = READ-COMMITTED
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
symbolic-links = 0
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
character-set-server = utf8
#expire_logs_days = 10
#max_binlog_size = 100M
#log_bin should be on a disk with enough free space.
#Replace '/var/lib/mysql/mysql_binary_log' with an appropriate path for your
#system and chown the specified folder to the mysql user.
log_bin=/var/lib/mysql/mysql_binary_log
#In later versions of MySQL, if you enable the binary log and do not set
#a server_id, MySQL will not start. The server_id must be unique within
#the replicating group.
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
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_ALL_TABLES

安装 CM

文件下载

准备 CM 和 CDH 文件

CM6.3.1

CDH6.3.1

ASC文件

repo 文件

同时还需要下载一个repo 文件、asc文件,同样保存到 Cloudera Manager 目录下

Cloudera Manager 目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cm6.3.1
├── allkeys.asc
├── cloudera-manager.repo
├── repodata
│   ├── 3662f97de72fd44c017bb0e25cee3bc9398108c8efb745def12130a69df2ecb2-filelists.sqlite.bz2
│   ├── 43f3725f730ee7522712039982aa4befadae4db968c8d780c8eb15ae9872cd4d-primary.xml.gz
│   ├── 49e4d60647407a36819f1d8ed901258a13361749b742e3be9065025ad31feb8e-filelists.xml.gz
│   ├── 8afda99b921fd1538dd06355952719652654fc06b6cd14515437bda28376c03d-other.sqlite.bz2
│   ├── b9300879675bdbc300436c1131a910a535b8b5a5dc6f38e956d51769b6771a96-primary.sqlite.bz2
│   ├── e28836e19e07f71480c4dad0f7a87a804dc93970ec5277ad95614e8ffcff0d58-other.xml.gz
│   ├── repomd.xml
│   ├── repomd.xml.asc
│   └── repomd.xml.key
├── RPM-GPG-KEY-cloudera
├── RPMS
│   ├── noarch
│   └── x86_64
│   ├── 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
│   ├── enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm
│   └── oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
└── SRPMS

sha文件得重命名下,去掉末尾的数字

1
mv CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha1 /var/www/html/cdh6_parcel/CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha

CDH 目录

1
2
3
4
cdh6.3.1
├── CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel
├── CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha
└── manifest.json
搭建 yum 库
1
2
3
4
5
6
# 安装 httpd
yum -y install httpd

# 启动httpd服务并设置开机自启动
systemctl start httpd
systemctl enable httpd

将 Cloudera Manager 目录、CDH 目录移动到 httpd 的 html 目录下

1
2
mv cm6.3.1  /var/www/html
mv cdh6.3.1 /var/www/html

修改 repo 文件, {host}改为对应IP

1
2
3
4
5
[cloudera-manager]
name=Cloudera Manager 6.3.1
baseurl=http://{host}/cm6.3.1
gpgcheck=0
enabled=1

复制 repo 文件到 yum 文件夹

1
cp cloudera-manager.repo /etc/yum.repos.d

启动httpd服务并准备好目录之后浏览器打开 http://{host}/cm6.3.1 即可看到

清除yum缓存,查看机器是否识别

1
2
yum clean all 
yum list | grep cloudera
安装

在CM Server节点上操作

1
yum -y install cloudera-manager-server
jdbc 驱动

下载mysql-connector-java-5.1.47.tar.gz

解压出mysql-connector-java-5.1.47-bin.jar文件

将 mysql-connector-java-5.1.47-bin.jar 文件上传至 CM Server节点上的 /usr/share/java/ 目录下并重命名为mysql-connector-java.jar(如果/usr/share/java/目录不存在,需要手动创建):

1
2
3
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
创建CDH所需要的数据库

根据所需要安装的服务参照下表创建对应的数据库以及数据库用户,数据库必须使用utf8编码,创建数据库时要记录好用户名及对应密码

我这里就创建 cm 所需要的数据库

1
2
3
4
5
6
7
8
9
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm';

# 查看授权是否正确
SHOW GRANTS FOR 'scm'@'%';

# 查看数据库和服务端的编码是不是utf8
SHOW VARIABLES LIKE 'char%';

设置数据库

Cloudera Manager Server包含一个配置数据库的脚本

传参格式 scm_prepare_database.sh <db.type> <db.name> <db.user>

mysql数据库与CM Server是同一台主机

1
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm

mysql数据库与CM Server不在同一台主机上

1
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h <mysql-host-ip> --scm-host <cm-server-ip> scm scm

在 CM 服务所在服务器,可以看到/etc/cloudera-scm-server/db.properties文件有相应数据

安装CDH节点

启动 Server 服务
1
systemctl start cloudera-scm-server

然后等待Cloudera Manager Server启动,可能需要稍等一会儿

1
2
3
4
5
# 查看 server 端口、可能需要稍等一会儿
netstat -anlp | grep 7180

# 查看 server 服务状态,active 说明正常
systemctl status cloudera-scm-server

如果启动报错,通过 /var/log/cloudera-scm-server/cloudera-scm-server.log 日志文件去查看状态

访问 WEB 界面

打开浏览器,访问地址:http://:7180,默认账号和密码都为 admin


参考链接