文章目录
前言:
最近接到搭建CDH集群的任务
在集群搭建过程中一直在网上查询搭建流程,资料千奇百怪。
总体来说网上提供的资料总会在关键部分缺斤少两,对新手很不友好,中间踩坑无数
碰到了不少问题并总结了一套搭建平滑的流程
在这里进行总结,方便下次再次进行集群搭建
服务器是aliyun服务器,新租的服务器从头开始搭建。
搭建过程中的错漏或者隐患欢迎大家指出
一、集群准备安装
1.1 修改服务器hosts文件(所有节点)
[root@hadoop001 ~]# vim /etc/hosts
127.0.0.1 localhost localhost
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.17.138.24 hadoop001
172.17.138.25 hadoop002
172.17.138.23 hadoop003
注意:这里每个人不一样,ip填写的是私有ip,做完后ping一下。
1.2 防火墙设置(所有节点)
#关闭防火墙
[atguigu@hadoop102 ~]$ systemctl stop firewalld
#禁用防火墙
[atguigu@hadoop102 ~]$ systemctl disable firewalld
#清空防火墙规则
[atguigu@hadoop102 ~]$ iptables -F
1.3 selinux关闭(所有节点)
[atguigu@hadoop102 ~]$ cat /etc/selinux/config
修改
SELINUX=disabled
1.4 时间同步
1.4.1 安装ntp时间同步服务器(所有节点)
安装ntpd服务
检查ntp是否已安装,否则安装
[root@hadoop001 ~]# rpm -qa|grep ntp
安装ntp
[root@hadoop001 ~]# yum install ntp
激活ntp服务
[root@hadoop001 ~]# systemctl enable ntpd
永久开启ntpd业务
[root@hadoop001 ~]# systemctl start ntpd
查看ntp服务状态,切记要reboot重启服务器,否则下面指令执行后无法时间同步
[root@hadoop001 ~]# systemctl status ntpd
所有节点设置时区,中国上海:
[root@hadoop001 ~]# timedatectl set-timezone Asia/Shanghai
1.4.2 修改主机名
[root@hadoop001 ~]# hostnamectl set-hostname "hadoop102"
在主节点hadoop102编辑ntp.conf文件,其它4台服务器同步即可
[root@hadoop001 ~]# vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 startum 10
server注释掉
1.4.3 所有从节点
添加主节点
[atguigu@hadoop102 ~]$ vi /etc/ntp.conf
在其它节点上手动同步rjtx221的时间
[atguigu@hadoop102 ~]# ntpdate -u hadoop102
所有节点启动时间同步
[atguigu@hadoop102 ~]# timedatectl set-ntp yes
查看同步状态
[atguigu@hadoop102 ~]# ntpstat
1.5 编写集群分发脚本xsync
①在用的家目录/home/atguigu下创建bin文件夹
[atguigu@hadoop102 ~]$ mkdir bin
②在/home/atguigu/bin目录下创建xsync文件,以便全局调用
[atguigu@hadoop102 ~]$ cd /home/atguigu/bin
[atguigu@hadoop102 ~]$ vim xsync
在该文件中编写如下代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
③修改脚本xsync具有执行权限
[atguigu@hadoop102 bin]$ chmod +x xsync
④测试脚本
[atguigu@hadoop102 bin]$ xsync xsync
如果报错是缺少rsync
如果该命令执行依然无法安装rsync
[atguigu@hadoop102 bin]$ yum install rsync -y
下载rsync的rpm包,依赖包下载网页:
https://centos.pkgs.org/7/centos-x86_64/
红框处直接搜索需要的依赖包 rsync
根据当前系统选择对应的rsync包
复制红框出网址,在网址下载依赖
将依赖包通过xshell拖入服务器,通过rpm安装
[root@cdh3 software]# rmp -ivh rsync-3.1.2-10.el7.x86_64.rpm
1.6 SSH无密登录配置
(1)hadoop102上生成公钥和私钥:
[atguigu@hadoop102 .ssh]# ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(2)将hadoop102公钥拷贝到要免密登录的目标机器上
[atguigu@hadoop102 .ssh]$ ssh-copy-id cdh0
[atguigu@hadoop102 .ssh]$ ssh-copy-id cdh1
[atguigu@hadoop102 .ssh]$ ssh-copy-id cdh2
[atguigu@hadoop102 .ssh]$ ssh-copy-id cdh3
(3)hadoop103上生成公钥和私钥:
[atguigu@hadoop103 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(4)将hadoop103公钥拷贝到要免密登录的目标机器上
[atguigu@hadoop103 .ssh]$ ssh-copy-id hadoop102
[atguigu@hadoop103 .ssh]$ ssh-copy-id hadoop103
[atguigu@hadoop103 .ssh]$ ssh-copy-id hadoop104
1.7 JDK准备
1)卸载现有JDK(3台节点)
[atguigu@hadoop102 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
[atguigu@hadoop103 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
[atguigu@hadoop104 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
(1)rpm -qa:表示查询所有已经安装的软件包
(2)grep -i:表示过滤时不区分大小写
(3)xargs -n1:表示一次获取上次执行结果的一个值
(4)rpm -e --nodeps:表示卸载软件
2)用XShell工具将JDK导入到hadoop102的/opt/software文件夹下面
3)解压JDK到/opt/module目录下
[atguigu@hadoop102 software]# mkdir /usr/java
[atguigu@hadoop102 software]# tar -zxvf jdk-8u212-linux-x64.tar.gz -C /usr/java
修正用户组/用户权限:
[atguigu@hadoop102 software]# chown -R root:root /usr/java/jdk1.8.0_212/
[atguigu@hadoop102 software]# xsync /usr/java/jdk1.8.0_212
4)配置JDK环境变量(三台节点)
(1)配置/etc/profile
[atguigu@hadoop102 module]# vim /etc/profile
添加如下内容,然后保存(:wq)退出
#JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
(2)让环境变量生效(所有节点)
[atguigu@hadoop102 software]$ source /etc/profile
(3)查看是否安装成功
[atguigu@hadoop102 software]$ java -version
1.8 MySQL安装(主节点)
1.8.1 安装包准备
1)将安装包和JDBC驱动上传到/opt/software,共计6个
01_mysql-community-common-5.7.16-1.el7.x86_64.rpm
02_mysql-community-libs-5.7.16-1.el7.x86_64.rpm
03_mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm
04_mysql-community-client-5.7.16-1.el7.x86_64.rpm
05_mysql-community-server-5.7.16-1.el7.x86_64.rpm
mysql-connector-java-5.1.27-bin.jar
2)如果是虚拟机按照如下步骤执行
(1)卸载自带的Mysql-libs(如果之前安装过MySQL,要全都卸载掉)
[atguigu@hadoop102 software]$ rpm -qa | grep -i -E mysql\|mariadb | xargs -n1 sudo rpm -e --nodeps
3)如果是阿里云服务器按照如下步骤执行
说明:由于阿里云服务器安装的是Linux最小系统版,没有如下工具,所以需要安装。
(1)卸载MySQL依赖,虽然机器上没有装MySQL,但是这一步不可少
[atguigu@hadoop102 software]# sudo yum remove mysql-libs
(2)下载依赖并安装
[atguigu@hadoop102 software]# sudo yum install libaio
[atguigu@hadoop102 software]# sudo yum -y install autoconf
1.8.2 安装MySQL
1)安装MySQL依赖
[atguigu@hadoop102 software]$ sudo rpm -ivh 01_mysql-community-common-5.7.16-1.el7.x86_64.rpm
[atguigu@hadoop102 software]$ sudo rpm -ivh 02_mysql-community-libs-5.7.16-1.el7.x86_64.rpm
[atguigu@hadoop102 software]$ sudo rpm -ivh 03_mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm
2)安装mysql-client
[atguigu@hadoop102 software]$ sudo rpm -ivh 04_mysql-community-client-5.7.16-1.el7.x86_64.rpm
3)安装mysql-server
[atguigu@hadoop102 software]$ sudo rpm -ivh 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm
注意:如果报如下错误,这是由于yum安装了旧版本的GPG keys所造成,从rpm版本4.1后,在安装或升级软件包时会自动检查软件包的签名。
warning: 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
libaio.so.1()(64bit) is needed by mysql-community-server-5.7.16-1.el7.x86_64
解决办法
[atguigu@hadoop102 software]$ sudo rpm -ivh 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm --force --nodeps
4)启动MySQL
[atguigu@hadoop102 software]$ sudo systemctl start mysqld
5)查看MySQL密码
[atguigu@hadoop102 software]$ sudo cat /var/log/mysqld.log | grep password
1.8.3 配置MySQL
配置只要是root用户 + 密码,在任何主机上都能登录MySQL数据库。
创建用户组及用户(未实践)
[atguigu@hadoop102 local]$ groupadd -g 101 dba
[atguigu@hadoop102 local]$ useradd -u 514 -g dba -G root -d /local/mysql mysqladmin
[atguigu@hadoop102 local]$ id mysqladmin
[atguigu@hadoop102 local]$ cp /etc/skel/.* /usr/local/mysql
[atguigu@hadoop102 local]$ su - mysqladmin
[atguigu@hadoop102 local]$ vi .bashrc
添加
export MYSQL_BASE=/usr/local/mysql
export PATH=${MYSQL_BASE}/bin:$PATH
赋权限和用户组
[atguigu@hadoop102 mysql]$ chown -R mysqladmin:dba /etc/my.cnf
[atguigu@hadoop102 mysql]$ chown -R 755 /usr/local/mysql
[atguigu@hadoop102 mysql]$ cp support-flies/mysql.server /etc/rc.d/init.d/mysql
[atguigu@hadoop102 mysql]$ chmod +x /etc/rc.d/init.d/mysql
[atguigu@hadoop102 mysql]$ chkconfig –add mysql
[atguigu@hadoop102 mysql]$ bin/mysqld --defaults-file=/etc/my.cnf --user=mysqladmin --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --initialize
[atguigu@hadoop102 mysql]$ cd data
1)用刚刚查到的密码进入MySQL(如果报错,给密码加单引号)
[atguigu@hadoop102 software]$ mysql -uroot -p'password'
2)设置复杂密码(由于MySQL密码策略,此密码必须足够复杂)
mysql> set password=password("Qs23=zs32");
3)更改MySQL密码策略
mysql> set global validate_password_length=4;
mysql> set global validate_password_policy=0;
4)设置简单好记的密码
mysql> set password=password("88888888");
5)进入MySQL库
mysql> use mysql
6)查询user表
mysql> select user, host from user;
7)修改user表,把Host表内容修改为%
mysql> update user set host="%" where user="root";
8)刷新
mysql> flush privileges;
9)退出
mysql> quit;
1.8.4 创建CM用的数据库
在MySQL中依次创建监控数据库、Hive数据库、Oozie数据库、Hue数据库
1)启动数据库
[root@hadoop102 ~]# mysql -uroot -p88888888
2)集群监控数据库
mysql> create database cmf DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
mysql> create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
mysql> set global validate_password_length=4;
mysql> set global validate_password_policy=0;
mysql> grant all privileges on cmf.* to 'cmf'@'%' identified by '88888888';
mysql> grant all privileges on amon.* to 'amon'@'%' identified by '88888888';
3)Hive数据库
mysql> create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
4)Oozie数据库
mysql> create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
5)Hue数据库
mysql> create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
6)关闭数据库
mysql> flush privileges;
mysql> quit;
1.8.5 jdbc连接
创建/usr/share/java
[atguigu@hadoop102 mysql]$ mkdir -p /usr/share/java
jdbc安装包移动到/usr/share/java并重命名:
[atguigu@hadoop102 mysql]$ mv /opt/software/mysql/mysql-connector-java-5.1.27-bin.jar /usr/share/java/mysql-connector-java.jar
1.9 CM部署
1.9.1 下载第三方依赖(所有节点)
依次在三台节点(所有Agent的节点)上执行下载第三方依赖(注意:需要联网)
[root@hadoop102 ~]# yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb portmap httpd mod_ssl openssl-devel python-psycopg2 MySQL-python libpq.so.5
1.9.2 主节点安装daemons, server, agent
rpm -ivh cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm
rpm -ivh cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm # server
[root@hadoop102 ~]# vi /etc/cloudera-scm-server/db.properties
# Copyright (c) 2012 Cloudera, Inc. All rights reserved.
#
# This file describes the database connection.
#
# The database type
# Currently 'mysql', 'postgresql' and 'oracle' are valid databases.
com.cloudera.cmf.db.type=mysql
# The database host
# If a non standard port is needed, use 'hostname:port'
#com.cloudera.cmf.db.host=hadoop102:3306
# The database name
com.cloudera.cmf.db.name=cmf
# The database user
com.cloudera.cmf.db.user=cmf
# The database user's password
com.cloudera.cmf.db.password=88888888
# The db setup type
# After fresh install it is set to INIT
# and will be changed post config.
# If scm-server uses Embedded DB then it is set to EMBEDDED
# If scm-server uses External DB then it is set to EXTERNAL
com.cloudera.cmf.db.setupType= EXTERNAL
启动server和agent
主节点启动server
systemctl start cloudera-scm-server
查看日志,出现7180说明启动成功,,有错误解决错误
tail -F /var/log/cloudera-scm-server/cloudera-scm-server.log
如果在不打开防火墙的情况下可以访问端口,可以不进行防火墙打开操作
7180防火墙打开
选择配置规则->添加安全组规则
打开web界面先不要动!!!!!!!!
[root@hadoop102 ~]# rpm -ivh cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm --nodeps --force
[root@hadoop102 ~]# vi /etc/cloudera-scm-agent/config.ini
指定cm server
[General]
# Hostname of the CM server.
server_host=hadoop102
如果日志中有报错
将manifest.json文件放入 /opt/cloudera/parcel-repo/目录
1.9.3 子节点安装daemons, agent
[root@hadoop103 ~]# rpm -ivh cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm --nodeps --force
[root@hadoop103 ~]# rpm -ivh cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm --nodeps --force
[root@hadoop103 ~]# vi /etc/cloudera-scm-agent/config.ini
指定cm server
[General]
# Hostname of the CM server.
1.9.4 所有节点启动 agent
[root@hadoop102 ~]# systemctl start cloudera-scm-agent
[root@hadoop103 ~]# systemctl start cloudera-scm-agent
[root@hadoop104 ~]# systemctl start cloudera-scm-agent
1.9.5 页面配置
选择免费版本
添加集群名
全选
配置parcel
[root@hadoop102 cm6.1]# yum install -y httpd
[root@hadoop102 cm6.1]# mkdir /var/www/html/cdh6_parcel
主节点
两个parcel文件和manifest.json文件移动到 /var/www/html/cdh6_parcel 并去除后缀
[root@hadoop102 cm6.1]# mv ../cdh6.1/CDH-6.1.0-1.cdh6.1.0.p0.770702-el7.parcel /var/www/html/cdh6_parcel/
[root@hadoop102 cm6.1]# service httpd start
选项下的全部移除
将httpd地址拷贝进去
http://hadoop102/cdh6_parcel
保存后选择CDH版本
单击
选择需要添加的服务(建议少选,有需要的服务后边单独配置即可)
接下来点击下一步,填写cm数据库,基本就完成了
完成图片
1.9.6 Hdfs Web UI访问端口查询
在CDH5.12搭建完成之后NameNode的Web UI 50070 访问不了。
遇到这个其实不难解决!
设置 -> HDFS -> NameNode -> NameNode Web UI 端口
1.9.7 Hdfs Web UI文件夹创建
当我们用cloudera安装好Hadoop等组件时我们在操作HDFS时可能会遇到这样的问题
Permission denied: user=root, access=WRITE,
inode="/":hdfs:supergroup:drwxr-xr-x
无论是用sudo hadoop dfs -mkdir 建立文件 还是 put文件,都会显示,同样的错误!!
其实是这样的,/这是文件的所有者是HDFS 权限为755 也就是只有HDFS才能对这个文件进行sudo的操作
那么接下来我们便可以这样操作文件
sudo -u hdfs hadoop fs -mkdir /user/root
我们可以以hdfs的身份对文件进行操作
2.0 kafka安装过程中报错处理
错误InconsistentBrokerIdException示例:
kafka.common.InconsistentBrokerIdException: Configured broker.id 2 doesn't match stored broker.id 0 in meta.properties. If you moved your data, make sure your configured broker.id matches. If you intend to create a new broker, you should remove all data in your data directories (log.dirs).
at kafka.server.KafkaServer.getBrokerIdAndOfflineDirs(KafkaServer.scala:686)
at kafka.server.KafkaServer.startup(KafkaServer.scala:209)
at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38)
at kafka.Kafka$.main(Kafka.scala:75)
at kafka.Kafka.main(Kafka.scala)
kafka启动异常的原因是,主机的Kafka配置完成后进行了相关的测试,日志文件中生成了主机相应的文件,造成从机启动Kafka进程的时候broker.id 不能匹配meta.properties造成的。
解决办法:
解决方案:进入自己的配置文件conf下面,找到自己的server.properties配置,编辑查看自己日志文件的配置目录,然后删除日志文件下面主机生成的文件,然后重新启动Kafka就可以了
日志文件的配置目录有如下配置文件:
通过命令精确查找到文件目录:(该目录下的其他文件也可以)
例如:[root@hadoop102 ~]# find / -name meta.properties
找到后删除该目录下的文件
注意所在目录,千万不要误删了其他文件
保险的方法是写全文件路径rm -rf /var/local/kafka/data/*
[root@hadoop102 data]# rm -rf ./*
二、集群卸载
搭建过程冲难免出现一些难缠的问题,如果实在不会解决可以考虑卸载重装
卸载
1.卸载cloudera环境
service cloudera-scm-agent stop
service supervisord stop
systemctl stop cloudera-scm-server
yum remove cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
umount /run/cloudera-scm-agent/process
清理目录与软连接:
rm -rf /opt/cloudera/
cd /etc/alternatives
ll |grep “/opt/cloudera” |awk ‘{print $9}’|xargs rm -rf
清理用户:
mysql清理数据库:
(drop数据库)
清理磁盘(dn等数据目录)
根据不同配置目录清理:
rm -rf /var/log/hadoop*
rm -rf /run/cloudera*
rm -rf /var/lib/cloudera*
rm -rf /var/log/cloudera*
rm -rf /dfs/*
rm -rf /etc/hadoop*
三、hdfs权限问题终极解决办法
运行以下三条命令:
groupadd supergroup
usermod -G supergroup root
su - root -s /bin/bash -c "hdfs dfsadmin -refreshUserToGroupsMappings"
然后对文件夹权限进行修改
[root@cdh1 bin]# hdfs dfs -chmod -R 777 /
有收获?希望烙铁们来个三连击,让更多的同学看到这篇文章
1、烙铁们,关注我看完保证有所收获,不信你打我。
2、点个赞呗,可以让更多的人看到这篇文章,后续还会有很哇塞的产出。
本文章仅供学习及个人复习使用,如需转载请标明转载出处,如有错漏欢迎指出
务必注明来源(注明: 来源:csdn , 作者:-马什么梅-)