CDH集群的搭建【亲自搭建并把详细流程做了记录,对于初学很友好】

本文档详述了在阿里云服务器上搭建CDH集群的完整过程,包括集群准备、安装、卸载、HDFS权限问题的解决。涉及步骤包括修改hosts文件、关闭防火墙和selinux、时间同步、SSH无密登录配置、JDK和MySQL的安装、CM部署、Kafka报错处理等。此外,还提供了集群卸载的清理步骤和解决HDFS权限问题的命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

最近接到搭建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 , 作者:-马什么梅-)

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一马什么梅一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值