从零开始搭建CDH(一)

      第一次搭建CDH,留个文档记录下出现的问题和学到的东西。主要参考:

        【CDH实战01】基于CentOS7的CDH6.3.2完全分布式集群搭建【上】

        【CDH实战02】基于CentOS7的CDH6.3.2完全分布式集群搭建【下】

          如何从0开始学习大数据技术

          2020年12月31日CDH6.3.2集群搭建全流程教程 

        这几篇文章对整个流程做了详细的讲解,感谢作者~

目录

1. CDH概述

2. 安装准备工作

2.1 文件准备

2.2 服务器准备

2.2.1 建立虚拟机

2.2.2 设置主机名映射(所有节点)

2.2.3 设置SSH免密登陆(所有节点) 

 2.2.4 关闭并禁用防火墙(所有节点)

2.2.5 关闭SELINUX(所有节点) 

2.2.6 禁用透明大页(所有节点)

2.2.7 修改Linux swappiness参数(所有节点) 

2.2.8 安装JDK(所有节点) 

2.2.9 上传JDBC依赖包(所有节点) 

2.2.10 时间同步 

2.2.11 安装MySQL(master节点,本例中node0) 

3 安装CDH

3.1 搭建本地yum源

3.1.1 安装并启动Apache http 

3.1.2 上传CM安装文件

3.1.3 创建yum仓库

3.1.4 配置yum仓库文件 

3.2 安装服务

​3.3 初始化cloudera-manager-server

3.3.1 在mysql中为CMServer创建数据库

3.3.2 执行CM初始化脚本

3.3.3 启动cm-server服务


1. CDH概述

        CDH是Cloudera’s Distribution Including Apache Hadoop的简称,是基于稳定版本的Hadoop组件进行编译的,简单来讲,CDH就是一个拥有集群自动化安装中心化管理集群监控报警功能,用来集中管理Hadoop集群的工具。它简化了大数据平台的安装,缩短集群安装时间,减小运维工作量,极大的提高了集群管理的效率。

2. 安装准备工作

2.1 文件准备

        今年2月份开始Cloudera全面下架了免费的安装包下载渠道,未订阅授权的用户无法使用CDH6.3.3和之后的版本,此处使用CDH6.3.2版本进行集群搭建。下图为CDH6.3.2对应的组件版本。

        因为使用离线安装的方式,需要提前下载好需要用到的安装包,参考文章的博主提供了下载渠道。

 文件列表如下

2.2 服务器准备

        本次需要通过VMware建立三台虚拟机作为服务器。

2.2.1 建立虚拟机

        选择的操作系统是CentOS 7: CentOS-7-x86_64-DVD-1708.iso ,下载链接来自参考文章。

        虚拟机内存和硬盘的分配如下,安装完成之后每个结点占用的硬盘空间在20GB左右,所以在安装虚拟机的时候硬盘分配不能少于30GB,否则会出现空间不足的错误。

        首先新建一台2G内存的虚拟机并配置网络,方便进行克隆,之后再修改这台虚拟机内存为6G。网络配置可见:VM虚拟机centOS网络设置 。

结点名称内存大小(G)硬盘大小(G)IP地址
node0660192.168.137.100
node1260192.168.137.101
node2260192.168.137.102

        将新建的虚拟机进行两次克隆,得到3台虚拟机,修改克隆出来机器的网卡配置。参考文章:CentOS7虚拟机克隆,且成功互ping

        删除UUID (文章中说还需要删除MAC地址信息HWADDR,我的ifcfg-ens33中无此信息),并分别修改两台克隆机ip地址为192.168.137.101、192.168.137.102,保存退出,重启网络。(参考文章中提到需要删除/etc/udev/rules.d/70-persistent-net.rules,我的机器中没有这个文件,原因及文件作用暂不深究,发现一相关文章,马克一下:70-persistent-net.rules以及网卡配置详解

 service network restart(或systemctl restart network )

        配置好后,试验虚拟机互ping成功 。

2.2.2 设置主机名映射(所有节点)

         接下来修改hostname,以192.168.137.101这台机器为例

修改hostname:

hostnamectl set-hostname node1 #修改
hostname                       #查看

修改 hosts文件:

        增加网络映射 ,在文件后增加如下内容

vi /etc/hosts                  #修改hosts文件

 验证能否ping通:

ping -c 4 node2                #尝试ping node2

2.2.3 设置SSH免密登陆(所有节点) 

生成密钥对:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa #生成密钥

向其他节点分发密钥 :

ssh-copy-id node1       #分发密钥
yes
密码

 测试SSH:

ssh node1               #测试

 2.2.4 关闭并禁用防火墙(所有节点)

查看防火墙状态:

systemctl status firewalld #查看防火墙服务运行状态

关闭防火墙 :

systemctl stop firewalld    #关闭防火墙
systemctl disable firewalld #禁用防火墙开机自启

验证防火墙状态:

systemctl status firewalld  #查看防火墙状态为关闭状态

2.2.5 关闭SELINUX(所有节点) 

        SELINUX相关知识:理解Linux下的SELinux

查看SELINUX状态:

getenforce        #查看SELINUX服务的运行状态

关闭SELINUX:

        临时关闭 

setenforce 0      #临时关闭

        永久关闭

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #永久关闭

验证SELINUX状态:

cat /etc/selinux/config   #验证 

2.2.6 禁用透明大页(所有节点)

        透明大页相关知识:

          CENTOS 7 关闭透明大页

          Huge pages (标准大页)和 Transparent Huge pages(透明大页)

查看透明大页的设置和启动状态:

cat /sys/kernel/mm/transparent_hugepage/defrag
cat /sys/kernel/mm/transparent_hugepage/enabled

        使用命令查看时,如果输出结果为 [always] 表示透明大页启用了。

        [never] 表示透明大页禁用、 [madvise] 表示(只在 MADV_HUGEPAGE 标志的 VMA 中使用 THP 。

关闭透明大页:

         临时关闭

echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled

        永久关闭 

        将临时关闭命令添加到/etc/rc.d/rc.local文件中,并赋予执行权限

echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

验证修改 :

cat /etc/rc.d/rc.local

2.2.7 修改Linux swappiness参数(所有节点) 

        swappiness相关知识:swappiness参数的含义和设置

        为了避免服务器使用swap功能而影响服务器性能,一般都会把vm.swappiness修改为0(cloudera建议10以下)

cd /usr/lib/tuned
grep "vm.swappiness" * -R
sed -i s/"vm.swappiness = 30"/"vm.swappiness = 10"/g  /usr/lib/tuned/virtual-guest/tuned.conf

2.2.8 安装JDK(所有节点) 

注意:CDH的安装 要求使用指定版本的oracle-j2sdk1.8

查询是否有已经安装的jdk:

rpm -qa | grep java

        如果之前安装过Java组件,先将其卸载

yum remove java*

        我这里没有

上传安装包oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm到/opt目录 :

        在准备工作中,把安装包上传到了node0上,使用scp命令将node0上的安装包分发到node1,node2上

         SCP相关知识:Linux scp命令

scp oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm node1:/opt/

启动安装 :

rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm

查找JDK路径:

find / -name java

配置环境变量: 

echo 'export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera' >> /etc/profile
echo 'export PATH=.:$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile

        source命令相关知识:Linux下source命令详解 

验证:

java -version

2.2.9 上传JDBC依赖包(所有节点) 

        CDH节点管理和记录节点状态时,都是把节点状态保存在MySQL数据库中。

        JDBC必须在/usr/share/java目录下,且命名为 mysql-connector-java.jar

创建目录:

mkdir -p /usr/share/java

将mysql-connector-java-8.0.18.jar重命名为mysql-connector-java.jar :

        在node0中有已经上传的mysql-connector-java-8.0.18.jar

mv mysql-connector-java-8.0.18.jar mysql-connector-java.jar

将mysql-connector-java.jar移动或复制到每个节点的/user/share/java: 

cp mysql-connector-java.jar /usr/share/java/
scp mysql-connector-java.jar  node1:/usr/share/java/
...

2.2.10 时间同步 

        CentOS 7 已经启用chronyd服务保证时间同步,不需要再安装ntpd,查看chronyd状态。

systemctl status chronyd

2.2.11 安装MySQL(master节点,本例中node0) 

        解压mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz

tar Jxvf mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz

查询出来已安装的Mariadb: 

        Mariadb相关知识:Mariadb

rpm -qa|grep mariadb

卸载Mariadb,文件名为上述命令查询出来的文件 :

rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

重命名: 

mv mysql-8.0.18-linux-glibc2.12-x86_64 mysql
mv mysql /usr/local

创建数据目录:

        用来保存MySQL数据

mkdir /usr/local/mysql/data

创建并编辑my.cnf文件: 

vi /etc/my.cnf

        填入以下内容

[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
user=mysql
socket=/tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
log-error=/usr/local/mysql/error.log
pid-file = /usr/local/mysql/mysql.pid
transaction_isolation = READ-COMMITTED
character-set-server = utf8
collation-server = utf8_general_ci
lower_case_table_names = 1
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"

创建组:

groupadd mysql

创建用户:

useradd -g mysql mysql

        此处组和用户的知识点不太清楚,待以后补充‘:Linux 命令整理 groupadd useradd 详解 

修改目录权限:

        相关知识:Linux中chown和chmod的区别和用法(转)

        将 /opt/mysql给予mysql用户

chown -R mysql:mysql /usr/local/mysql

        将/opt/mysql权限设置为755(读4写2执行1) 

chmod -R 755 /usr/local/mysql

初始化mysql :

cd /usr/local/mysql
./bin/mysqld --initialize --user=mysql

尝试启动mysql: 

cd /usr/local/mysql
./support-files/mysql.server start

将mysql添加为系统服务:

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

设置开机启动:

cd /etc/init.d
chmod 755 /etc/init.d/mysql
chkconfig --add mysql
chkconfig --level 345 mysql on
service mysql restart

 配置环境变量:

echo 'export MYSQL_HOME=/usr/local/mysql' >> /etc/profile
echo 'export PATH=.:$MYSQL_HOME/bin:$PATH' >> /etc/profile
source /etc/profile

使用默认密码登录MySQL:

        找到默认密码:

cd /usr/local/mysql
cat error.log

        得到默认密码EyyQoldIr4.?使用默认密码登录,不能在init.d这个路径下输入如下命令,这样会把MySQL当成服务,具体的知识待学习补充,马克一下 Init.d的作用以及如何配置服务自启动(mysql踩坑集锦

mysql -u root -p

在MySQL8中第一次登陆需要重新设置root密码:

ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

开启远程访问: 

        mysql 创建用户并赋予用户权限详细操作

        创建一个root用户,允许任何机器登录

CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password  BY '123456';

        允许root用户在任何机器上,访问任何库,任何表(生产中根据情况配置用户和权限)

GRANT ALL ON *.* TO 'root'@'%';

        刷新系统权限相关表

        Mysql知识点总结:Flush privileges 

FLUSH PRIVILEGES;

        尝试登录

mysql -u root -p123456

3 安装CDH

3.1 搭建本地yum源

        这里选择把yum源配置在node0节点上

3.1.1 安装并启动Apache http 

        这里出现了一点波折,因为之前测试配置本地yum源的时候,在所有节点用系统镜像配置过了本地yum,见文章:配置本地yum源,无法直接按下面的方法安装httpd,所以先把所有节点的yum还原成初始设置,进入/etc/yum.repos.d/,删除修改过的CentOS-Media.repo,进入之前备份的bak文件夹,把备份的.repo拷贝出来。

cd /etc/yum.repos.d/
rm CentOS-Media.repo
cd bak
cp CentOS-Media.repo ../
ll

        然后清空和重建yum的缓存

yum clean
yum makecache

        之后可以在node0节点按如下步骤安装httpd服务

yum install httpd -y     #安装Apache http
systemctl start httpd    #启动Apache http
systemctl enable httpd   #开机自启动Apache http

        安装完后可通过IP地址访问 

3.1.2 上传CM安装文件

       在node0节点完成以下操作,创建安装文件http根目录

mkdir -p /var/www/html/cm6

        上传文件到http根目录,上传后查看文件

ll /var/www/html/cm6

        ​ 在浏览器中也可查看服务器http根目录下的文件。

3.1.3 创建yum仓库

        在node0节点完成以下操作

cd /var/www/html/cm6
yum install -y createrepo
createrepo .

3.1.4 配置yum仓库文件 

         在所有节点完成以下操作

vim /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name=Cloudera Manager 6.3.1
baseurl=http://node0/cm6
gpgcheck=0
enabled=1
autorefresh=0
type=rpm-md

 3.1.5 验证 

         更新仓库信息,确认本地yum源已被添加

yum clean all
yum makecache

3.2 安装服务

3.2.1 安装cm-agent

        在所有节点完成以下操作,安装cloudera-manager-agent

执行安装

yum install -y cloudera-manager-agent

 执行结果

3.2.2  管理节点安装cm-server

        在node0节点完成以下操作,在cm的管理节点(node0)安装 cloudera-manager-server

执行安装

yum install -y cloudera-manager-server

    cloudera-manager-server安装完毕后,会自动创建/opt/cloudera/parcel-repo目录,将之前下载好的CDH安装包CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel上传到/opt/cloudera/parcel-repo目录,上传完成后计算校验和

cd /opt/cloudera/parcel-repo
sha1sum CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel | awk '{ print $1 }' > CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha

3.3 初始化cloudera-manager-server

3.3.1 在mysql中为CMServer创建数据库

        在node0节点完成以下操作

mysql -uroot -p123456
create database cmserver character set 'utf8';
show databases;
exit

3.3.2 执行CM初始化脚本

        在node0节点完成以下操作

/opt/cloudera/cm/schema/scm_prepare_database.sh mysql cmserver root 123456

        /opt/cloudera/cm/schema/scm_prepare_database.sh 数据库类型 库名 用户 密码 

        这里有个波折,报时区不一致错误,参考如下文章可解决。

        The server time zone value 'EDT' is unrecognized or represents more than one time zone.

3.3.3 启动cm-server服务

        在node0节点完成以下操作

启动cm-server服务 

systemctl start cloudera-scm-server.service

查看服务运行状态

        通过端口监听检查服务启动情况,cm-server默认使用7180端口进行访问

netstat -anp| grep 7180

        查看到端口已经正常服务,打开浏览器进入 node0:7180(http://192.168.137.100:7180) (需要配置主机名映射,或者使用ip访问) 

账号、密码:admin、admin

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值