转载

CDH大数据计算管理平台安装所踩的坑及相关注意事项

最近公司的基于CDH的Hadoop大数据计算平台需要迁移,由于时间过长,原来的搭建步骤以及踩过的坑都忘得差不多了,现在为了将来能够有个依据,特将本次重新搭建平台所踩的坑给记录下来。

使用的软件及版本:

CDH-5.14.2-1.cdh5.14.2.p0.3

jdk1.8.0_171

Spark2.3

总体的步骤参看请参看这篇文章: http://blog.csdn.net/f1321368/article/details/49635587 ,讲得蛮详细的,图文件并茂。

下面记录的是一些上面那篇文件中没有谈到的一些问题,也就是我所碰到的另外的一些坑的处理办法。

1.添加Cloudera数据源

在安装的第一步更新源的过程中,需要选择适合自己linux版本的cloudear.list,如我的ubuntu是xenial,因而我选择的是http://archive.cloudera.com/cm5/ubuntu/xenial/amd64/cm/cloudera.list,并保存在目录/etc/apt/sources.list.d中,在执行系统更新命令"apt update && apt upgrade"之前,需要把archive.key取下来,我的对应的是http://archive.cloudera.com/cm5/ubuntu/xenial/amd64/cm/archive.key,并通过命令"apt-key add archive.key"将其key添加到系统中。

2.手动安装JDK1.8

如果只想使用CDH当前自带的Spark1.6,那么可以不用安装JDK1.8,安装JDK1.7即可,如果需要使用Spark2.3(后面有如何安装),则需要安装JDK1.8,否则后面想使用的时候再来修改集群中的JDK,那会碰到很多莫名的问题,别问我为什么知道。

安装JDK1.8最好是从Oracle官方下载,然后解压到/usr/lib/jvm目录中,并在/etc/profile中增加上JAVA_HOME变量并把bin目录加到PATH中:

JAVA_HOME=/usr/lib/jvm/jdk1.8.0_171
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME

为了防止其它问题的发生,最好建立如下的软链接:

ln -s /usr/lib/jvm/jdk1.8.0_171 /etc/alternatives/java
ln -s /etc/alternatives/java /usr/bin/java
ln -s /usr/bin/java /bin/java

3.修改SCM的模式为生产模式

修改scm的数据库为外部数据库,这样做的目的是不使用其自带的数据库,以避免SCM控制台提示非生产环境,也可以避免以后将数据从自带的数据库迁移到外面,当然数据也确实会更加安全。

相关参考: https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_installing_configuring_dbs.html#cmig_topic_5_2

1)准备好外部可用的数据库:

create database scm default character set utf8;
grant all privileges on scm.* to 'scm'@'%' by 'scm';
flush privileges;

2)然后执行数据库初使化(在执行数据库初使用脚本之前,需要先安装后JDK):    

/usr/share/cmf/schema/scm_prepare_database.sh mysql -h db_server scm scm scm

命令的使用方法,可直接输入scm_prepare_database.sh不带参数,会有提示。

4.安装mysql的jdbc驱动

在上面的提到的参考文章中的安装过程的第5步启动cloudera manager过后,可能无法访问7180端口,此时查看cloudera的日志文件,其存放于/var/log/cloudera-scm-server目录下,会发现“JDBC Driver class not found: com.mysql.jdbc.Driver” 这样的错误,这是没有找到对应的mysql jdbc connector,解决方案是通过如下命令安装mysql的java驱动:

apt install libmysql-java

然后安装的搜索出来的libmysql-java解决的问题。

安装完后,需要重启cloudera服务了。另 http://www.cnblogs.com/spec-dog/p/4664944.html 这篇日志有记录这个错误。

5.准备spark2.3的相关的包

将spark2.3的paralles放到cloudera对应的目录下,以便于cdh可以正确发现该包,并可以执行安装。为了简化,我使用以下命令处理:

cd /opt/cloudera/csd
wget http://archive.cloudera.com/spark2/csd/SPARK2_ON_YARN-2.3.0.cloudera2.jar
cd /opt/cloudera/parcel-repo
wget http://archive.cloudera.com/spark2/parcels/2.3.0.cloudera2/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-xenial.parcel
wget http://archive.cloudera.com/spark2/parcels/2.3.0.cloudera2/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-xenial.parcel.sha1
wget http://archive.cloudera.com/spark2/parcels/2.3.0.cloudera2/manifest.json
mv SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-xenial.parcel.sha1 SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-xenial.parcel.sha

以上命令在每台服务器上都要执行,并且一定要在CM的管理控制台Hosts->Parcels中找到Spark2,并点击Distribute,分发完成后,再点击Active,然后才能够在CM中增加该服务。

参考: https://blog.csdn.net/u010936936/article/details/73650417

6.重新安装Cloudera服务可能会碰到的一些问题

在某些情况下,集群可能需要重装,有甚至于整个Cloudera服务都需要删除过后再重装,但是重装并不是我们想像中的那么简单,它甚至于第一次安装都更有可能碰到莫名的问题,以下是我所碰到一些莫名问题的记录。

1)启动scm服务时找不到JAVA_HOME

操作步骤:

安装cloudera manager service后执行启动scm服务的命令:    

service cloudera-scm-server start

在scm server的日志文件中报找不到JAVA_HOME的错误"Error: JAVA_HOME is not set and Java could not be found",但是系统确实是设置了JAVA_HOME,通过echo $JAVA_HOME也可以看到

解决办法:

通过修改/etc/default/cloudera-scm-server该文件,在其中增加上JAVA_HOME,如下:    

export JAVA_HOME="/usr/lib/jvm/jdk1.8.0_171"

再次启动服务就正常了。

2)在scm的web控制台安装新的集群时,填入应用如hive等外部数据库的链接时,点测试链接提示无法链接。

这种情况会有两个错误:

a)没有安装mysql把jdbc驱动,这种错误可以通过在每台服务器上执行以下安装命令即可解决问题:    

apt install libmysql-java

b)明明有安装jdk,也有配置JAVA_HOME,但是却提示找不到java

通过查看日志,agent会在/usr/lib/jvm目录下遍历一些jdk的目录,如下:

2018-05-24 03:16:55,668 INFO CommandPusher:com.cloudera.cmf.service.AbstractDbConnectionTestCommand: ++ ls -rvd '/usr/lib/jvm/java-openjdk*'
+ for candidate_regex in '${JAVA_HOME_CANDIDATES[@]}'
++ ls -rvd '/usr/lib/jvm/jre-openjdk*'
+ for candidate_regex in '${JAVA_HOME_CANDIDATES[@]}'
++ ls -rvd '/usr/lib/jvm/java-1.7.0-openjdk*'
+ for candidate_regex in '${JAVA_HOME_CANDIDATES[@]}'
++ ls -rvd '/usr/lib/jvm/java-7-openjdk*'
+ for candidate_regex in '${JAVA_HOME_CANDIDATES[@]}'
++ ls -rvd '/usr/lib/jvm/java-1.8.0-openjdk*'
+ for candidate_regex in '${JAVA_HOME_CANDIDATES[@]}'
++ ls -rvd /usr/lib/jvm/java-8-openjdk
+ for candidate in '`ls -rvd ${candidate_regex}* 2>/dev/null`'
+ '[' -e /usr/lib/jvm/java-8-openjdk/bin/java ']'
+ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
+ JAVA_HOME=/usr/lib/jvm/java-8-openjdk

从上面的日志可以看出,它会尝试读取一些JDK的安装目录,但我安装的是jdk1.8.0_171,并不在它检查的列表里面,此时解决的办法也简单,在/usr/lib/jvm下面,给其检查列表中的JDK增加一个软链接即可,每台服务器执行以下命令:

cd /usr/lib/jvm
ln -s jdk1.8.0_171 java-8-openjdk

3)在web控制台查看服务器状态时,提示有些服务器的状态是“Host is in bad health”

通过查看该台服务器scm agent的日志,发现其中有报如下错误:

MainThread agent        ERROR    Error, CM server guid updated, expected 348656e4-51b5-4d77-b056-181ff1f70c54, received 78e112e3-4c6f-46d0-b141-bec649b737c5

解决方法如下:

a)停止agent服务    

service service-scm-agent stop

b)删除原来的cm_guid(不同版本的scm,这个文件的位置可能不一样,可以通过查看命令的找出来:find / -name cm_guid)    

rm /var/lib/cloudera-scm-agent/cm_guid

c)启动agent服务    

service service-scm-agent start

7.其它一些服务器准备的脚本

1)创建外部数据库(SQL脚本)

create database scm default character set utf8;
create database hive default character set utf8;
create database hue default character set utf8;
create database amon default character set utf8;
create database rman default character set utf8;
create database oozie_oozie_server default character set utf8;
create database navms default character set utf8;
grant all privileges on scm.* to 'scm'@'%' identified by 'scm';
grant all privileges on hive.* to 'hive'@'%' identified by 'hive';
grant all privileges on hue.* to 'hue'@'%' identified by 'hue';
grant all privileges on amon.* to 'amon'@'%' identified by 'amon';
grant all privileges on rman.* to 'rman'@'%' identified by 'rman';
grant all privileges on oozie_oozie_server.* to 'oozie'@'%' identified by 'oozie';
grant all privileges on navms.* to 'navms'@'%' identified by 'navms';

2)在每台服务器上执行硬盘格式化和挂载,这里的硬盘是/dev/xvdb,如果是其它位置根据情况调整

mkfs.ext4 /dev/xvdb
mkdir /data
mount /dev/xvdb /data
echo "/dev/xvdb       /data    ext4    defaults        0 0" >> /etc/fstab

3)设置服务器的名称(每台服务器执行命令带不同的参数,这里可以不用执行,默认服务器的名称就类似如下的)

hostnamectl set-hostname ip-172-31-16-71
hostnamectl set-hostname ip-172-31-20-195
hostnamectl set-hostname ip-172-31-31-194
hostnamectl set-hostname ip-172-31-19-103
hostnamectl set-hostname ip-172-31-28-125
hostnamectl set-hostname ip-172-31-24-50
hostnamectl set-hostname ip-172-31-24-63
hostnamectl set-hostname ip-172-31-31-193
hostnamectl set-hostname ip-172-31-22-39
hostnamectl set-hostname ip-172-31-31-171

4)增加控制swap的参数

echo "vm.swappiness=0" >> /etc/sysctl.conf
sysctl -p

5)增加hosts配置(服务器的IP和名称情况实际情况调整),在每台服务器上面都执行

echo "" >> /etc/hosts
echo "172.31.16.71 ip-172-31-16-71 bigdata-1" >> /etc/hosts
echo "172.31.20.195 ip-172-31-20-195 bigdata-2" >> /etc/hosts
echo "172.31.31.94 ip-172-31-31-194 bigdata-3" >> /etc/hosts
echo "172.31.19.103 ip-172-31-19-103 bigdata-4" >> /etc/hosts
echo "172.31.28.125 ip-172-31-28-125 bigdata-5" >> /etc/hosts
echo "172.31.24.50 ip-172-31-24-50 bigdata-6" >> /etc/hosts
echo "172.31.24.63 ip-172-31-24-63 bigdata-7" >> /etc/hosts
echo "172.31.31.193 ip-172-31-31-193 bigdata-8" >> /etc/hosts
echo "172.31.22.39 ip-172-31-22-39 bigdata-9" >> /etc/hosts
echo "172.31.31.171 ip-172-31-31-171 bigdata-10" >> /etc/hosts
原文  https://blog.csdn.net/fenglibing/article/details/80435991
正文到此结束
Loading...