最近因工作需要在一个完全离线的模式下安装一个CDH集群,在安装的过程中遇到许多问题,在此做个简单的记录。
首先在安装之前有几点问题需要注意
1建议使用root用户进行安装,因为在安装过程中CDH默认安装的时候,会创建各种用户,hdfs,hive,spark,impala,sqoop等等的用户,但往往我们在做一些操作的时候往往权限不够,导致各种各样的问题。我在尝试使用非root用户安装过程中没有成功。
2在使用root用户安装的过程中其实ssh免密并不是必须的。(我得到的权限只能使用sudo -s切换到root用户,实际测试没有完全切换到root用户环境不能配置ssh免密,但是并不影响后续正常运行)但是在安装过程中有些步骤有需要手动分发包的情况,只要能把包分发过去就行
3安装前需要配置本地ntp时钟同步
以下是实际安装步骤:
一、在主节点离线安装mysql
直接去官网下载mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar包进行安装:https://dev.mysql.com/downoads/mysql/
特别说明,我开始下载的是最新的mysql-8.0.11但是发现cdh似乎并不兼容最新的mysql会报错,不得不重新安装mysql-5.7.21。
1、首先删除系统中存在的mysql相关依赖
使用以下查询系统是否有相关依赖
rpm -qa | grep mariadb-libs
rpm -qa | grep mysql
使用以下相关命令删除相关依赖
rpm -e mariadb-libs-1:5.5.56-2.el7.x86_64 --nodeps
2、解压mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar,里边有多个rpm包,直接依次安装,具体如下
rpm -ivh mysql-community-common-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm
3、启动服务修改密码
1)启动服务
2)service mysqld start
3)查询初始密码
cat /var/log/mysqld.log |grep "passw"
如果无法查询到密码,也可以使用以下方式修改初始密码:
vim /etc/my.cnf
接下来加入一句代码即可空密码登录mysql:
# Disabling symbolic-links is recommended to prevent assorted security risks
skip-grant-tables #添加这句话,这时候登入mysql就不需要密码
symbolic-links=0
service mysqld restart
4)修改密码和设置远程登录
set
global
validate_password_policy=0;//修改密码安全策略
set global validate_password_length=1;//修改密码长度限制
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
创建后续cdh manager可能会使用到的数据库,具体需要创建哪些和你选择安装的组件有关
#hive
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#activity monitor
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#Oozie
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#hue
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
二、正式开始集群的安装
1、下载相关包
从http://archive.cloudera.com/cdh5/parcels下载
manifest.json(该文件是集群版本验证文件,要和集群的实际版本一致)
CDH-5.14.2-1.cdh5.14.2.p0.3-el7.parcel
CDH-5.14.2-1.cdh5.14.2.p0.3-el7.parcel.sha1
从http://archive.cloudera.com/cm5/cm/5下载cdh manager
cloudera-manager-centos7-cm5.14.2_x86_64.tar.gz
2、安装
首先确定一个安装的主节点,将上述包都传到该节点下。
1).首先将cloudera-manager-centos7-cm5.14.2_x86_64.tar.gz移动到/opt目录下,解压会得到cloudera 和cm-5.14.2 两个目录。
2).在主节点初始化CM5的数据库
sudo /opt/cm-5.14.2/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -p123456 --scm-host localhost scm scm scm
3).修改/opt/cm-5.14.2/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名
4).上传mysql-connector-java-8.0.11.jar (从官网上驱动该驱动向前兼容,所以最新的驱动包也是可以用的)MySQL的驱动包到 /opt/cm-5.14.2/share/cmf/lib
后续初始化启动hive和oozie的时候发现会报错,排查之后发现是缺少mysql驱动,解决方式是:
cp /opt/cm-5.14.2/share/cmf/lib/mysql-connector-java-8.0.11.jar /opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/hive/lib
cp /opt/cm-5.14.2/share/cmf/lib/mysql-connector-java-8.0.11.jar /opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/oozie/lib
cp /opt/cm-5.14.2/share/cmf/lib/mysql-connector-java-8.0.11.jar /opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/oozie/libserver
cp /opt/cm-5.14.2/share/cmf/lib/mysql-connector-java-8.0.11.jar /opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/oozie/libtools
所以如果不怕多余,可以提前将mysql驱动jar包复制到相关目录下,该操作非必须
5).分发包
1>将/opc/cm-5.14.2目录打包分发到所有子节点上的/opt目录下
2>将从官网下载的CDH-5.14.2-1.cdh5.14.2.p0.3-el7.parcel,CDH-5.14.2-1.cdh5.14.2.p0.3-el7.parcel.sha1和manifest.json移动到/opt/cloudera/parcel-repo目录下
6).在所有节点创建cloudera-scm用户
sudo useradd --system --home=/opt/cm-5.14.2/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
7).启动cdh manager
在主节点启动cloudera-scm-server:
/opt/cm-5.14.2/etc/init.d/cloudera-scm-server start
在所有节点启动cloudera-scm-agent
/opt/cm-5.14.2/etc/init.d/cloudera-scm-agent start
该步骤可能会出现以下问题:
1、无法请求manifest.json
java.util.concurrent.ExecutionException:java.net.ConnectException:Connectionrefused to https://archive.cloudera.com/cdh5/parcels/5.14/manifest.json
at com.ning.http.client.providers.netty.NettyResponseFuture.abort(NettyResponseFuture.java:297)
at com.ning.http.client.providers.netty.NettyConnectListener.operationComplete(NettyConnectListener.java:104)
at org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:399)
at org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:390)
该问题是因为我们的集群处于和外网隔绝的情况下,无法访问外网的该验证文件。我们可以在本地模拟该网址。
1) httpd安装
yum install httpd
2) 启动httpd服务
service httpd start
chkconfig httpd on
3) 配置manifest.json的路径
为/var/www/html授权
chmod 775 /var/www/html/
在/var/www/html/下创建cdh5/parcels/5.14/
cd /var/www/html
mkdir -p cdh5/parcels/5.14/
cd cdh5/parcels/5.14/
ln /opt/cloudera/parcel-repo/manifest.json manifest.json
4)修改/etc/hosts文件
echo “127.0.0.1 archive.cloudera.com” >>/etc/hosts
配置完后测试一下
curl archive.cloudera.com/cdh5/parcels/5.14/manifest.json
如果打印出manifest.json文件的内容,那就是配置好了,就可以重启CDH了
2、jdk一直报错,无法查询jdk的位置。
为了解决该问题我做了以下尝试
1)/opt/cm-5.14.2/etc/default/cloudera-scm-server中追加JAVA_HOME
2)在环境变量中追加JAVA_HOME并设置PAHT
3)如果该问题还无法解决,我当时将jdk移动到cdh manager查询的默认路径/usr/java/jdk1.8.0_171
3、一些莫名其妙的权限问题,可能需要手动创建以下目录
mkdir -p /var/log/cloudera-scm-headlamp
mkdir -p /var/log/cloudera-scm-firehose
mkdir -p /var/log/cloudera-scm-alertpublisher
mkdir -p /var/log/cloudera-scm-eventserver
mkdir -p /var/lib/cloudera-scm-headlamp
mkdir -p /var/lib/cloudera-scm-firehose
mkdir -p /var/lib/cloudera-scm-alertpublisher
mkdir -p /var/lib/cloudera-scm-eventserver
mkdir -p /var/lib/cloudera-scm-server
mkdir -p /var/lib/cloudera-host-monitor
mkdir -p /var/lib/cloudera-service-monitor
mkdir -p /var/log/hive
chown -R cloudera-scm:cloudera-scm /var/log/cloudera-scm-headlamp
chown -R cloudera-scm:cloudera-scm /var/log/cloudera-scm-firehose
chown -R cloudera-scm:cloudera-scm /var/log/cloudera-scm-alertpublisher
chown -R cloudera-scm:cloudera-scm /var/log/cloudera-scm-eventserver
chown -R cloudera-scm:cloudera-scm /var/lib/cloudera-scm-headlamp
chown -R cloudera-scm:cloudera-scm /var/lib/cloudera-scm-firehose
chown -R cloudera-scm:cloudera-scm /var/lib/cloudera-scm-alertpublisher
chown -R cloudera-scm:cloudera-scm /var/lib/cloudera-scm-eventserver
chown -R cloudera-scm:cloudera-scm /var/lib/cloudera-scm-server
chown -R cloudera-scm:cloudera-scm /var/lib/cloudera-host-monitor
chown -R cloudera-scm:cloudera-scm /var/lib/cloudera-service-monitor
如果经历以上步骤之后cdh manager正常启动,则可以访问http://主机IP:7180/cmf/home对集群组件进行配置和启动
参考文章:
CentOS7离线安装MySQL:https://www.cnblogs.com/Orange42/p/8432185.html
离线安装Cloudera Manager 5和CDH5(最新版5.1.3) 完全教程:https://www.cnblogs.com/jasondan/p/4011153.html