CDH5.8.2最详细安装教程

1 软件准备

安装环境:系统是CentOS7,64位,安装过程中的所有软件需适应这个系统。本文是使用root用户安装。

使用linux命令可查看自己的操作系统:

注意:如果在虚拟机上安装CentOS7,使用了最小安装,在启动CM的时候可能可能会报pstree找不到的错误。

1 [root@master ~]# uname -a
2 Linux master 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

注意:本文中的linux命令如果直接复制执行容易导致不可用。

整体把握:对所有节点:解压cm到/opt目录下,解压后会生成两个目录

1、cloudera  

2、cm-5.8.2

其中cloudera目录下有两个空目录csd 和 parcel-repo ,其中parcel-repo是用来存放parcels(三个)文件的

或者也可以仅在master上解压,然后scp到其它节点。

所以,master需要手动安装的是CM和parels(三个文件), 而slave只需要安装CM, 在CDH初始化的过程中会自动把parces等文件复制到slave节点上。

集群节点设定:

master,slave01 ,slave02,slave03

1.1 离线下载CDH和CM软件包

以下软件最好先离线下载好:

(1)到官网下载CDH的parcels,包括三个文件(每个版本都需要对应的以下三个文件),这三个文件是CDH主程序运行包,所有hadoop框架就在这些包中,仅需要在hadoop集群上的master节点上安装的:

CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel

CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha1

manifest.json

(2)在官网下载CDH管理包CM,这个是在hadoop集群的所有节点上都需要安装的管理集群的软件包。

cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz

(3) CDH依赖jdk,需要下载比较新的版本的jdk,本安装使用1.8版本:需要在hadoop集群的所有节点上安装jdk。

jdk-8u45-linux-x64.tar.gz

(4)安装mysql数据库服务,至少需要一个节点安装mysql数据库,为了平衡集群压力,可以在所有节点安装msyql服务,把有些服务分散放在其它节点上。 mysql服务的安装可能有多种方式。本教程通过rpm和yum结合的方式。需要注意:mysql数据库需要和(5)中的java驱动版本匹配。(可以参考博文:https://www.cnblogs.com/junzi/p/6893122.html

(5)在安装了mysql服务的节点上安装mysql数据库的java驱动程序:

mysql-connector-java-5.1.46.tar.gz

2 基础环境搭建

2.1 创建一台linux虚拟主机,我的是CentOS7系统

(1)VMware中新建一台虚拟linux电脑。建立过程中一定要记录下来IP,子网掩码,网关,DNS 。推荐虚拟机配置如下

(2)开机后使用ip add命令查看ip等信息

(3)更新yum源。执行命令:yum -y update 。如果更新或下载的网速较慢,可以更换为阿里的yum源或网易的yum源,这些国内的源。阿里云的yum源地址:

文件下载地址: http://mirrors.aliyun.com/repo/Centos-7.repo

备份并替换系统的repo文件

cp Centos-7.repo /etc/yum.repos.d/ 
cd /etc/yum.repos.d/ 
mv CentOS-Base.repo CentOS-Base.repo.bak 
mv Centos-7.repo CentOS-Base.repo
#更新
yum clean all 
#服务器的包信息下载到本地电脑缓存起来
yum makecache 
yum update -y

(4) 修改hostnamemaster 。使用命令:

hostnamectl set-hostname master
#使用hostname命令查看生效
master

 

(5)修改静态IP。(省略)

(6)关闭防火墙

#查看防火墙状态:
firewall-cmd --state
#关闭防火墙:
systemctl stop firewalld.service
#禁止防火墙开机启动: 
systemctl disable firewalld.service
#查看服务是否开机启动: 
systemctl is-enabled firewalld.service

(7)关闭SELINUX

#查看关闭状态
/usr/sbin/sestatus -v
#关闭方法
vi /etc/selinux/config
#修改文件里的SELINUX=disabled

(8)打开句柄限制,使用进入编辑配置文件命令:

vi /etc/security/limits.conf
#根据当前用户名,添加
root soft nproc 20470
root hard nproc 163840
root soft nofile 10240
root hard nofile 655360
root soft stack 10240
#执行命令,编辑login配置文件
vi /etc/pam.d/login
#添加
session    required     pam_limits.so

(9)修改hosts文件。此步骤需要最好提前安排好其它节点的ip和hostname,提前添加到hosts配置文件中。在后面的步骤中能省略

示例:

 

#执行命令: 
vi /etc/hosts
#添加信息:
192.168.30.136 master
192.168.30.137 slave01
192.168.30.138 slave02
192.168.30.139 slave03

 

(10)如果是root用户,需要各节点的root用户的ssh。则需要额外修改一下配置:允许root用户ssh,且不需要密码。

 

#执行命令:
vi /etc/ssh/sshd_config
#调整PermitRootLogin参数值为yes

 

调整PermitRootLogin参数值为yes,并打开选项

 

 ②PermitEmptyPasswords选项打开,并修改值为yes

 

需要重启ssh服务:

service sshd restart 
# 或者   
/etc/initd.d/sshd restart

2.2 克隆集群所需的机器

 

将以上2.1操作的主机作为master主机,完整克隆机器master, 克隆出来3台节点机器。三台节点机的hostname分别设定为:slave01 ,  slave02 ,  slave03。对所有节点机器,slave01 ,  slave02 ,  slave03。分别设置静态ip,执行命令。

#修改主机名
hostnamectl set-hostname slave0x
#修改静态IP,修改ip分别为137,138,139等指定ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33

2.3 打通master到其它节点的root用户的ssh

ssh可以使用root用户,也可以使用非root用户。本教程使用root用户安装,执行root的ssh配置。CDH的ssh配置,仅需要master的单向ssh即可。即:master可以免密访问其它slave节点。以下所有操作都是使用root用户。感觉建立一个hadoop用户,使用hadoop用户安装比较好。但是如果使用非root用户,需要配置非root用户和root用户的免密切换。使用root用户安装会更顺利,不会有权限问题。但即使是root用户,在CDH中使用命令行的时候,也需要非root用户,比如hdfs用户,yarn用户。

  • 登陆master节点

执行命令,产生密钥

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  • 登陆其它slave节点
#在当前节点的当前用户下生成.ssh目录
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  • 再登陆master节点
#执行远程复制命令,将master的公钥放在其它slave节点上
scp ~/.ssh/authorized_keys root@slave0X:~/.ssh/
  • 再登陆所有节点(包括master和slaves)
#修改目录权限
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

最后,验证ssh命令是否生效。在master上分别免密登陆所有节点,包括自己。

2.4下载安装所需辅助软件或有用工具

所有集群的节点创建好后,并且分配了静态ip后,开始执行安装。【注意:软件安装需要在所有节点上分别独立执行。如果是先安装再克隆的话可能在后续中会报各种惊喜的错误】。这些软件不一定全部会使用到,感兴趣可以仔细研究。为了方便,我把这些软件作为大数据应用上linux的常用软件。总之,软件有冗余,也是为了防止在安装和使用CDH的时候不报错。自定义安装某些常用工具,执行命令:

yum install -y openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel curl wget openssh-clients zlib-devel autoconf automake cmake libtool openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd lrzsz bzip2
#安装第二批依赖包(即使与前面有重复也不影响)
yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb

 2.5 在所有节点上安装jdk

需要在集群的所有节点上安装jdk,【登录所有节点】在所有节点上操作:

#查看是否自带OpenJDK:
rpm -qa | grep java
#如果有,卸载自带的JDK
rpm -e --nodeps 包名

 

开始安装jdk:

  • 情况1:可以使用rpm安装包安装:

     先离线下载rpm安装包 jdk-8u45-linux-x64.rpm  /usr/local/src中。执行命令:

 

rpm -ivh jdk-8u145-linux-x64.rpm
#-ivh:安装时显示安装进度
#安装目录默认在  /usr/java, 配置环境变量在 /etc/profile 文件中,在文件尾部追加环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_145
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 情况2: 使用离线安装包jdk-8u45-linux-x64.tar.gz

cd /usr/local/src
#上传安装包
rz
#解压
tar –xzf /usr/local/src/jdk-8u45-linux-x64.tar.gz –C /usr/java/
#配置环境变量
vim /etc/profile
#在文件末尾添加配置信息:
export JAVA_HOME=/usr/java/jdk1.8.0_145
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

以上两种情况保存后刷新,执行命令:

source /etc/profile

完成后,在所有节点上验证jdk是否安装成功:执行命令:

 

java -version

 

2.6 安装MySQL服务

只需要在master节点上安装mysql服务。CDH的配置依赖mysql数据库,当然也可以使用Oracle数据库。

注意:最好在每个节点上都安装mysql服务,因为有些hadoop的组件的服务依赖数据库,这样可以把这个组件的服务安装到任何一个节点上,分担master节点的压力。

 【登陆所有节点,本次在所有节点上都安装mysql】

#进入资源目录
cd /usr/local/src
#获取mysql源安装包
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 
#安装mysql源
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
#检查mysql源是否安装成功
yum repolist enabled | grep "mysql.*-community.*"
#用yum命令安装mysql
yum install mysql-community-server
#配置mysql的文件目录,查看MYSQL配置文件加载顺序:
mysqld --help --verbose | grep -A1 -B1 cnf

 

  修改/etc/my.cnf 配置文件内的文件目录

datadir=/data/mysql/data
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
log-error=/data/mysql/log/mysqld.log
 

 

 

其中:
SQL_MODE:通过对其正确的设置可以完成一些约束检查的工作,设置时,在配置文件my.cnf 中配置进行全局的设置。
STRICT_TRANS_TALES(严格模式):
        只对支持事务的表启用严格模式
NO_AUTO_CREATE_USER:
        禁止GRANT创建密码为空的用户。
NO_ENGINE_SUBSTITUTION:
        启用后,若需要的存储引擎被禁用或未编译,则抛出错误;未启用时将用默认的存储引擎代替,并抛出一个异常。

 创建mysql文件目录

[root@localhost jar]# mkdir -p /data/mysql/data
[root@localhost jar]# mkdir -p /data/mysql/log

生成首次登录随机密码

mysqld --initialize
通过上面命令会在 /data/mysql/log/mysqld.log 中生成随机码,随机码用来首次登录mysql。
ujkq0>4*/yMD

 

 修改mysql 文件目录所有者为 mysql 用户

chown -R mysql:mysql /data/mysql

启动mysql

systemctl start mysqld.service

在使用启动命令后如果报错: Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

可能是没有关闭SELinux。 解决办法:vim /etc/selinux/config    修改SELINUX=disabled  。然后重启即可

关闭并重启mysql

systemctl stop mysqld.service
systemctl start mysqld.service

如果再次启动报错,就重启Linux 系统。

用生成的随机密码登录mysql

mysql -uroot -p'ujkq0>4*/yMD'

登录后进入mysql 命令行

卸载mysql

如果启动报错,根据错误查看原因,如果实在解决不了,卸载mysql 重新装。
查看已经安装过的组件
rpm -qa | grep -i mysql

 

 

 

 用yum -y remove 卸载所有mysql

yum -y remove mysql57-community-release-el7-11.noarch yum -y remove mysql-community-common-5.7.19-1.el7.x86_64
卸载后再用 rpm -qa | grep -i mysql 查看,直至全部卸载
删除/data/mysql 目录
rm -rf /data/mysql

可参考: http://www.cnblogs.com/wy123/archive/2017/06/02/6932166.html

修改ROOT用户密码

用生成的随机密码登录进入 mysql 命令行后,需要重置密码。重置密码前,先查看validate_password插件是否安装,可通过查看参数,如果没有安装,则输出将为空。
SHOW VARIABLES LIKE 'validate_password%';

如果不为空,在重置时不想密码设置得那么复杂。需要设置validate_password_policy 参数:

set global validate_password_policy=0;
这样,判断密码的标准就基于密码的长度了。这个由validate_password_length参数来决定。
validate_password_length默认是8所以密码长度必须大于8。
如果为空,可直接设置密码,密码长度可小于8。
设置密码:
set password=PASSWORD('12345678'); 

 设置完密码后,需要用新密码重新登录

 修改user表,把Host表内容修改为%

进入mysql

use mysql;
update user set host='%' where host='localhost';
-- 删除root用户的其他host

 

创建CDH相关数据库

create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database hue default charset utf8 collate utf8_general_ci; -- 授权: grant all privileges on *.* to 'root'@'%' identified by '12345678' with grant option; flush privileges;

 

 2.7 ntp时钟同步(必须root用户)

 集群设置:master是管理机,所有其它slave节点不能连网同步时间,仅通过与master主机连接实现与master的时间同步。在所有节点上安装ntp服务。在master节点上开通ntp服务器功能,提供同步时间。参考博文:https://www.cnblogs.com/harrymore/p/9566229.html

 【登录所有节点,包括master和slaves】

(1)检查ntp是否安装

rpm -qa|grep ntp

(2)如果没有安装,进行安装

yum -y install ntp

(3)修改ntp配置文件

【登录master节点】

vi /etc/ntp.conf

修改内容如下:

a) 修改1(授权192.168.1.0网段上的所有机器可以从这台机器上查询和同步时间)

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 修改为
restrict 192.168.30.0 mask 255.255.255.0 nomodify notrap
#ip地址根据自己的网段进行配置

b) 修改2(集群在局域网中,不使用其他的网络时间

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst  为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

c) 添加3 (当该节点丢失网络连接,依然可以作为时间服务器为集群中的其他节点提供时间同步

server 127.127.1.0
fudge 127.127.1.0 stratum 10

d) 修改/etc/sysconfig/ntpd 文件

vim /etc/sysconfig/ntpd
#增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes

e) 重新启动ntpd服务

service ntpd status
service ntpd start
#在master上设置ntpd服务开机启动:
chkconfig ntpd on

【登录其它所有slaves节点上】

a) 在slave节点上设置ntpd服务开启,且开机启动

#在slave节点上设置ntpd服务关闭,且关闭开机启动
service ntpd start
chkconfig ntpd on

b) 其它slave节点的同步设置,同步master的时间 【必须root用户操作】

#配置10分钟与时间服务器同步一次
crontab –e
#编写定时任务如下:
*/10 * * * * /usr/sbin/ntpdate master
#修改任意机器的时间,验证同步功能
date -s "2017-9-11 11:11:11"
#十分钟后查看机器是否与时间服务器同步
date

 遇到的问题:以上ntp服务配置完成后,可能在CM管理界面会出现slaves节点的 “时钟偏差” 报错提示。虽然设定了定时同步时间,但是CM会检查每个节点上的ntp服务是否使用,因为以上的配置中我们关闭了。之所以关闭也是因为,如果开启了ntp服务,那么在从节点上执行ntpdate master的命令时会报错:

[root@slave01 ~]# ntpdate master
19 Dec 22:07:14 ntpdate[9787]: the NTP socket is in use, exiting

可能是ntp的端口冲突问题。解决办法:

#step1: 将定时任务的命令修改为
*/10 * * * * /usr/sbin/ntpdate -u master
#step2:开启slaves所有节点的ntp服务并开机启动
service ntpd start
chkconfig ntpd on

以上两步操作完稍等片刻,CM界面就不报错了。

参考:https://blog.csdn.net/qq_28351465/article/details/82995616

3 Cloudera Manager的安装

CM用于管理集群,需要将cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz   上传到所有节点。

3.1 上传并解压CM安装包

【登录所有节点,包括master和slaves】,所有集群中的机器都需要安装。

解压cm到/opt目录下,生成两个目录

1、cloudera   2、cm-5.8.2 。

其中cloudera目录下有两个空目录csd 和 parcel-repo ,其中parcel-repo是用来存放CDH主程序的,即parcels(三个)文件。也可以仅上传到master后再解压,然后scp到其它节点的 /opt目录下

#先上传到master节点的/usr/local/src目录下
#切换目录
cd /usr/local/src
#上传
rz
#scp到其它所有机器上的/usr/local/src目录下
#复制到slave01节点
scp /usr/local/src/cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz root@slave01:/usr/local/src/
#复制到slave02节点
scp /usr/local/src/cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz root@slave02:/usr/local/src/
#复制到slave03节点
scp /usr/local/src/cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz root@slave03:/usr/local/src/
#解压所有的CM包在各自节点的/opt目录下,在所有节点上执行
tar -xzf /usr/local/src/cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz -C /opt

 

3.2 创建cloudera-scm用户

【登录所有节点】,在所有节点上创建cloudera-scm用户

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

         --system 创建一个系统账户

         --home 指定用户登入时的主目录,替换系统默认值/home/<用户名>

         --no-create-home 不要创建用户的主目录

         --shell 用户的登录 shell 名

         --comment 用户的描述信息

        注意:

         Cloudera Manager默认用户为cloudera-scm,创建具有此名称的用户是最简单的方法。 安装完成后,将自动使用此用户

3.3 配置CM-agent

【登录所有节点】

vim /opt/cm-5.8.2/etc/cloudera-scm-agent/config.ini
#修改server_host为master
server_host=master

3.4 配置CM的数据库

【登录所有安装mysql的节点】

 添加mysql connector包

#先登录master
cd /usr/local/src
rz
#上传mysql-connector-java-5.1.46.tar.gz
#分发到其它节点
scp /usr/local/src/mysql-connector-java-5.1.46.tar.gz root@slave01:/usr/local/src
scp /usr/local/src/mysql-connector-java-5.1.46.tar.gz root@slave02:/usr/local/src
scp /usr/local/src/mysql-connector-java-5.1.46.tar.gz root@slave03:/usr/local/src
#对所有节点解压
tar -xzf mysql-connector-java-5.1.46.tar.gz
#移动jar包
mkdir /usr/share/java
cd /usr/local/src/mysql-connector-java-5.1.46
cp mysql-connector-java-5.1.46-bin.jar /usr/share/java
cd /usr/share/java
#必须修改为名称为mysql-connector-java.jar的包名,否则找不到
ln -s mysql-connector-java-5.1.46-bin.jar mysql-connector-java.jar

【只登录master】,集群中cm库只能有一个。所以只在一个节点上操作

在mysql中创建cm库

执行命令:

/opt/cm-5.8.2/share/cmf/schema/scm_prepare_database.sh mysql cm -hmaster -uroot -p12345678 --scm-host master scm scm scm

参数解释依次是:

mysql数据库用的是mysql,如果安装过程中用的oracle,那么该参数就应该改为oracle

cm:表示在mysql数据库中创建cm database

-h:Database host 表示安装数据库的主机名 (我是在在master上安装的MySQL数据库,所以我指定了master)

-u: mysql数据库用户名

-p: mysql数据库登录密码

--scm-host master :CMS的主机,一般是和mysql安装的主机是在同一个主机上

最后三个scm参数是:数据库名,数据库用户名,数据库密码 

执行完创建cm库的命令后,只有当看到All done, your SCM database is configured correctly!这句话时,表明命令操作是成功的.在执行这行命令后,会遇到很多问题,最常见到的是用户权限问题,这个自行百度吧,或者查看我的另一篇博客:安装CDH过程中所遇到的问题整理。

 3.5 将cdh三个安装文件上传到master的parcel-repo目录下

【登录master节点】

cd /opt/cloudera/parcel-repo/
rz
#上传CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel
#上传CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha1
#上传manifest.json
#修改CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha1的文件名为CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha
mv CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha1 CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha

3.6 启动CM:

【在master节点上】启动cm-server

[root@master parcel-repo]# /opt/cm-5.8.2/etc/init.d/cloudera-scm-server start
Starting cloudera-scm-server:                              [  确定  ]
[root@master parcel-repo]# 

【在所有节点上,包括master和slaves】启动cm-agent

/opt/cm-5.8.2/etc/init.d/cloudera-scm-agent start

注意:启动过程非常慢,Manager 启动成功需要等待一段时间,过程中会在数据库中创建对应的表需要耗费一些时间。

一段时间过后,可以使用下列命令在master上查看7180端口是否已经启动:  netstat -anp | grep 7180   如果查看被占用则表示安装成功了!!!

进入浏览器输入地址,例如:http://192.168.30.136:7180  可以登录cm管理集群,安装cdh子功能。

 

 

 

 

 

posted @ 2019-12-14 22:38  cknds  阅读(1193)  评论(0编辑  收藏  举报