CDH6.3.2安装文档

正式安装之前,先说明一下CDH是基于Apache Hadoop及相关项目的发行版。CDH通过WEB界面管理,并提供了hadoop的两个核心功能:可扩展存储和分布式计算,以及企业级的重要功能。CDH是遵循Apache-licensed的开源软件,提供了基于hadoop的批处理、交互SQL、交互查询、基于角色的访问控制。

而Cloudera Manager是一个专属于并管理CDH集群的工具。Cloudera Manager通过向CDH集群的每个部分提供细粒度的可见性及可控性,建立出一套企业部署标准,这可以提高性能、服务质量、遵从性并降低管理成本。使用Cloudera Manager,您可以轻松地部署和集中操作完整的CDH堆栈和其他托管服务。Cloudera Manager提供一个集群范围的实时的主机和服务运行视图;提供一个单独的中央控制台,用于在整个集群中执行配置更改,并整合了一整套报告和诊断工具,以便优化硬件性能和利用率。

在管理工具上和hdp不同,可以理解为hdp是低定制保留了大部分原生特色的集群解决方案,而cdh恰恰相反,甚至在使用组件时都需要使用特定的cdh版本。


安装环境

虚拟机 Workstation pro 15
操作系统 CentOS Linux 7.4
JDK 1.8.0_144
Cloudera Manager 6.3.1
CDH 6.3.2
服务器总计4台,三台做大数据集群,一台做CDH管理节点,每台资源5核数24G内存50G磁盘,本篇作为测试环境安装,如果大家正式使用建议酌情扩大

CDH安装包可从网盘下载链接:https://pan.baidu.com/s/1FfcwxyqB5QjPrkDEBB5gag?pwd=9lm1
提取码:9lm1


开始安装

1、系统服务

所有节点禁用系统的防火墙、关闭selinux服务和ssh检查是否任然有StrictHostKeyChecking检查
systemctl disable firewalld.service
systemctl stop firewalld.service
selinux配置文件:/etc/selinux/config
ssh配置文件:/etc/ssh/ssh_config


2、配置域名映射,编辑/etc/hosts
在这里插入图片描述


3、配置SSH免密

直接使用套件,点击超链接查看配置方式


4、集群之间同步时间

Linux系统同步时间的方法


5、所有节点安装JDK

a) 注意,CDH官方对Cloudera JDK的安装时有要求,所以你要自己决定你用那种JAVA-JDK,正常来说,推荐不要使用自己的JDK,使用rpm安装我在网盘中的oracle-jdk,因为CDH常常识别不到自定义的JDK,即使你的JDK是官方推荐的1.8.181

The JDK must be 64-bit. Do not use a 32-bit JDK.
The installed JDK must be a supported version as documented in Java Requirements.
The same version of the Oracle JDK must be installed on each cluster host.
The JDK must be installed at /usr/java/jdk-version.

大致的意思就是说,JDK必须时64位1.8的,而且需要放在指定的目录下,且目录名必须是jdk+版本号组成,例如jdk1.8.0_162,否则会因无法识别jdk而无法启动cloudera-scm-server。

b) 将大家自己准备好的JDK的包,上传到各节点并解压缩到/usr/java/目录下,注意必须是/usr/java这个目录

c) 配置java环境变量,在/etc/profile中添加如下内容,注意使用自己的版本

export JAVA_HOME=/usr/java/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

d) source /root/.bash_profile

e) 将jdk推送给其它节点

scp -r jdk1.8.0_162/ n1:/usr/java/jdk1.8.0_162
scp -r jdk1.8.0_162/ n2:/usr/java/jdk1.8.0_162
scp -r jdk1.8.0_162/ n3:/usr/java/jdk1.8.0_162

f) 在各节点执行java -version测试java


6、所有节点配置swappiness、关闭透明大页面压缩、删除虚拟路由

a) 执行sysctl vm.swappiness=10,改变运行时的参数
打开/etc/sysctl.conf文件,添加vm.swappiness=10条目,然后sysctl -p生效修改

b) 执行下面两句话,改变运行时参数
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
并将这两句话添加到/etc/rc.local文件中,以便重启后生效

c) 运行ifconfig查看你的路由信息,如果你发现信息中除了lo、ens33这两条信息之外,还有一条字母lb开头,具体名字没截图,的网卡路由那么意味着你存在着虚拟路由,我们不需要它,不过一般是没有的

这个时候,yum安装下面的包

yum install -y qumu-kvm* libvirt* virt-install* bridge-utils

运行下面两条命令,删除虚拟路由

virsh net-destroy default
virsh net-undefine default

7、在cm节点配置本地yum源

a) 所有节点,进入 /etc/yum.repos.d/ 目录下,把里面系统自带的repo文件存放到一个备用目录下

b) 回到cm节点,创建/etc/yum.repos.d/base.repo文件,并增加如下内容源到repo文件中

[Local_ISO]
name=Loacal ISO
baseurl=file:///mnt
gpgcheck=0
enabled=1

c) 把你安装系统时用的iso文件上传到cm节点,并执行命令将系统iso文件临时挂在到/mnt目录

mount 系统iso文件 /mnt

这一步是因为我们为了防止干扰安装,把系统原来的yum源文件备份移走了,但是后续需要一些依赖,巧的是这些依赖在系统iso文件里面有,所有在安装CDH的时候需要临时的挂在一下,不过后面启动的时候如果没有挂载的话可能启动不起来,所以可以像我另一篇HDP安装中的yum源那样把iso中的东西放到yum上,放的时候注意我写的HDP文档中用的是httpd服务,所以不要混淆,整体上你只需要把iso的东西cp出来,随后增加一个repo文件就行,HDP安装–》https://blog.csdn.net/dudadudadd/article/details/124909664

d) 上传大家自己准备好的createrepo的rpm文件到cm节点的/root/files/中,并执行命令安装

yum -y localinstall createrepo包路径

CDH6.3.2安装文档_第1张图片
e) 在cm节点创建/root/rpms路径,将我给大家分享的网盘中的所有文件除了oracle-java-jdk都上传到该路径下,注意虽然分享给大家的是三个目录,但是上传的时候上传到同一目录下,不要再细分目录了,这是上传的一个坑,如果你要使用自己的JAVA-JDK,那就不要上传oracle-java-jdk,想前面步骤那样,事先额外的安装好,不然安装cms服务时会加载到oracle-java-jdk会和自己安装好的jdk冲突,导致后果就是主服务起不来,查看系统日志会发现CDH一直报错找不到JDK。。。如果你要使用oracle-java-jdk,也不要直接上传到/root/rpms下,同样的把我给大家分享的oracle-java-jdk事先上传到其他目录,额外的用rpm -ivh安装

f) 在cm节点执行createrepo -d /root/rpms,重新执行该命令后需执行yum clean all清空之前的索引,运行createrepo命令的时候,需要在root目录下,不然rpms目录不会生成到yum路径中,这一点我也有些费解,大家注意一下
CDH6.3.2安装文档_第2张图片
g) 在cm节点的/etc/yum.repos.d/base.repo文件中增加如下内容

[Local_RPM]
name=Loacal RPM
baseurl=http://cm:10040/rpms
gpgcheck=0
enabled=1

h) 在其余节点上,同样把系统光盘挂载到mnt目录中

i) 将cm节点的base.repo文件推送到其余节点/etc/yum.repos.d/目录中

j) 使用python的web服务模块,在cm节点的/root/rpms路径下执行命令,启动yum本地源服务

python -m SimpleHTTPServer 10040

8、在cm节点安装Mysql

a) 打开SimpleHTTPServer服务之后,会话保持即可,我们新打开一个cm的连接会话,检查并卸载cm节点原有的mysql相关文件

rpm -qa | grep -i mysql
rpm -ev --nodeps 上面命令的执行结果列表
find / -name mysql,手工删除查找结果。查找结果举例:/var/lib/mysql、/usr/lib/mysql、/usr/lib64/mysql、/usr/include/mysql、/etc/my.cnf

b)使用yum从本地源中安装Mysql,正常情况下需要把所有的mysql包都安装,不过这里演示作用,就没有安装其他的,大家安装的时候要全安

yum -y install mysql-community-server mysql-community-client

CDH6.3.2安装文档_第3张图片
c) 根据实际需要考虑是否修改/etc/my.cnf配置文件,一般不用特意更改

d) 设置MySQL开机启动并启动MySQL

systemctl enable mysqld.service
systemctl start mysqld.service
systemctl status mysqld.service

e) 执行grep password /var/log/mysqld.log获得初始密码,例如下图中末尾的那一串密码
在这里插入图片描述
f) 执行mysql_secure_installation命令,对MySQL做基础配置

Securing the MySQL server deployment.

Enter password for user root: 输入初始密码

The existing password for the user account root has expired. Please set a new password.

New password: 输入新密码,例如Root123!

Re-enter new password: Root123!
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

g) 进入mysql,使用命令show variables like “%char%”; 检查字符集是否为utf8,如果不是改过来
CDH6.3.2安装文档_第4张图片
h) JDBC链接
所有节点,创建/usr/share/java目录,将mysql-connector-java-5.1.47.jar文件上传至该目录,并重命名为mysql-connector-java.jar

i) 进入Mysql数据库中,运行下面的语句,创建好需要的库和用户,密码自己改成自己希望的

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 hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;  
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;  
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;  
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;  
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;  
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;  
CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;  

GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'Wangyang123!';  
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'Wangyang123!';  
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'Wangyang123!';  
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'Wangyang123!';  
GRANT ALL ON metastore.* TO 'metastore'@'%' IDENTIFIED BY 'Wangyang123!';  
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'Wangyang123!';  
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY 'Wangyang123!';  
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY 'Wangyang123!';  
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'Wangyang123!';  
GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'Wangyang123!'; 

flush privileges;

9、cm节点安装Cloudera Manager

a) 在cm节点安装服务

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

b) 在cm节点初始化数据库,注意密码

/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm Wangyang123!

这里强调一点,并不是非要Mysql和Manager服务在同一节点上,大家可以网上了解一下初始化数据库的命令参数

CDH6.3.2安装文档_第5张图片
c) systemctl start cloudera-scm-server启动服务,并且每隔几秒查看/var/log/cloudera-scm-server/cloudera-scm-server.log文件后几行,服务启动的可能有些慢,大家需要持续关注,直到中途不报错,而且出现INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.这条信息就代表服务启动成功,在浏览器中访问cm节点的7180端口,账号密码均为admin,登录CDH管理页面
CDH6.3.2安装文档_第6张图片
这里注意,下面的步骤进行时如果服务器频繁报CPU进程软锁死的错误,那就不要强求进行下去了,因为这个错误表示你的服务器环境配置不够,处理性能不够,报错信息类似下方这样

kernel:NMI watchdog: BUG: soft lockup - CPU#1 stuck for 22s! [java:1858]

这种情况和我们常说的宕机差不多,主要是因为CDH集群内部会有很多的交互,对于性能不强的服务器,就会在高强度的命令IO流中CPU软锁死


10、搭建集群

登录后在在欢迎页面点击继续
CDH6.3.2安装文档_第7张图片
同意许可
CDH6.3.2安装文档_第8张图片
根据实际情况选择安装的版本,本篇使用免费
CDH6.3.2安装文档_第9张图片
第二次欢迎页面任然点击继续
CDH6.3.2安装文档_第10张图片
给集群起一个名字,点击继续
CDH6.3.2安装文档_第11张图片
输入之前准备好的安装大数据服务用的节点,点击搜索,结果默认是全选的,根据情况选择,之后点击继续
CDH6.3.2安装文档_第12张图片
存储库路径改为我们之前配置的yum路径
CDH6.3.2安装文档_第13张图片
下面的software,我们点击跟多选项
CDH6.3.2安装文档_第14张图片
在跟多选项中,前两项不动,把第三项的默认值全部删除,并修改为我们配置的本地yum
CDH6.3.2安装文档_第15张图片
点击保存更改后,会自己识别安装包,我们只需要点击继续即可
CDH6.3.2安装文档_第16张图片
进入JDK选项,我们不要勾选,因为之前已经说了JDK你要事先安好切自己决定用哪个版本的,虽然我们大家分享的安装包中有CDH可识别的JDK,但是由于没有厂商服务,所有会出现问题,我也并没有上传到本地yum中
CDH6.3.2安装文档_第17张图片
输入服务器的登录密码
CDH6.3.2安装文档_第18张图片
等待Agents安装结束
CDH6.3.2安装文档_第19张图片
如果在安装途中出现某一台节点上一直无法成功安装,这个是因为特殊原因无法安装某些依赖,安装进程卡死自动退出来,此时连接到该节点上手动安装如下依赖

yum  -y  install psmisc MySQL-python at bc bind-libs bind-utils cups-client cups-libs cyrus-sasl-gssapi cyrus-sasl-plain ed fuse fuse-libs httpd httpd-tools keyutils-libs-devel krb5-devel libcom_err-devel libselinux-devel libsepol-devel libverto-devel mailcap noarch mailx mod_ssl openssl-devel pcre-devel postgresql-libs python-psycopg2 redhat-lsb-core redhat-lsb-submod-security  x86_64 spax time zlib-devel
chmod +x /etc/rc.d/rc.local
echo "echo 0 > /proc/sys/vm/swappiness" >>/etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >>/etc/rc.d/rc.local
echo 0 > /proc/sys/vm/swappiness
echo never > /sys/kernel/mm/transparent_hugepage/defrag
yum -y install rpcbind
systemctl start rpcbind
echo "systemctl start rpcbind" >> /etc/rc.d/rc.local

安装结束之后,回到CDH界面,重试失败节点

当Agents安装结束之后,会自动开始安装插件
CDH6.3.2安装文档_第20张图片
等上面的结束之后,进入检查阶段,点击两个按钮,检查一遍安装环境,根据实际情况调整即可
CDH6.3.2安装文档_第21张图片
由于不同的环境,测试的结果也不同,如果结果在大家的预计之中,我们即可点击继续,有时候CDH会阻止你继续,这是选择I understand the risks, let me continue with cluster setup.即可继续

之后进入安装集群页面,选择最后一项,自定义安装服务
CDH6.3.2安装文档_第22张图片
调整节点
CDH6.3.2安装文档_第23张图片
填写需要的数据库账户和密码,就是之前我们创建的那些
CDH6.3.2安装文档_第24张图片
根据自己的需要配置细节
CDH6.3.2安装文档_第25张图片
配置结束CDH会初始化运行,这里有一个关键点,在审核更改页面进行下一步之前确定hdfs配置的路径是空的,尤其是使用默认配置的用户,一定要先手动把自动生成的/dfs目录干掉,否则namenode格式化的时候会报错

紧随关键点其后有一个坑,初次运行命令一般有6个,如果namenode格式化成功后续再出现问题,解决后重新运行首次运行命令界面就会变成4个,所以namenode格式化成功之后在修改其他问题理论上来说不需要再删除/dfs目录,不过我在配置的时候顺手会删掉这个看个人选择,可以先不删试试会不会出问题,影响重新首次执行命令再删也不迟
CDH6.3.2安装文档_第26张图片
在执行命令界面如果创建/tmp等路径的命令报错了,这是因为你的namenode处于安全模式,你需要去服务器后台把它恢复到正常,使用如下命令

vi /etc/passwd
vi之后找到hdfs用户,修改末尾的“/sbin /nologin”,需要改成“/bin/bash”保存退出
su - hdfs
hdfs dfsadmin -safemode leave

CDH6.3.2安装文档_第27张图片
最后汇总界面完成配置
在这里插入图片描述
至此CDH安装结束,末尾我们要准备一个脚本用来启动和关闭集群,毕竟按照我的搭建手册来的朋友,就会知道CDH的本地yum需要一个ISO的本地挂载,我们不可以每一次启动集群,都一个一个的操作去,这里顺便也说一下,CDH集群启动时处理运行start命令,还要在管理页面上将所有服务软启动,关闭集群的时候,也是需要先在管理页面把所有服务软关闭,才能去运行stop命令

#!/bin/bash
#该脚本用来启动所有服务,通过参数决定
case $1 in 
"cdh_start"){
	#集群地址
	cluster = (node1 node2 node3)
	
    echo "----------准备CDH预启动环境---------"
	echo `date` > /opt/start_cdh_log/cdh_start.log
    
    for i in cluster
    do
        echo "挂载node${i}的系统文件"
		echo "${i}----ISO:" >> /opt/start_cdh_log/cdh_start.log
        ssh node$i "mount /opt/CentOS-7-x86_64-DVD-1708.iso /mnt" >> /opt/start_cdh_log/cdh_start.log
    done
    
    echo "----------后台挂载http服务------------"
    cd /root/rpms
    nohup python -m SimpleHTTPServer 10040 &  >> /opt/start_cdh_log/cdh_start.log
    
    echo "---------启动CDH集群----------"
    systemctl start cloudera-scm-server  >> /opt/start_cdh_log/cdh_start.log
};;
"cdh_stop"){
cluster = (node1 node2 node3)
    echo "---------关闭CDH集群----------"
	echo `date` > /opt/stop_cdh_log/cdh_stop.log
    systemctl stop cloudera-scm-server >> /opt/stop_cdh_log/cdh_stop.log
};;
esac

最后在给大家添几个坑

第一个:不要随便重新格式化,如果非要重新格式化一定要把所有节点的/dfs目录删掉,如果一个不小心忘删除了,导致datanode因为uuid不一致起不来那么就分别跳转到namenode和出问题的datanode的/dfs/dn/current/dfs/nn/current打开他们的VERSION文件,让文件中的clusterID配置项保持一直,以namenode为准

第二个:如果安装完HDFS,发现实例中NFS Gateway起不来,这个是由于该实例的启动需要依赖服务器的rpcbind服务,而通常这个服务时不启动的,而是执行服务器自带的NFS服务,解决这个问题运行下面的命令就可以了,nfs服务没有就不用管它了,不过NFS Gateway测试环境一般用不着开,可以忽略。

service rpcbind start
service nfs stop

第三个:如果你发现HDFS实例中的namenode起不来,那就去看看日志,一般是处于安全模式了

第四个:如果你的yarn起不来,看日志发现错误来源于创建文件出问题,这个需要你使用hdfs用户把hdfs文件路径从/开始,所有路径权限释放,一般755就够

第五个:CDH的端口和开源的不一定一样,比如开源的hdfs-web-ui页面端口是50070,而CDH是9870,所以多看看默认的配置文件

第六个:安装hive服务后,需要手动去后台做mysql元数据库的配置,单纯的前端页面无效,会导致Hue连不到hiveserver2的端口,以及hive启动检查报错,不知道是BUG还是CDH专程设计的,配置方式如下

登录元数据服务所在的节点后台,注意是元数据服务!!不是元数据库

登录后进入/etc/hive/conf目录在hive-site.xml的最后追加如下内容,修改自己的配置

<property>
    <name>hive.metastore.db.type</name>
    <value>mysql</value>
    <description>元数据库类型指定为使用mysql</description>
</property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>指定mysql的驱动</description>
</property>
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>指定元数据库用户</description>
</property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>Wan123!</value>
    <description>指定元数据库密码</description>
</property>
 <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
    <description>指定mysql连接串</description>
</property>

最后进入/opt/cloudera/parcels/CDH/lib/hive/bin目录,运行如下命令,让hive初始化元数据库

./schematool -dbType mysql -initSchema

输出日志不报错,则去mysql中查看是否初始化完成,如果成功初始化,在cm web界面重启hive服务即可。

第七个:安装好hue服务,连接hive的时候,一定要先去cm web页面看看hive配置中允许操作数据的用户是那些,也就是说cdh的hive服务用的白名单限制用户名的权限控制方式,密码不限制。

第八个:hiveserver2在cdh上只自带了一种且默认开启使用的连接验证,就是简单的白名单验证用户名的验证方式,如果你在测试环境上不需要太关注使用默认的就行,但如果你要上生产,这是一个bug,你需要自定义hiveserver2的验证,因为默认的验证方式会导致白名单以外的用户也可以访问到hive,只是没有操作权限,但是用来防止专程攻击获取数据的人员这种验证就不合适了

第九个:一定要注意时区问题,安装好CDH后一定要注意web界面上使用的时间是否正确

先查看服务器时区用的那个
ls -l /etc/localtime

如果要修改运行 tzselect 命令
之后依次选择 Asia -> Shanghai

最后更改软连接
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

注意如果要更改时间,上面两步要一起做,不然对CHD没有影响

你可能感兴趣的:(各类型大数据集群搭建文档,CDH集群,CHD)