1 安装包下载
安装介质外网下载地址如下:
链接: https://pan.baidu.com/s/1dyvSej5tSrUC4ja8-usqvA 提取码: a9hx
2 cdh集群安装
2.1 上传压缩包
上传cdh6.3.2.tar安装包到linux服务器,并解压
tar -xvf cdh6.3.2.tar -C /tmp/
2.2. 组件安装
-
expect安装
配置目的:安装 expect 命令,实现脚本交互
# 在所有节点上安装
yum install expect -y
-
pstree安装
配置目的:rhel 7 默认没有pstree命令,使用以下命令进行安装,cdh基础依赖。
# 在所有节点上安装
yum install psmisc -y
-
perl 安装
配置目的:解决最小安装时,客户端部署报错,在最小化安装的时候是没有安装perl的。
#所有节点
yum install perl -y
-
httpd服务安装
配置目的:本地源配置使用
#所有节点
yum install httpd mod_ssl -y
-
kudu 需要以下组件
配置目的:kudu依赖
#所有节点
yum install gcc python-devel -y
yum install cyrus-sasl* -y
2.3 调整host文件
配置目的:域名访问
# 在所有节点执行,替换为自己环境实际ip与hostname
cat >> /etc/hosts <<EOF
192.168.88.220 worker-1
192.168.88.221 worker-2
192.168.88.222 worker-3
EOF
2.4 关闭selinux访问控制
配置目的:不关闭会导致安装时通信失败
# 在所有节点执行
grep ^SELINUX= /etc/selinux/config
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
getenforce
2.5 关闭iptables
配置目的:关闭防火墙,不关闭会导致节点间通信端口不通
# 在所有节点上执行
systemctl disable firewalld
systemctl stop firewalld
2.6 ssh互信
配置目的:配置互信,节点间ssh免密。
生成秘钥
#所有节点
ssh-keygen -t rsa
- 在主节点上执行
#逐条执行
ssh-copy-id root@worker-1
ssh-copy-id root@worker-2
ssh-copy-id root@worker-3
- 主节点执行
scp ~/.ssh/authorized_keys root@worker-2:/root/.ssh/
scp ~/.ssh/authorized_keys root@worker-3:/root/.ssh/
验证ssh效果
- 调整系统使用swap的策略
配置目的:调整系统使用swap的策略,设置为1,即最大限度使用物理内存,少使用swap空间
#所有节点执行
#检查当前设置值
sysctl -a | grep vm.swappiness
echo 1 > /proc/sys/vm/swappiness
sysctl -a | grep vm.swappiness
#更改默认配置
cat >> /etc/sysctl.conf <<EOF
vm.swappiness=1
EOF
#设置立即生效
sysctl vm.swappiness=1
#设置下次启动生效
cat >> /etc/rc.d/rc.local <<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
#配置即刻生效
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
#检查配置是否生效
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
#赋予执行权限
chmod 755 /etc/rc.d/rc.local
2.7 透明大页
cat >> /etc/rc.d/rc.local <<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
# 使用设置马上生效
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 检查设置是否生效
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
# 赋予执行权限
chmod 755 /etc/rc.d/rc.local
2.8 修改sudoers
配置目的:sudo相关
#所有节点执行
unalias cp
cp -n /etc/sudoers /etc/sudoers.bak && \
cp -f /etc/sudoers.bak /etc/sudoers && \
chmod 740 /etc/sudoers && \
sed -i 's/^\(Defaults requiretty\)/# \1/g' /etc/sudoers && \
chmod 440 /etc/sudoers
grep requiretty /etc/sudoers
2.9 配置ntp时间同步
配置目的:在安全认证的时候需要保证每个节点的时间同步,如果不同步则offerset过大,进而影响安全认证,比如凭证生命周期过期,在后面kerberos的原理部门会讲到sessionkey,这个就是一个较短声明周期的key,如果节点间时间差距较大,则直接导致key失败。
# 所有节点执行,安装ntp服务
yum install ntp -y
# 主节点执行,在主节点中设置本地地址,注意只能使用ip
mv -n /etc/ntp.conf /etc/ntp.conf.bak
cat > /etc/ntp.conf << EOF
server 127.127.1.0
fudge 127.127.1.0 stratum 10
EOF
# 从节点执行,且只能填写ip不能使用hostname,对应的ip为主节点的ip地址
mv -n /etc/ntp.conf /etc/ntp.conf.bak
cat > /etc/ntp.conf << EOF
server 192.168.88.220 iburst
EOF
# 禁用chronyd服务,会导致ntpd服务无法开机启动
systemctl disable chronyd
# 所有节点启动ntp服务
chmod 644 /etc/ntp.conf
systemctl restart ntpd.service
systemctl status ntpd.service
systemctl enable ntpd.service
# 检查ntp是否生效
ntpdate -u 192.168.88.220
ntpq -p
- ntp安装
- 主节点配置
- 从节点配置
- 禁用chronyd
- 服务启动
- 服务检查
调整后
2.10 安装jdk
配置目的:Java必不可少
# 所有节点执行
#安装jdk 在我们的cdh安装包中
cd /tmp/
# 包分发到其他节点上
scp oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm root@worker-2:/tmp/
scp oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm root@worker-3:/tmp/
# 所有节点执行
cd /tmp/
yum install oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm -y
ln -s /usr/java/jdk1.8.0_181-cloudera /usr/java/latest
# 配置环境变量
cat >> /etc/profile <<EOF
export JAVA_HOME=/usr/java/latest
export JRE_HOME=\$JAVA_HOME/jre
export CLASSPATH=.:\$CLASSPATH:\$JAVA_HOME/lib:\$JRE_HOME/lib
export PATH=\$PATH:\$JAVA_HOME/bin:\$JRE_HOME/bin
EOF
#source环境变量及验证是否生效
source /etc/profile
java -version
2.11 安装、配置mysql
- 方式一(海牛商城部署时要使用)
# 部署方式与linux阶段部署方式一致
cd /opt
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
yum install -y mysql-community-server
vim /etc/my.cnf
datadir=/data/mysql/data
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
log-error=/data/mysql/log/mysqld.log
mkdir -p /data/mysql/data
mkdir -p /data/mysql/log
mysqld --initialize
# cat /data/mysql/log/mysqld.log | grep password 查看初始化密码
chown -R mysql:mysql /data/mysql
systemctl start mysqld.service
mysql -uroot -p
# 输入初始化密码
# 修改密码
set password=PASSWORD('Congf1daof4');
- 方式二(生产中常见方式)
#主节点执行即可
#安装mariadb软件
#所有的都删除掉
rpm -qa | grep mysql
#安装
yum install -y mariadb
yum install -y mariadb-server
#启动
systemctl enable mariadb
systemctl start mariadb
#初始化配置
mysql_secure_installation
2.12 创建cm元数据库
Cloudera manager service的元库
登陆mysql,创建数据库与用户,以及远程授权。
mysql -uroot -p
create database metastore default character set utf8;
create user 'hive'@'%' identified by 'hivedemima';
grant all privileges on metastore.* to 'hive'@'%';
create database cm default character set utf8;
create user 'cm'@'%' identified by 'cmdemima';
grant all privileges on cm.* to 'cm'@'%';
create database am default character set utf8;
create user 'am'@'%' identified by 'amdemima';
grant all privileges on am.* to 'am'@'%';
create database rm default character set utf8;
create user 'rm'@'%' identified by 'rmdemima';
grant all privileges on rm.* to 'rm'@'%';
create database hue default character set utf8;
create user 'hue'@'%' identified by 'huedemima';
grant all privileges on hue.* to 'hue'@'%';
create database oozie default character set utf8;
create user 'oozie'@'%' identified by 'ooziedemima';
grant all privileges on oozie.* to 'oozie'@'%';
create database sentry default character set utf8;
create user 'sentry'@'%' identified by 'sentrydemima';
grant all privileges on sentry.* to 'sentry'@'%';
create database nas default character set utf8;
create user 'nas'@'%' identified by 'nasdemima';
grant all privileges on nas.* to 'nas'@'%';
create database nms default character set utf8;
create user 'nms'@'%' identified by 'nmsdemima';
grant all privileges on nms.* to 'nms'@'%';
flush privileges;
exit;
2.13 配置http服务
配置本地的http,用于parcels配置,安装过程中使用本地的parcels,而不是使用在线安装。
#主节点安装
#安装及开启http服务
yum install httpd -y
systemctl start httpd
systemctl enable httpd
systemctl status httpd
#主节点执行
#配置http服务
#移动两个文件夹到html目录下
mkdir -p /var/www/html/cm6.3.1
mkdir -p /var/www/html/cdh6.3.2
cd /tmp
mv CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel* manifest.json /var/www/html/cdh6.3.2/
mv allkeys.asc cloudera-manager-* enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm /var/www/html/cm6.3.1/
- 使用浏览器测试访问
- 创建cm的repo
创建cdh介质的本地源,在yum安装的时候使用本地库,避免在线安装(速度慢还经常断)。
#主节点执行 baseurl改成我们上面配置的cm的http地址
yum install createrepo -y
cd /var/www/html/cm6.3.1
createrepo .
cat > /etc/yum.repos.d/cloudera.repo <<EOF
[Cloudera_Manager]
name=Cloudera Manager 6.3.1
baseurl=http://worker-1/cm6.3.1/
enabled=1
gpgcheck=0
EOF
yum clean all
yum repolist
2.14 安装CDH6
复制mysql的连接驱动,并创建软连接,在初始化元数据库时需要使用到mysql的连接驱动。mysql的驱动包可以在maven官方下载或者在本地的maven库中找。
maven仓库官方链接:
#所有节点
#复制MySQL的JDBC包
mkdir /usr/share/java
#主节点执行
scp /tmp/mysql-connector-java-5.1.35.jar root@worker-2:/tmp/
scp /tmp/mysql-connector-java-5.1.35.jar root@worker-3:/tmp/
#所有节点执行
mv /tmp/mysql-connector-java-5.1.35.jar /usr/share/java/
ln -s /usr/share/java/mysql-connector-java-5.1.35.jar /usr/share/java/mysql-connector-java.jar
-
安装CM服务
安装cm(Cloudera manager server)服务,安装完成后,在cm界面部署cdh集群。
在安装的过程中可以看到repository列,是否是我们上面本地yum源,如果不是,速度会非常慢,甚至失败。
#只在主节点执行
yum install cloudera-manager-server -y
-
初始化CM元数据库
初始化cm的元库,初始化完成后会建立cm服务使用的表,可以在mysql中查看,这里的-h参数是部署mysql服务的节点地址,两个cm是库名与用户名
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h 192.168.88.220 cm cm cmdemima
- 启动cm服务
主节点启动cm服务,这个服务可能要启动一会儿,当启动完成后,可以通过netstat -apn | grep 7180监控到端口占用情况,也可以通过tail -f的方式监控cm启动日志,当出现started的时候,表示启动完成。
#主节点执行
systemctl start cloudera-scm-server
systemctl status cloudera-scm-server
#检查端口状态
yum install net-tools -y
netstat -apn | grep 7180
2.15 网页登陆
在cm web页面中配置cdh集群。
登录cloudera manager管理页面,默认的账号、密码为:admin/admin
"同意协议" -> "选择Cloudera Express" -> "选择节点" -> ...
这里的主机名称为你要配置的所有节点的hostname,需要在你本机的hosts中也配置了这些节点。
集群安装时库选择,这里使用的就是我们前面配置的httpd服务,使用本地下载,避免在线安装的各种问题。域名改成自己相应的域名。
parcel的远程安装库为:http://worker-1/cdh6.3.2/
agent的远程安装库为:http://worker-1/cm6.3.1/
如上,当正确填写完parcel地址后,会自动识别出cdh版本,否则……,重新检查在配置httpd服务的时候是否已经执行createrepo.
接下来就会安装cdh的agent节点,如下
当agent安装完成后,会进入到安装parcels的界面,这里也是自动进行的,如果中间出现各种错误,可以查看日志定位,在web界面上就可以看到错误日志,也可以在cm的日志中查找,/var/log目录下Cloudera manager server的日志。常见的问题没有正确配置本地源会导致下载失败、分配失败可以优先检查互信配置与hosts配置,过了下载和分配后如果解压失败则优先检查磁盘空间,激活没遇到过失败的。
如上激活完成后,跳转到检查环境的缓解,点击如下标红位置分别检查网络与hosts,检查通过后才可以继续,如果是单节点安装,在hosts检查的时候会报错,此时选择i understand the risks,let me continue with cluster setup选项 然后点击继续。
如上,环境检查完成后,进行选择安装组件的环节,可以先选择一些基础组件安装,后面需要什么组件在添加即可。比如可以先安装hdfs、hive、hue、yarn、zookeeper,其他服务等集群全部安装完成后再集成,因为部分组件间有依赖关系,如果缺少了依赖,那会导致安装失败。
如上选择好安装组件后点击继续,为每个服务配置节点,如果是单节点就没得选择了,在生产环境中这个规划通常在角色规划中已经规划好,按照架构设计配置即可,通常我们会选择一个管理节点,这个管理节点上部署一些管理服务,其他计算与存储节点上不部署管理服务,如果节点资源紧张也可以在管理节点上部署存储与计算服务,还有一种极端的情况就是节点资源都很紧张,那面就要把服务尽量均衡到每个节点上,除个别服务,比如hive的元库肯定部署在和mysql相同的节点上。
如上完成节点配置后点击继续,进入到元库配置环节,这里配置的信息即我们在12. 创建cm元数据库时创建的那些库的信息,配置完成后点击test connection,只有测试通过后才可以继续。
如上配置完元库信息并通过连接测试后,点击继续,进入服务详细配置界面,如果选择了安装kudu服务,则需要填写四个kudu的目录,如下,
Kudu在安装时需要填写以下几项内容:
Kudu Master WAL Directory: /kudu_master/fs_wal_dir
Kudu Master Data Directories: /kudu_master/fs_data_dirs
Kudu Tablet Server WAL Directory: /kudu_tablet/fs_wal_dir
Kudu Tablet Server Data Directories: /kudu_tablet/fs_data_dirs
这四个目录,通常与hdfs的盘分离(官方也没有给出为什么,但是在生产中确实遇到过kudu与hdfs同盘导致服务不能启动的问题),我们在测试学习环境下可以设置在一起,如果要使用虚拟机分盘则需要再添加一块虚拟盘,挂载在指定目录下,专门给kudu使用。
生产环境下肯定是配置非常多的数据盘,在配置dfs目录的时候可以点击后面的+增加盘路径(如果所有盘都挂载到了一个目录下,那就不用增加了)
如上配置完成后点击继续,开始服务的安装,如下:
如上,服务全部安装完成后,会进入到cm界面,如下,此时集群安装就完成了。
2.16 单机版问题解决
单点部署时HDFS 副本不足告警:Under-Replicated Blocks,这个警告的意思是在一个节点上部署分布式毫无意义,他们希望至少要有三个节点。
针对这种情况,我们就修改 dfs.replication 参数为1(在hdfs组件的配置中搜索replication),然后执行以下命令将所有文件副本数设置为1:
sudo -u hdfs hadoop fs -setrep -R 1 /
2.17 开启HA
- hdfs组件操作下拉按钮中选择启用high availability
- 填写nameservice名称,比如我们在开源版本中配置的ns1,其实就是这个。
- 选择secondnamenode与journalnode节点,journalnode节点必须是大于等于3且奇数个。
- 配置数据目录
- HA生效
在开启HA的过程中如果hdfs非空,会在格式化的时候报一个警告,因为非空所以格式化失败,不用理会,也不敢理会。
- 验证HA
- 切换active
使用命令切换active
hdfs haadmin -ns wa -failover worker-3 worker-2
3 cdh单机安装
需要配置:12G内存、CPU核数8核,磁盘:80G
本次安装不用阿里云yum源
3.1 修改主机名和安装常用工具
# 修改主机名
hostnamectl set-hostname worker-1
# sz, rz工具
yum install -y lrzsz vim firewalld wget
3.2 上传压缩包
上传cdh6.3.2.tar安装包到linux服务器,并解压
tar -xvf cdh6.3.2.tar -C /tmp
3.3 组件安装
-
expect安装
配置目的:安装 expect 命令,实现脚本交互
expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。
yum install expect -y
-
pstree安装
配置目的:rhel 7 默认没有pstree命令,使用以下命令进行安装,cdh基础依赖。
pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁
yum install psmisc -y
-
perl 安装
配置目的:解决最小安装时,客户端部署报错,在最小化安装的时候是没有安装perl的。
perl命令是perl语言解释器,负责解释执行perl语言程序
yum install perl -y
-
httpd服务安装
配置目的:本地源配置使用
yum install httpd mod_ssl -y
-
kudu 需要以下组件
配置目的:kudu依赖
yum install gcc python-devel -y
yum install cyrus-sasl* -y
3.3 调整host文件
配置目的:域名访问
# 替换为自己环境实际ip与hostname
cat >> /etc/hosts <<EOF
192.168.142.247 worker-1
EOF
3.4 关闭selinux访问控制
配置目的:不关闭会导致安装时通信失败
# 查看关闭状态
/usr/sbin/sestatus -v
# 关闭方法:
# 修改
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
# 临时关闭selinux(无需重启),从 enforcing(强制模式:拦截访问) 到 permissive(宽容模式:不拦截访问)
setenforce 0
# 查看当前模式
getenforce
# 修改后查看
grep ^SELINUX= /etc/selinux/config
修改前:
修改后:
3.5 关闭防火墙
配置目的:关闭防火墙,不关闭会导致节点间通信端口不通
# 禁止防火墙开机启动
systemctl disable firewalld
# 关闭防火墙
systemctl stop firewalld
#查看服务是否开机启动
systemctl is-enabled firewalld.service
3.6 ssh互信
配置目的:配置互信,节点间ssh免密。
1)生成秘钥
ssh-keygen -t rsa
2)将你的公共密钥填充到一个远程机器上的authorized_keys文件中
# 主节点执行
ssh-copy-id root@worker-1
验证ssh效果
3.7 调整系统使用swap的策略和禁止透明大页
1)调整系统使用swap的策略
配置目的:调整系统使用swap的策略
#检查当前设置值
sysctl -a | grep vm.swappiness
# 设置为1,即最大限度使用物理内存,少使用swap空间
echo 1 > /proc/sys/vm/swappiness
sysctl -a | grep vm.swappiness
#更改默认配置
cat >> /etc/sysctl.conf <<EOF
vm.swappiness=1
EOF
#设置立即生效
sysctl vm.swappiness=1
2)禁止透明大页
#禁止“透明大页面”,若启用“透明大页面”,可能会导致重大的性能问题
cat >> /etc/rc.d/rc.local <<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
# 使用设置马上生效
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 检查设置是否生效
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
# 赋予执行权限
chmod 755 /etc/rc.d/rc.local
3.8 修改sudoers
配置目的:sudo相关
将当前用户切换到超级用户下,或切换到指定的用户下。
然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户。
具体工作过程如下:
当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
–>确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认。
–>若密码输入成功,则开始执行sudo后续的命令。
# 取消别名
unalias cp
# 备份sudoers 文件
cp -n /etc/sudoers /etc/sudoers.bak && \
chmod 740 /etc/sudoers && \
sed -i 's/Defaults requiretty/#Defaults requiretty/g' /etc/sudoers && \
chmod 440 /etc/sudoers
grep requiretty /etc/sudoers
3.9 配置ntp时间同步【重要】
配置目的:在安全认证的时候需要保证每个节点的时间同步,如果不同步则offerset过大,进而影响安全认证,比如凭证生命周期过期,在后面kerberos的原理部门会讲到sessionkey,这个就是一个较短声明周期的key,如果节点间时间差距较大,则直接导致key失败。
# 安装ntp服务
yum install ntp -y
# 设置本地地址,注意只能使用ip,ip不变
mv -n /etc/ntp.conf /etc/ntp.conf.bak
cat > /etc/ntp.conf << EOF
server 127.127.1.0
fudge 127.127.1.0 stratum 10
EOF
# 禁用chronyd服务,否则会导致ntpd服务无法开机启动
systemctl disable chronyd
# 启动ntp服务
chmod 644 /etc/ntp.conf
systemctl restart ntpd.service
systemctl status ntpd.service
systemctl enable ntpd.service
# 检查ntp是否生效
ntpdate -u 192.168.88.24
ntpq -p
# 检查ntp服务是否正常
ntptime
# 如果执行ntptime后显示的结果不是ok,那重启npt服务
systemctl start ntpd.service
# 如何同步网络时间
ntpdate -u time1.aliyun.com # 同步aliyun服务器时间
ntpdate -u time.nist.gov # 美国微软公司的时间自动同步服务器的域名
配置时区:
[root@worker-1 ~]# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa
2) Americas
3) Antarctica
4) Arctic Ocean
5) Asia
6) Atlantic Ocean
7) Australia
8) Europe
9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? 5
Please select a country.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
9
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1
The following information has been given:
China
Beijing Time
Therefore TZ='Asia/Shanghai' will be used.
Local time is now: Mon Dec 13 12:02:25 CST 2021.
Universal Time is now: Mon Dec 13 04:02:25 UTC 2021.
Is the above information OK?
1) Yes
2) No
#? 1
You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
#把 TZ='Asia/Shanghai'; export TZ 加到/etc/profile 里,并source
# 用 date -R 查看
3.10 安装jdk
配置目的:Java必不可少
#安装jdk 在我们的cdh安装包中
cd /tmp
yum install oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm -y
ln -s /usr/java/jdk1.8.0_181-cloudera /usr/java/latest
# 配置环境变量
cat >> /etc/profile <<EOF
export JAVA_HOME=/usr/java/latest
export JRE_HOME=\$JAVA_HOME/jre
export CLASSPATH=.:\$CLASSPATH:\$JAVA_HOME/lib:\$JRE_HOME/lib
export PATH=\$PATH:\$JAVA_HOME/bin:\$JRE_HOME/bin
EOF
#source环境变量及验证是否生效
source /etc/profile
java -version
3.11 安装和配置mysql
下载地址:https://downloads.mysql.com/archives/community/
https://downloads.mysql.com/archives/get/file/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar
# 由于网络原因,本课程采用离线安装方式
# 解压安装包
mkdir /opt/tools/mysql
tar -xf mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar -C /opt/tools/mysql
# 删除系统自带的MySQL-libs
yum remove -y mysql-libs
# 安装server时要依赖
yum install -y net-tools
# 离线安装
rpm -vih /opt/tools/mysql/mysql-community-common-5.7.22-1.el7.x86_64.rpm
rpm -vih /opt/tools/mysql/mysql-community-libs-5.7.22-1.el7.x86_64.rpm
rpm -vih /opt/tools/mysql/mysql-community-client-5.7.22-1.el7.x86_64.rpm
rpm -vih /opt/tools/mysql/mysql-community-server-5.7.22-1.el7.x86_64.rpm
rpm -ivh /opt/tools/mysql/mysql-community-libs-compat-5.7.22-1.el7.x86_64.rpm
# 启动MySQL
systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld
# cat /var/log/mysqld.log | grep password 查看初始化密码
# 登录
mysql -uroot -p
# 输入初始化密码
# 设置校验密码的长度
set global validate_password_policy=LOW;
# 修改密码
set password=PASSWORD('12345678');
# 修改my.cnf,默认在/usr/my.cnf,执行:vim /etc/my.cnf,添加如下内容:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character_set_server=utf8
# 重启生效
systemctl restart mysqld
3.12 创建cm元数据库
Cloudera manager service的元库
登陆mysql,创建数据库与用户,以及远程授权。
mysql -uroot -p12345678
set global validate_password_policy=LOW;
create database metastore default character set utf8;
create user 'hive'@'%' identified by 'hivedemima';
grant all privileges on metastore.* to 'hive'@'%';
create database cm default character set utf8;
create user 'cm'@'%' identified by 'cmdemima';
grant all privileges on cm.* to 'cm'@'%';
create database am default character set utf8;
create user 'am'@'%' identified by 'amdemima';
grant all privileges on am.* to 'am'@'%';
create database rm default character set utf8;
create user 'rm'@'%' identified by 'rmdemima';
grant all privileges on rm.* to 'rm'@'%';
create database hue default character set utf8;
create user 'hue'@'%' identified by 'huedemima';
grant all privileges on hue.* to 'hue'@'%';
create database oozie default character set utf8;
create user 'oozie'@'%' identified by 'ooziedemima';
grant all privileges on oozie.* to 'oozie'@'%';
create database sentry default character set utf8;
create user 'sentry'@'%' identified by 'sentrydemima';
grant all privileges on sentry.* to 'sentry'@'%';
create database nas default character set utf8;
create user 'nas'@'%' identified by 'nasdemima';
grant all privileges on nas.* to 'nas'@'%';
create database nms default character set utf8;
create user 'nms'@'%' identified by 'nmsdemima';
grant all privileges on nms.* to 'nms'@'%';
flush privileges;
exit;
3.13 配置httpd服务
配置本地的http,用于本地parcel配置,安装过程中使用本parcel,而不是使用在线安装。
#安装及开启http服务
yum install httpd -y
systemctl start httpd
systemctl enable httpd
systemctl status httpd
#配置http服务
# 将cdh的文件分别mv到http服务对应的目录内
mkdir -p /var/www/html/cm6.3.1
mkdir -p /var/www/html/cdh6.3.2
cd /tmp
mv CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel* manifest.json /var/www/html/cdh6.3.2/
mv allkeys.asc cloudera-manager-* enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm /var/www/html/cm6.3.1/
使用浏览器测试访问(先配置windo1ws 的 hosts):
创建cm的repo
创建cdh介质的本地源,在yum安装的时候使用本地库,避免在线安装(速度慢还经常断)。
#主节点执行 baseurl改成我们上面配置的cm的http地址
yum install createrepo -y
# 基于 /var/www/html/cm6.3.1 目录创建本地yum源
cd /var/www/html/cm6.3.1
createrepo .
# 只需改name和baseurl
cat > /etc/yum.repos.d/cloudera.repo <<EOF
[Cloudera_Manager]
name=Cloudera Manager 6.3.1
baseurl=http://worker-1/cm6.3.1/
enabled=1
gpgcheck=0
EOF
yum clean all
yum repolist
3.14 安装CDH6
复制mysql的连接驱动,并创建软连接,在初始化元数据库时需要使用到mysql的连接驱动。mysql的驱动包可以在maven官方下载或者在本地的maven库中找。
maven仓库官方链接:
#复制MySQL的JDBC包
mkdir /usr/share/java
#所有节点执行
mv /tmp/mysql-connector-java-5.1.35.jar /usr/share/java/
ln -s /usr/share/java/mysql-connector-java-5.1.35.jar /usr/share/java/mysql-connector-java.jar
安装CM服务
安装cm(Cloudera manager server)服务,安装完成后,在cm界面部署cdh集群。
在安装的过程中可以看到repository列,是否是我们上面本地yum源,如果不是,速度会非常慢,甚至失败。
yum install cloudera-manager-server -y
初始化CM元数据库
初始化cm的元库,初始化完成后会建立cm服务使用的表,可以在mysql中查看,这里的-h参数是部署mysql服务的节点地址,两个cm是库名与用户名
# 语法格式: mysql -h ip 数据库名 用户名 密码
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h 192.168.88.32 cm cm cmdemima
启动cm服务
主节点启动cm服务,这个服务可能要启动一会儿,当启动完成后,可以通过netstat -apn | grep 7180监控到端口占用情况,也可以通过tail -f的方式监控cm启动日志,当出现started的时候,表示启动完成。
# 启动cm
systemctl start cloudera-scm-server
# 查看cm状态
systemctl status cloudera-scm-server
#检查端口状态
netstat -apn | grep 7180
查看日志
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
3.15 网页登陆
在cm web页面中配置cdh集群。
登录cloudera manager管理页面,默认的账号、密码为:admin/admin
"同意协议" -> "选择Cloudera Express"
-> "选择节点" -> ...
这里的主机名称为你要配置的所有节点的hostname,需要在你本机的hosts中也配置了这些节点。
安装时库选择,这里使用的就是我们前面配置的httpd服务,使用本地下载,避免在线安装的各种问题。域名改成自己相应的域名。
parcel的远程安装库为:http://worker-1/cdh6.3.2/
agent的远程安装库为:http://worker-1/cm6.3.1/
选择后,页面展示
JDK安装选项不勾选
如上,当正确填写完parcel地址后,会自动识别出cdh版本,否则……,重新检查在配置httpd服务的时候是否已经执行createrepo.
当agent安装完成后,会进入到安装parcels的界面,这里也是自动进行的,如果中间出现各种错误,可以查看日志定位,在web界面上就可以看到错误日志,也可以在cm的日志中查找,/var/log目录下Cloudera manager server的日志。常见的问题没有正确配置本地源会导致下载失败、分配失败可以优先检查互信配置与hosts配置,过了下载和分配后如果解压失败则优先检查磁盘空间,激活没遇到过失败的。
如上激活完成后,跳转到检查环境的页面,点击如下标红位置分别检查网络与hosts,检查通过后才可以继续,单节点安装,在hosts检查的时候会报错,此时选择i understand the risks,let me continue with cluster setup选项 然后点击继续。
如上,环境检查完成后,进行选择安装组件的环节,可以先选择一些基础组件安装,后面需要什么组件再添加即可。比如可以先安装hdfs、hive、hue、yarn、zookeeper,其他服务等集群全部安装完成后再集成,因为部分组件间有依赖关系,如果缺少了依赖,那会导致安装失败。
如上选择好安装组件后点击继续,为每个服务配置节点,如果是单节点就没得选择了,在生产环境中这个规划通常在角色规划中已经规划好,按照架构设计配置即可,通常我们会选择一个管理节点,这个管理节点上部署一些管理服务,其他计算与存储节点上不部署管理服务,如果节点资源紧张也可以在管理节点上部署存储与计算服务,还有一种极端的情况就是节点资源都很紧张,那面就要把服务尽量均衡到每个节点上,除个别服务,比如hive的元库肯定部署在和mysql相同的节点上。
如上完成节点配置后点击继续,进入到元库配置环节,这里配置的信息即我们在12. 创建cm元数据库时创建的那些库的信息,配置完成后点击test connection,只有测试通过后才可以继续。
如上配置完元库信息并通过连接测试后,点击继续,进入服务详细配置界面,如果选择了安装kudu服务,则需要填写四个kudu的目录,如下,
Kudu在安装时需要填写以下几项内容:
Kudu Master WAL Directory: /kudu_master/fs_wal_dir
Kudu Master Data Directories: /kudu_master/fs_data_dirs
Kudu Tablet Server WAL Directory: /kudu_tablet/fs_wal_dir
Kudu Tablet Server Data Directories: /kudu_tablet/fs_data_dirs
这四个目录,通常与hdfs的盘分离(官方也没有给出为什么,但是在生产中确实遇到过kudu与hdfs同盘导致服务不能启动的问题),我们在测试学习环境下可以设置在一起,如果要使用虚拟机分盘则需要再添加一块虚拟盘,挂载在指定目录下,专门给kudu使用。
生产环境下肯定是配置非常多的数据盘,在配置dfs目录的时候可以点击后面的+增加盘路径(如果所有盘都挂载到了一个目录下,那就不用增加了)
如上配置完成后点击继续,开始服务的安装,如下:
如上,服务全部安装完成后,会进入到cm界面,如下,此时集群安装就完成了。
3.16 单机版问题解决
单点部署时HDFS 副本不足告警:Under-Replicated Blocks,这个警告的意思是在一个节点上部署分布式毫无意义,他们希望至少要有三个节点。
针对这种情况,我们就修改 dfs.replication 参数为1(在hdfs组件的配置中搜索replication),并重启配置使其生效。
然后将已经有三个副本的文件递归修改副本数,执行以下命令将所有文件副本数设置为1:
sudo -u hdfs hadoop fs -setrep -R 1 /
错误状态解除
3.17 配置yarn资源
配置前可以看yarn webui,发现资源分配不合理,需要手动配置。
1)配置内存
修改以下配置:
# mapper任务内存
mapreduce.map.memory.mb: 1G
# reducer任务内存
mapreduce.reduce.memory.mb: 1G
# yarn容器内存
yarn.nodemanager.resource.memory-mb : 60G
2)配置CPU核
修改以下配置:
# mapper任务虚拟CPU核数
mapreduce.map.cpu.vcores: 1
# reducer任务虚拟CPU核数
mapreduce.reduce.cpu.vcores: 1
# yarn容器虚拟CPU核数
# 【注意】:在生产环境里,1个cup核 对应 4G的内存。
yarn.nodemanager.resource.cpu-vcores : 15
# yarn容器最大虚拟CPU核数
yarn.scheduler.maximum-allocation-vcores 15
4)修改调度器内存数
修改以下配置:
# yarn容器最大内存
yarn.scheduler.maximum-allocation-mb 60G
配置好后重新更新配置。
查看yarn-webui资源情况
3.18 cdh安装问题及解决方法汇总
3.18.1 NFS启动失败
解决方法:
# 要启动rpcbind
# 安装:
yum install nfs-utils rpcbind
# 查看状态:
systemctl status rpcbind.service
# 启动:
systemctl start rpcbind.service
3.18.2 安装Cloudera Manager报错
有时候安装cloudera会报socket.gaierror: [Errno -2] Name or service not known,或者服务器可能IP或mac地址冲突会引发次错误。导致机器服务不能正常运行和重装。
解决方法:
删除/usr/bin/host文件即可解决问题
3.18.3 启动 JobHistoryServer 报错
有时候启动yarn时 jobhistory 历史服务起不来,看日志详细信息后,发现mapred没有/user 的写入权限
解决方法:
sudo -u hdfs hadoop fs -chmod 777 /user