# CDH安装
参考资料:
- CDH6.3.2离线安装 (opens new window)
- 基于CentOS7的CDH6.3.2完全分布式集群搭建 (opens new window)
- CDH6.3.0 报错汇总 (opens new window)
# 环境配置
所有节点修改主机名
hostnamectl set-hostname cdh01
hostnamectl set-hostname cdh02
hostnamectl set-hostname cdh03所有节点设置hosts映射信息
vi /etc/hosts
192.168.25.10 cdh01
192.168.25.11 cdh02
192.168.25.12 cdh03所有节点关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld所有节点关闭SeLinux
# 查看selinux状态,如果输出为enforcing,则需要关闭 getenforce vi /etc/selinux/config SELINUX=enforcing修改为SELINUX=disabled # 或者 sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config # 立即生效 setenforce 0
1
2
3
4
5
6
7
8
9所有节点配置免密登录。
ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub cdh02 ssh-copy-id -i ~/.ssh/id_rsa.pub cdh03
1
2
3所有节点设置swap空间
# 查看当前内存和swap使用情况,如果swap分区不为0,则可跳过这步 free -h cat /proc/swaps # 开启关闭swap swapon -a swapoff -a # swap大小设置推荐 # 4G以内的物理内存,SWAP 设置为内存的2倍。 # 4-8G的物理内存,SWAP 等于内存大小。 # 8-64G 的物理内存,SWAP 设置为8G。 # 64-256G物理内存,SWAP 设置为16G。 # 查看使用swap的规则阈值 # swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间。 # swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。 cat /proc/sys/vm/swappiness # 临时修改 sysctl vm.swappiness=0 # 永久修改,在/etc/sysctl.conf 文件里添加如下参数: vm.swappiness=0 # 使用文件作为交换分区 # 生成swap-file,大小为1G dd if=/dev/zero of=/swap-file bs=1M count=1024 # 将交换文件格式化为swap分区,记录UUID mkswap /swap-file Setting up swapspace version 1, size = 8388604 KiB no label, UUID=e7d93441-2606-4cd0-a5bd-c983f579d6cb # 永久生效,配置/etc/fstab,更新UUID,新增/swap-file配置 UUID=e7d93441-2606-4cd0-a5bd-c983f579d6cb /swap-file swap swap defaults 0 0 # 启动交换分区 swapon /swap-file
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下面是第二种方法:
# 查看当前交换大小 cd /usr/lib/tuned grep "vm.swappiness" * -R # 临时修改 # 查看当前内核参数 sysctl vm.swappiness # 临时修改 sysctl vm.swappiness=10 # 查看修改后内核参数 sysctl vm.swappiness # 永久修改 sed -i s/"vm.swappiness = 30"/"vm.swappiness = 10"/g /usr/lib/tuned/virtual-guest/tuned.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14关闭透明大页面压缩。
# 临时关闭 echo never > /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled grep Huge /proc/meminfo #永久关闭 echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local
1
2
3
4
5
6
7
8
9NTP服务安装,Hadoop对集群中各个机器的时间同步要求比较高,要求各个机器的系统时间不能相差太多,不然会造成很多问题。可以配置集群中各个机器和互联网的时间服务器进行时间同步,但是在实际生产环境中,集群中大部分服务器是不能连接外网的,这时候可以在内网搭建一个自己的时间服务器(NTP服务器),集群的各个机器与这个时间服务器进行时间同步。我们选择其中一个节点cdh01机器作为NTP服务器,其他机器和它自动同步。
# 安装ntp yum -y install ntp # 时间同步配置 vi /etc/ntp.conf # 主节点指向NTP服务器 server http://ntp.aliyun.com # 从节点指向主节点 server cdh01 # 重新启用ntp服务器,并设置开机启动 service ntpd restart systemctl enable ntpd.service # 查看和测试 ntpdc -c loopinfo #查看与时间同步服务器的时间偏差 ntpq -p #查看当前同步的时间服务器 ntpstat #查看状态定时同步crontab # 查看时区 ls -l /etc/localtime timedatectl list-timezones # 设置时区 timedatectl set-timezone Asia/Hong_Kong
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 配置源
因为我们使用的离线版,需要把cdh的安装包缓存导入进来。
安装httpd,createrepo
yum install -y httpd createrepo service httpd start #开机自启 systemctl enable httpd 或者chkconfig httpd on
1
2
3
4
5将缓存复制到各个目录
cd /var/www/html/ mkdir cm6 cdh6 # 复制cdh相关 cp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel /var/www/html/cdh6/ cp manifest.json /var/www/html/cdh6/ # 复制cm相关的 cp cloudera-manager-* /var/www/html/cm6/ cp enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm /var/www/html/cm6 cp oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm /var/www/html/cm6
1
2
3
4
5
6
7
8
9
10
11创建yum源
cd /var/www/html/cm6 createrepo . cat >> /etc/yum.repos.d/cm.repo << EOF [CM] name=cm6 baseurl=http://cdh01/cm6/ gpgcheck=0 EOF yum clean all yum repolist
1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装
所有节点需要安装下前置依赖包:
yum install -y bind-utils libxslt cyrus-sasl-plain cyrus-sasl-gssapi portmap fuse-libs /lib/lsb/init-functions httpd mod_ssl openssl-devel python-psycopg2 Mysql-python fuse
# 主节点安装
我们默认把cdh01当作主节点。
安装cloudera-manager和agent
#安装JDK yum install -y oracle-j2sdk1.8.x86_64 #安装cloudera-manager yum install -y cloudera-manager-agent cloudera-manager-daemons cloudera-manager-server cloudera-manager-server-db-2 postgresq-server
1
2
3
4安装Mariadb
#安装 yum install -y mariadb-server #启动和开机自启 systemctl start mariadb && systemctl enable mariadb #配置Mariadb数据库 mysql_secure_installation #可以在遇[Y/n]输入y设置密码 [账号/密码:root/root]
1
2
3
4
5
6初始化管理节点数据库
mkdir -p /usr/share/java # 这一步在主节点上好像不需要 cp /root/mysql-connector-java-5.1.34.jar /usr/share/java/mysql-connector-java.jar(这里需要分发到所有节点) # 执行数据库初始脚本 /opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h localhost -uroot -proot --scm-host localhost scm root root # 注意:初始化完成之后,登录的root账号的密码变成了root,可以根据scm_prepare_database.sh脚本分析出来
1
2
3
4
5
6
# 从节点安装
我们在cdh02和cdh03的从节点上安装:
安装agent
yum install -y oracle-j2sdk1.8.x86_64 #安装agent yum install cloudera-manager-daemons cloudera-manager-agent -y
1
2
3
# 配置启动
下面是所有节点需要做的操作:
修改配置文件
# 修改Cloudera Agent配置文件/etc/cloudera-scm-agent/config.ini,配置server_host为主节点cdh01 vi /etc/cloudera-scm-agent/config.ini server_host=cdh01 # 也可以通过sed命令修改(推荐) sed -i "s/server_host=localhost/server_host=cdh01/g" /etc/cloudera-scm-agent/config.ini
1
2
3
4
5配置JAVA_HOME
vi /etc/profile #add for JAVA_HOME export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera/ export PATH=$PATH:$JAVA_HOME/bin
1
2
3
4启动CDH
启动Cloudera Manager(cdh01)
# 启动服务 service cloudera-scm-server start # 或者如下 systemctl start cloudera-scm-server # 设置开机自启 chkconfig cloudera-scm-server on # 或者如下 systemctl enable cloudera-scm-server
1
2
3
4
5
6
7
8
9启动Cloudera Agent(所有节点)
# 启动 service cloudera-scm-agent start # 或者如下 systemctl start cloudera-scm-agent # 设置开机自启 chkconfig cloudera-scm-agent on # 或者如下 systemctl enable cloudera-scm-agent
1
2
3
4
5
6
7
8
9
# Web界面配置
访问http://ip:7180来进行web配置。
将远程url设置为
http://cdh01/cdh6/
1配置如下组件
配置下数据库
mysql -uroot -proot create database hive default charset utf8; create user 'hive'@'%' identified by '123456'; grant all on hive.* TO 'hive'@'localhost' identified by '123456'; grant all on hive.* TO 'hive'@'%' identified by '123456'; flush privileges; create database oozie default charset utf8; grant all on oozie.* TO 'oozie'@'%' identified by '123456'; flush privileges; create database hue default charset utf8; grant all on hue.* TO 'hue'@'%' identified by '123456'; flush privileges; create database reports default charset utf8; grant all on reports.* TO 'reports'@'%' identified by '123456'; flush privileges; create database activitylog default charset utf8; create user 'activitylog'@'%' identified by '123456'; grant all on activitylog.* TO 'activitylog'@'localhost' identified by '123456'; grant all on activitylog.* TO 'activitylog'@'%' identified by '123456'; flush privileges;
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
# 其他问题
# 纠删码策略警告
会提示Erasure Coding Policy Verification Test,纠删码策略是HDFS集群提供的数据恢复的安全机制,出现这个警告是因为当前的HDFS集群DataNode节点数不满足当前所配置的纠删码策略需要的最小主机数。
- RS-3-2-1024k策略需要至少5台DataNode节点
- RS-6-3-1024k策略需要至少9台DataNode节点
- RS-10-4-1024k策略需要至少14台DataNode节点
如果无法满足最低的5台DataNode节点要求,所以可以选择关闭纠删策略。
# 金丝雀
会提示HDFS Canary,在重启HDFS集群后,由于NameNode加载镜像时会进入安全模式,所以会出现创建临时文件失败的情况。解决办法是自己可以恢复。
# JobHistory启动失败
因权限受据,JobHistory启动失败。
sudo -u hdfs hdfs dfs -chmod -R 777 /