第一次搭建CDH,留个文档记录下出现的问题和学到的东西。主要参考:
【CDH实战01】基于CentOS7的CDH6.3.2完全分布式集群搭建【上】
【CDH实战02】基于CentOS7的CDH6.3.2完全分布式集群搭建【下】
这几篇文章对整个流程做了详细的讲解,感谢作者~
目录
2.2.7 修改Linux swappiness参数(所有节点)
2.2.11 安装MySQL(master节点,本例中node0)
3.3 初始化cloudera-manager-server
1. CDH概述
CDH是Cloudera’s Distribution Including Apache Hadoop的简称,是基于稳定版本的Hadoop组件进行编译的,简单来讲,CDH就是一个拥有集群自动化安装、中心化管理、集群监控、报警功能,用来集中管理Hadoop集群的工具。它简化了大数据平台的安装,缩短集群安装时间,减小运维工作量,极大的提高了集群管理的效率。
2. 安装准备工作
2.1 文件准备
今年2月份开始Cloudera全面下架了免费的安装包下载渠道,未订阅授权的用户无法使用CDH6.3.3和之后的版本,此处使用CDH6.3.2版本进行集群搭建。下图为CDH6.3.2对应的组件版本。
因为使用离线安装的方式,需要提前下载好需要用到的安装包,参考文章的博主提供了下载渠道。
-
百度网盘 链接:https://pan.baidu.com/s/1h65lZ2QKuMD0xT1LNy-JdQ (提取码:amos)
文件列表如下
2.2 服务器准备
本次需要通过VMware建立三台虚拟机作为服务器。
2.2.1 建立虚拟机
选择的操作系统是CentOS 7: CentOS-7-x86_64-DVD-1708.iso ,下载链接来自参考文章。
虚拟机内存和硬盘的分配如下,安装完成之后每个结点占用的硬盘空间在20GB左右,所以在安装虚拟机的时候硬盘分配不能少于30GB,否则会出现空间不足的错误。
首先新建一台2G内存的虚拟机并配置网络,方便进行克隆,之后再修改这台虚拟机内存为6G。网络配置可见:VM虚拟机centOS网络设置 。
结点名称 | 内存大小(G) | 硬盘大小(G) | IP地址 |
node0 | 6 | 60 | 192.168.137.100 |
node1 | 2 | 60 | 192.168.137.101 |
node2 | 2 | 60 | 192.168.137.102 |
将新建的虚拟机进行两次克隆,得到3台虚拟机,修改克隆出来机器的网卡配置。参考文章:CentOS7虚拟机克隆,且成功互ping
删除UUID (文章中说还需要删除MAC地址信息HWADDR,我的ifcfg-ens33中无此信息),并分别修改两台克隆机ip地址为192.168.137.101、192.168.137.102,保存退出,重启网络。(参考文章中提到需要删除/etc/udev/rules.d/70-persistent-net.rules,我的机器中没有这个文件,原因及文件作用暂不深究,发现一相关文章,马克一下:70-persistent-net.rules以及网卡配置详解)
service network restart(或systemctl restart network )
配置好后,试验虚拟机互ping成功 。
2.2.2 设置主机名映射(所有节点)
接下来修改hostname,以192.168.137.101这台机器为例
修改hostname:
hostnamectl set-hostname node1 #修改
hostname #查看
修改 hosts文件:
增加网络映射 ,在文件后增加如下内容
vi /etc/hosts #修改hosts文件
验证能否ping通:
ping -c 4 node2 #尝试ping node2
2.2.3 设置SSH免密登陆(所有节点)
生成密钥对:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa #生成密钥
向其他节点分发密钥 :
ssh-copy-id node1 #分发密钥
yes
密码
测试SSH:
ssh node1 #测试
2.2.4 关闭并禁用防火墙(所有节点)
查看防火墙状态:
systemctl status firewalld #查看防火墙服务运行状态
关闭防火墙 :
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #禁用防火墙开机自启
验证防火墙状态:
systemctl status firewalld #查看防火墙状态为关闭状态
2.2.5 关闭SELINUX(所有节点)
SELINUX相关知识:理解Linux下的SELinux
查看SELINUX状态:
getenforce #查看SELINUX服务的运行状态
关闭SELINUX:
临时关闭
setenforce 0 #临时关闭
永久关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #永久关闭
验证SELINUX状态:
cat /etc/selinux/config #验证
2.2.6 禁用透明大页(所有节点)
透明大页相关知识:
Huge pages (标准大页)和 Transparent Huge pages(透明大页)
查看透明大页的设置和启动状态:
cat /sys/kernel/mm/transparent_hugepage/defrag
cat /sys/kernel/mm/transparent_hugepage/enabled
使用命令查看时,如果输出结果为 [always] 表示透明大页启用了。
[never] 表示透明大页禁用、 [madvise] 表示(只在 MADV_HUGEPAGE 标志的 VMA 中使用 THP 。
关闭透明大页:
临时关闭
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
永久关闭
将临时关闭命令添加到/etc/rc.d/rc.local文件中,并赋予执行权限
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
验证修改 :
cat /etc/rc.d/rc.local
2.2.7 修改Linux swappiness参数(所有节点)
swappiness相关知识:swappiness参数的含义和设置
为了避免服务器使用swap功能而影响服务器性能,一般都会把vm.swappiness修改为0(cloudera建议10以下)
cd /usr/lib/tuned
grep "vm.swappiness" * -R
sed -i s/"vm.swappiness = 30"/"vm.swappiness = 10"/g /usr/lib/tuned/virtual-guest/tuned.conf
2.2.8 安装JDK(所有节点)
注意:CDH的安装 要求使用指定版本的oracle-j2sdk1.8
查询是否有已经安装的jdk:
rpm -qa | grep java
如果之前安装过Java组件,先将其卸载
yum remove java*
我这里没有
上传安装包oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm到/opt目录 :
在准备工作中,把安装包上传到了node0上,使用scp命令将node0上的安装包分发到node1,node2上
SCP相关知识:Linux scp命令
scp oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm node1:/opt/
启动安装 :
rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
查找JDK路径:
find / -name java
配置环境变量:
echo 'export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera' >> /etc/profile
echo 'export PATH=.:$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
source命令相关知识:Linux下source命令详解
验证:
java -version
2.2.9 上传JDBC依赖包(所有节点)
CDH节点管理和记录节点状态时,都是把节点状态保存在MySQL数据库中。
JDBC必须在/usr/share/java目录下,且命名为 mysql-connector-java.jar
创建目录:
mkdir -p /usr/share/java
将mysql-connector-java-8.0.18.jar重命名为mysql-connector-java.jar :
在node0中有已经上传的mysql-connector-java-8.0.18.jar
mv mysql-connector-java-8.0.18.jar mysql-connector-java.jar
将mysql-connector-java.jar移动或复制到每个节点的/user/share/java:
cp mysql-connector-java.jar /usr/share/java/
scp mysql-connector-java.jar node1:/usr/share/java/
...
2.2.10 时间同步
CentOS 7 已经启用chronyd服务保证时间同步,不需要再安装ntpd,查看chronyd状态。
systemctl status chronyd
2.2.11 安装MySQL(master节点,本例中node0)
解压mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
tar Jxvf mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
查询出来已安装的Mariadb:
Mariadb相关知识:Mariadb
rpm -qa|grep mariadb
卸载Mariadb,文件名为上述命令查询出来的文件 :
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
重命名:
mv mysql-8.0.18-linux-glibc2.12-x86_64 mysql
mv mysql /usr/local
创建数据目录:
用来保存MySQL数据
mkdir /usr/local/mysql/data
创建并编辑my.cnf文件:
vi /etc/my.cnf
填入以下内容
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
user=mysql
socket=/tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
log-error=/usr/local/mysql/error.log
pid-file = /usr/local/mysql/mysql.pid
transaction_isolation = READ-COMMITTED
character-set-server = utf8
collation-server = utf8_general_ci
lower_case_table_names = 1
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
创建组:
groupadd mysql
创建用户:
useradd -g mysql mysql
此处组和用户的知识点不太清楚,待以后补充‘:Linux 命令整理 groupadd useradd 详解
修改目录权限:
相关知识:Linux中chown和chmod的区别和用法(转)
将 /opt/mysql给予mysql用户
chown -R mysql:mysql /usr/local/mysql
将/opt/mysql权限设置为755(读4写2执行1)
chmod -R 755 /usr/local/mysql
初始化mysql :
cd /usr/local/mysql
./bin/mysqld --initialize --user=mysql
尝试启动mysql:
cd /usr/local/mysql
./support-files/mysql.server start
将mysql添加为系统服务:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
设置开机启动:
cd /etc/init.d
chmod 755 /etc/init.d/mysql
chkconfig --add mysql
chkconfig --level 345 mysql on
service mysql restart
配置环境变量:
echo 'export MYSQL_HOME=/usr/local/mysql' >> /etc/profile
echo 'export PATH=.:$MYSQL_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
使用默认密码登录MySQL:
找到默认密码:
cd /usr/local/mysql
cat error.log
得到默认密码EyyQoldIr4.?使用默认密码登录,不能在init.d这个路径下输入如下命令,这样会把MySQL当成服务,具体的知识待学习补充,马克一下 Init.d的作用以及如何配置服务自启动(mysql踩坑集锦
mysql -u root -p
在MySQL8中第一次登陆需要重新设置root密码:
ALTER user 'root'@'localhost' IDENTIFIED BY '123456';
开启远程访问:
创建一个root用户,允许任何机器登录
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
允许root用户在任何机器上,访问任何库,任何表(生产中根据情况配置用户和权限)
GRANT ALL ON *.* TO 'root'@'%';
刷新系统权限相关表
FLUSH PRIVILEGES;
尝试登录
mysql -u root -p123456
3 安装CDH
3.1 搭建本地yum源
这里选择把yum源配置在node0节点上
3.1.1 安装并启动Apache http
这里出现了一点波折,因为之前测试配置本地yum源的时候,在所有节点用系统镜像配置过了本地yum,见文章:配置本地yum源,无法直接按下面的方法安装httpd,所以先把所有节点的yum还原成初始设置,进入/etc/yum.repos.d/,删除修改过的CentOS-Media.repo,进入之前备份的bak文件夹,把备份的.repo拷贝出来。
cd /etc/yum.repos.d/
rm CentOS-Media.repo
cd bak
cp CentOS-Media.repo ../
ll
然后清空和重建yum的缓存
yum clean
yum makecache
之后可以在node0节点按如下步骤安装httpd服务
yum install httpd -y #安装Apache http
systemctl start httpd #启动Apache http
systemctl enable httpd #开机自启动Apache http
安装完后可通过IP地址访问
3.1.2 上传CM安装文件
在node0节点完成以下操作,创建安装文件http根目录
mkdir -p /var/www/html/cm6
上传文件到http根目录,上传后查看文件
ll /var/www/html/cm6
在浏览器中也可查看服务器http根目录下的文件。
3.1.3 创建yum仓库
在node0节点完成以下操作
cd /var/www/html/cm6
yum install -y createrepo
createrepo .
3.1.4 配置yum仓库文件
在所有节点完成以下操作
vim /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name=Cloudera Manager 6.3.1
baseurl=http://node0/cm6
gpgcheck=0
enabled=1
autorefresh=0
type=rpm-md
3.1.5 验证
更新仓库信息,确认本地yum源已被添加
yum clean all
yum makecache
3.2 安装服务
3.2.1 安装cm-agent
在所有节点完成以下操作,安装cloudera-manager-agent
执行安装
yum install -y cloudera-manager-agent
执行结果
3.2.2 管理节点安装cm-server
在node0节点完成以下操作,在cm的管理节点(node0)安装 cloudera-manager-server
执行安装
yum install -y cloudera-manager-server
cloudera-manager-server
安装完毕后,会自动创建/opt/cloudera/parcel-repo
目录,将之前下载好的CDH安装包CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
上传到/opt/cloudera/parcel-repo
目录,上传完成后计算校验和
cd /opt/cloudera/parcel-repo
sha1sum CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel | awk '{ print $1 }' > CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
3.3 初始化cloudera-manager-server
3.3.1 在mysql中为CMServer创建数据库
在node0节点完成以下操作
mysql -uroot -p123456
create database cmserver character set 'utf8';
show databases;
exit
3.3.2 执行CM初始化脚本
在node0节点完成以下操作
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql cmserver root 123456
/opt/cloudera/cm/schema/scm_prepare_database.sh 数据库类型 库名 用户 密码
这里有个波折,报时区不一致错误,参考如下文章可解决。
The server time zone value 'EDT' is unrecognized or represents more than one time zone.
3.3.3 启动cm-server服务
在node0节点完成以下操作
启动cm-server服务
systemctl start cloudera-scm-server.service
查看服务运行状态
通过端口监听检查服务启动情况,cm-server默认使用7180端口进行访问
netstat -anp| grep 7180
查看到端口已经正常服务,打开浏览器进入 node0:7180(http://192.168.137.100:7180) (需要配置主机名映射,或者使用ip访问)
账号、密码:admin、admin