使用CDH5.14.0方式Cloudera Manager快速搭建hadoop集群

*0.前言*

CDH搭建方式是使用Cloudera Manager进行一键式搭建hadoop集群,Cloudera Manager里面集成了hadoop组件的管理功能,并且提供了hadoop组件的静态资源parcel,可以实现一键安装、配置,统一管理。非常节省时间。
不推荐初学者学习CDH方式搭建,初学者建议以apache传统方式搭建,方便学习hadoop组件的工作原理。

*1.前置操作*

准备了四台虚拟机。root密码自己设置,我图方便都用root了

*修改hosts文件*

在四台节点上修改hosts文件,CDH会自动读取你的HOSTS文件,并将其作为连接其他agent的映射,务必将所有节点的hosts配置完全一样,并且能够互相访问。

映射命名如下。

vim /etc/hosts
10.3.69.80 cdh00

10.3.69.81 cdh01

10.3.69.82 cdh02

10.3.69.83 cdh03
hostnamectl set-hostname cdh00

hostnamectl set-hostname cdh01

hostnamectl set-hostname cdh02

hostnamectl set-hostname cdh03

*配置清华的yum源*

清华yum官方配置教学

*其他应用安装*

ifconfig不能用?

yum install net-tools -y

vi没颜色不好看,弄个vim。

yum install vim -y

节点之间要保证时间同步。

yum install ntp -y

ntpdate ntp6.aliyun.com

节点之间要经常通信,输密码很烦,先生成一对密钥

ssh-keygen

三个回车,不需要内容直接回车就行。

然后把密钥发送给其他节点

ssh-copy-id cdh00

关闭selinux

修改配置文件(重启生效)

vim /etc/selinux/config

将SELINUX=enforcing 改为SELINUX=disabled

下载其他第三方依赖

yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb httpd mod_ssl

*2.安装mysql*

虚拟机里默认有了jdk1.8,接下来安装mysql,理论上来讲只需要server节点安装,所以只在cdh00节点中安装mysql即可,其余例如hive之类的组件都依赖于cdh00的MySQL。

rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
yum repolist enabled | grep "mysql.*-community.*"
yum -y install mysql-community-server
systemctl enable mysqld
systemctl start mysqld

默认没有root密码,直接mysql -uroot登录登录进去以后修改mysql密码。

update mysql.user set password=PASSword('root') where user='root';

最后设置一下mysql的远程连接

mysqladmin -u root -proot
##登录后 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

mysql的user表

检查一下user表中是否有空项,根据表内容不同,给空值填入密码。

set password for root@localhost = password('root');

quit;

退出以后,重启mysql服务,登录。

systemctl restart mysqld
mysql -uroot -proot

在****cdh00****中创建CM所需要的数据库。

1)集群监控数据库
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;2)hive数据库 
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;3)oozie数据库
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;4)hue数据库
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 

最后别忘了给所有节点导入一下mysql的驱动jar,不管哪个版本都要统一名称。

/usr/share/java/mysql-connector-java.jar

*3.安装jdk*

java -version

先查看一下jdk的版本。

jdk版本

自带的openjdk没有jps,很难受,卸载掉安装自己的jdk。

yum -y remove java-1.8.0-open*

rz上传jdk1.8的安装包,安装包去oracle官网下载,或者直接wget也可。

tar -xzvf解压,mv jdk1.8.0_151 /usr/jdk1.8.0_151

因为需要所有用户都能访问,所以不能图省事放在/root里了。

vim /etc/profile

在最后一行添加:wq保存退出

export JAVA_HOME=/usr/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/sbin

路径根据自己的jdk解压名配置,然后a重新载入环境变量。

source /etc/profile

测试一下配置。

java -version 

jdk

CDH5默认的jdk路径是/usr/java/default,要么你把路径迁过去再修改环境变量,也可以做一个软连接。

mkdir -p /usr/java/default

ln -s /usr/jdk1.8.0_151/* /usr/java/default/

*4.CM安装5.14.0*

结果官网提供了个龟速链接,8kb/s速度2G的内容。注意下载的时候需要版本对应,el567分别对应centos5,centos6,centos7。版本不对必定安装失败。

*解压*

rz上传安装包至CDH00。tar -xzvf cloudera-manager-el6-cm5.14.0_x86_64.tar.gz解压。

把文件夹移动到/opt下,方便其他用户使用mv cm-5.14.0/ /opt/cloudera-manager/

*配置CMAgent*

vim /opt/cloudera-manager/etc/cloudera-scm-agent/config.ini

修改以下两条内容,将CM服务器设置为cdh00,端口号7182。

[General]server_host=cdh00server_port=7182

*配置CM数据库*

进入cd /usr/share/java目录下,rz导入mysql的驱动包,我这里使用的是5.1.40版本。

驱动包改名为

mv /usr/share/java/mysql-connector-java-5.1.40-bin.jar /usr/share/java/mysql-connector-java.jar

在mysql中创建CM库。

/opt/cloudera-manager/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -proot --scm-hostcdh00 scm scm scm

这里使用localhost是因为scm只有localhost的连接权限,使用cdh00需要重新配置权限比较麻烦。

分发安装包

scp -r /opt/cloudera-manager/ cdh01:/opt/

scp -r /opt/cloudera-manager/ cdh02:/opt/

scp -r /opt/cloudera-manager/ cdh03:/opt/

*所有节点创建用户*

useradd --system --home=/opt/cloudera-manager/run/cloudera-scm-server --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

*在Server节点下配置Parcel-repo 目录*

mkdir /opt/cloudera/

mkdir /opt/cloudera/parcel-repo

给创建的cloudera-scm用户权限

chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo

*导入静态资源包*

cd /opt/cloudera/parcel-repo/

rz命令导入静态资源,懒得导入也可以

wget https://archive.cloudera.com/cdh5/parcels/5.14.0/CDH-5.14.0-1.cdh5.14.0.p0.24-el7.parcel &后台慢慢下载。

*注意资源名称最后的el7是兼容的centos版本,我是centos7.6,所以需要el7版本的。*

manifest.json

CDH-5.12.1-1.cdh5.14.0.p0.24-el7.parcel

CDH-5.12.1-1.cdh5.14.0.p0.24-el7.parcel.sha1

并将改名为

mv CDH-5.14.0-1.cdh5.14.0.p0.24-el7.parcel.sha1 CDH-5.14.0-1.cdh5.14.0.p0.24-el7.parcel.sha

在所有agent节点上创建文件夹并授予权限

mkdir -p /opt/cloudera/parcels

chown cloudera-scm:cloudera-scm /opt/cloudera/parcels

*启动CM服务*

*直接启动*

在Server节点(cdh00)上

/opt/cloudera-manager/etc/init.d/cloudera-scm-server start

在工作节点上(所有节点)

/opt/cloudera-manager/etc/init.d/cloudera-scm-agent start

显示启动失败,查看一下日志文件

/opt/cloudera-manager/log/cloudera-scm-agent/

提示/usr/bin/env: python2.6: No such file or directory

Python -V查看一下python的版本,发现默认安装了2.7.5。

可以选择2.6和2.7两个版本共存,也可以直接卸载2.7.5(不推荐)

*出大问题*

若想卸载现有的版本

rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps

然后清除依赖

whereis python |xargs rm -frv

验证一下,如果无结果说明卸载干净

whereis python

在卸载前没有注意环境没有gcc编译,下载了python包以后不能编译,然后没有python又不能进行yum安装gcc,陷入了死循环。

解决方法:

卸载全部python和yum,下载rpm安装包重新安装。

mkdir /opt/site_package
mkdir /opt/site_package/python3
cd /opt/site_package/python3
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-libs-2.7.5-68.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-ipaddress-1.0.16-2.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-backports-1.0-8.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-2.7.5-68.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-iniparse-0.4-9.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-pycurl-7.19.0-19.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-urlgrabber-3.10-8.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-setuptools-0.9.8-7.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-kitchen-1.1.1-5.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-chardet-2.2.1-1.el7_1.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/rpm-python-4.11.3-32.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-utils-1.1.31-45.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-3.4.3-158.el7.centos.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-plugin-aliases-1.1.31-45.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-plugin-protectbase-1.1.31-45.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-45.el7.noarch.rpm
rpm -Uvh --replacepkgs python*.rpm
rpm -aq|grep yum|xargs rpm -e --nodeps
 rpm -Uvh --replacepkgs rpm-python*.rpm  yum*.rpm --force --nodeps

然后进行更新yum源

yum makecache yum update

然后进行yum安装的时候有可能会报错

GPG key retrieval failed: [Errno 14] curl#37 - 

"Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-7"

缺少key装一个就可以了

rpm --import /etc/pki/rpm-gpg/RPM*

然后我们开始编译python

先安装相关的依赖包

yum groupinstall "Development tools" -y
yum install zlib-devel -y
yum install bzip2-devel -y
yum install openssl-devel -y
yum install ncurses-devel -y
yum install sqlite-devel-y
yum install gcc -y

从官网下载pyhton2.6.8的包,官网比较慢需要等。

wget https://www.python.org/ftp/python/2.6.8/Python-2.6.8.tgz //下载
tar -xzvf Python-2.6.8.tgz //解压
cd Python-2.6.8 //进入目录
./configure //配置源码
make //编译
make altinstall //安装

默认安装在/usr/local/bin/python2.6

最后配置一下python的链接

ln -sf /usr/local/bin/python2.6 /usr/bin/python

python -V查看一下版本

如果需要python2.7则可以python2.7 -V

在这里插入图片描述

*再次启动*

发现还是faild,再次查看日志文件。

在这里插入图片描述

嗯,这个问题是下载错了包,没看清下载了cloudera-manager-el6-cm5.14.0_x86_64.tar.gz是centos6的版本,重新下载CentOS版本就好了(╯‵□′)╯︵┻━┻,还是要从官网龟速下载,一切重来。

在这里插入图片描述

集群启动成功。

*配置集群*

访问cdh00:7180进入管理web,账号/密码:admin/admin

在这里插入图片描述

登录后选择免费模式,并进行集群加载。注意这里如果是再次安装的时候需要先把主机从其他集群中删除,点击logo->主机->从集群中删除

*安装节点*

在这里插入图片描述

*配置静态资源*

选择已经下载好的parcel包,并且要求版本兼容。

在这里插入图片描述

在集群安装过程中,有可能会出现某个节点主机运行不良,这种情况先停止掉该主机的agent服务,再进入CM的安装文件目录,删除/opt/cloudera-manager/lib/cloudera-scm-agent/cm-guid,再重新启动agent

在这里插入图片描述

别问,问就是全都要。

在这里插入图片描述

*集群的进程分配*

主要思路就是负载均衡,cdh00要支持CM还要负责mysql数据存储,所以尽量不分配主进程。

进程cdh00cdh01cdh02cdh03
HbaseRegionserverRegionserverRegionserverRegionserver
HMaster
HDFSDatanodeDatanodeDatanodeDatanode
NamenodeBalancerSecondarynamenode
HiveGatewayGatewayGatewayGateway
Hiveserver2Hivemetastoreserver
HueHueserverLoadbalancer
ImpalaCatalogserverStatestore
DaemonDaemonDaemonDaemon
KVStoreindexerLilyIndexer
CMServerMonitorPublisher
OozieOozieServer
SolrSolrServer
SparkhistoryServer
GatewayGatewayGatewayGateway
YarnResourcemanagerJobHistoryServer
NodeManagerNodeManagerNodeManagerNodeManager
ZookeeperServerServerServerServer

*进程WEB访问表*

CMcdh00:7180
HDFScdh01:50070
Yarncdh00:8088
Hbasecdh02:60010
Ooziecdh03:11000
Huecdh01:8888

*数据库配置*

在之前安装mysql的时候我们就已经创建好了,按照配置好的名称写入,注意mysql只在cdh00中安装过。

如果提示jdbc问题就是jar包未找到,确认一下是否导入jar包或者名字是否正确。其他错误具体问题具体分析。

在这里插入图片描述

集群配置没什么需要修改的,统一默认情况就可以。

在这里插入图片描述

*等待集群启动*

在这里插入图片描述

在这里插入图片描述

这里注意yarn默认只给1G配置内存,spark要求至少2G,所以需要修改配置

Yarn->配置->搜索->

yarn.scheduler.maximum-allocation-mb->5G

yarn.app.mapreduce.am.resource.mb->5G

yarn.nodemanager.resource.memory-mb->5G

理论上大于2吉字节即可,根据集群性能自行调配。修改配置之后需要重启yarn集群。

在这里插入图片描述

*测试集群*

*本地测试*

集群启动成功,运行spark程序测试,apache的sparkexample不能用的,需要使用CDH版的sparkexample。

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local \
/opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/spark/examples/lib/spark-examples-1.6.0-cdh5.14.0-hadoop2.6.0-cdh5.14.0.jar

这里的目录是CDHspark的安装目录,一般都在pacels目录里。

在这里插入图片描述

有可能会出现这种错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream

这个说明spark自动生成的配置文件有问题,需要自己配置。修改前记得备份,万一改错了还能还原。

cd /opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/spark/conf

cp spark-env.sh spark-env.sh.ex

vim /opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/spark/conf/spark-env.sh

//以下是自动生成的默认配置,检查目录是否错误

//以下是自动生成的默认配置,检查目录是否错误
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:$SPARK_LIBRARY_PATH/spark-assembly.jar"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/hadoop/lib/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/hadoop/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/hadoop-hdfs/lib/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/hadoop-hdfs/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/hadoop-mapreduce/lib/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/hadoop-mapreduce/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/hadoop-yarn/lib/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/hadoop-yarn/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/hive/lib/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/flume-ng/lib/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/parquet/lib/*"
SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:/usr/lib/avro/*"

主要检查这个命令行,发现这些目录都不是hadoop组件的安装目录,实际安装目录在/opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/下,改成实际安装目录即可。

在这里插入图片描述

*Yarn测试*

再换用yarn模式启动一下。

spark-submit \--class org.apache.spark.examples.SparkPi \--master yarn \/opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/spark/examples/lib/spark-examples-1.6.0-cdh5.14.0-hadoop2.6.0-cdh5.14.0.jar
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x

他报了个文件权限的问题,/user目录root用户无权限访问,果断给个hadoop fs -chmod 777 /user

结果说我root用户无权更改?????

没事,先登录cdh01:50070查看一下哪个用户敢拒绝我root的访问。

在这里插入图片描述

是这个叫hdfs的东西,那就su hdfs切换用户,再hadoop fs -chmod 777 /user,完美。

如果报yarn.scheduler.maximum-allocation-mb之类的错误就是前面提到的内存分配太小,更改配置以后重启yarn。

在这里插入图片描述

在这里插入图片描述

集群正常运行,在web端会报异常,程序员都知道异常等于正常,我这里hue的Load balancer报错了,负载均衡的进程罢了,问题不大不影响使用。如果觉得异常不好看可以选择抑制。

在这里插入图片描述

这样就不再监测这个问题,抑制几个不重要的异常无所谓,重要异常不可以忽略。

*5.安装kafka*

*下载静态parcel包*

Parcel中默认是没有kafka的,需要安装集群后手动安装。

CDH提供的kafka链接很慢,建议自行下载安装。CDH自带的下载链接:

*CDH提供的链接*

点击主机->parcel->KAFKA->下载

在这里插入图片描述

*自行下载安装*

yum install httpd -y //安装httpd服务

systemctl start httpd

systemctl enable httpd

移动到httpd的资源目录下

cd /var/www/html

mkdir kafka_parcel

cd kafka_parcel

在目录下进行kafka的下载,也可以提前下载好rz导入。

wget http://archive.cloudera.com/kafka/parcels/4.1.0/KAFKA-4.1.0-1.4.1.0.p0.4-el7.parcel &wget http://archive.cloudera.com/kafka/parcels/4.1.0/KAFKA-4.1.0-1.4.1.0.p0.4-el7.parcel.sha1 &wget http://archive.cloudera.com/kafka/parcels/4.1.0/manifest.json &

别忘了把sha1改成sha

*配置本地链接库*

访问http://cdh00:80/kafka_parcel/查看资源目录

在这里插入图片描述

点击主机->Parcel->配置->添加url,把httpd的资源目录粘贴进去。

在这里插入图片描述
在这里插入图片描述

然后再资源列表中就可以看到kafka,点击下载->分配->激活

在这里插入图片描述

*安装分配*

点击主logo->添加服务

分配4个broker即可

在这里插入图片描述

在zookeeper中添加kafka的数据节点,其余默认。

在这里插入图片描述

Kafka安装有可能报错deploy client configuration fail,这有可能是JAVA_HOME的问题,重新配置一下,或者也有可能是软连接没设置好,CDH去默认路径找jdk没找到,重新设置一下jdk软连接。

Kafka启动失败Service has only 0 Kafka Broker roles running instead of minimum required 1解决不了,mdzz,我选择手动安装。

在这里插入图片描述

最新发现解决方案,有可能是配置的JVM虚拟内存不够,配置搜索memory,修改java heap size of broker为1G。

在这里插入图片描述

点击logo返回主页->kafka->配置->搜索memory,确实默认分配的太小,改为1G。点击实例->全选->启动。

在这里插入图片描述

*6.总结*

啊这,没想到我被JVM内存难倒了一整天。

然后其他的组件就根据自己需要自行安装了,大部分的大数据组件在parcel静态资源下都有,CDH相对比apache方式安装省事了很多,除了下载速度慢以外,其他都是一键配置,不需要繁琐的授权、修改配置文件之类的复杂、机械化操作,节省了很多时间。Apache模式安装的问题主要出在配置上,手工配置容易出错,使用CDH安装主要问题出在版本匹配上,务必注意系统和CDH的版本是否匹配,版本兼容问题解决以后,其他问题基本都迎刃而解。


版权声明:本文为weixin_46466052原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。