Centos7 环境下安装CDH 首先要安装cloudera manager 然后通过cm的图形界面来安装CDH 和一些相关组件 需要安装mysql来存储cloudera manager的一些数据 也可以使用其他数据库
使用安装包方式进行安装 比yum方式安装速度快

服务端/Server:
Cloudera Manager 的核心。主要用于管理 web server 和应用逻辑。它用于安装软件,配置,开始和停止服务,以及管理服务运行的集群。

代理/agent:
安装在每台主机上。它负责启动和停止的进程,部署配置,触发安装和监控主机。

数据库/Database:
存储配置和监控信息。通常可以在一个或多个数据库服务器上运行的多个逻辑数据库。例如,所述的 Cloudera 管理器服务和监视,后台程序使用不同的逻辑数据库。

Cloudera Repository:由cloudera manager 提供的软件分发库。

客户端/Clients:
提供了一个与 Server 交互的接口。
Cloudera Manager包括server端和agent;server端主要作用是监控集群分发配置集群等,agent端主管集群各节点。
CDH是CM的安装包,本地或者云端,其中包括hadoop的生态系统需要的所有组件,通过Cloudera Manager统一管理和安装

集群使用vmware workstation 搭建模拟环境 网络配置使用NAT模式
集群主机设置 共三个服务器 cdh.master 设置为主服务器

ip地址

hostname

CM管理软件

192.168.158.20

cdh.master

Cloudera Manager Server&Agent ,mysql

192.168.158.21

cdh.slave1

Cloudera Manager Agent

192.168.158.22

cdh.slave2

Cloudera Manager Agent

以下操作为所有节点都需要执行的操作和准备的工具

步骤一 :首先要准备java环境 安装jdk 设置JAVA_HOME环境变量

/usr/java/jdk1.8.0_221

注意 jdk要安装在/usr/java/ 里 否则Cloudera Manager找不到会报错

centos7 安装sniproxy centos7安装semanage_数据库

java环境变量如下:

export JAVA_HOME=/usr/java/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

步骤二:设置主机名 hostname

[root@localhost ~]# hostname                                      # 查看当前的hostnmae
localhost.localdomain
[root@localhost ~]# hostnamectl set-hostname cdh.master           # 使用这个命令会立即生效且重启也生效
[root@localhost ~]# hostname
cdh.master

步骤三: 设置hosts 修改/etc/hosts文件 改成如下内容:

192.168.158.20  cdh.master
192.168.158.21  cdh.slave1
192.168.158.22  cdh.slave2

注意:源文件内容需要删除 否则会出现错误 具体错误在本文最后常见问题里会说明

步骤三: 关闭防火墙

[root@localhost ~]# systemctl stop firewalld                           #关闭防火墙
[root@localhost ~]# systemctl disable firewalld                        #开机禁用防火墙
[root@localhost ~]# systemctl status firewalld                         #查看防火墙状态是否关闭

步骤四:关闭selinux

[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=disabled

重启才能生效
重启后检查

[root@localhost ~]# sestatus -v
SELinux status:                 disabled                                #已经关闭

步骤五:所有节点设置ssh无密码登陆
所有节点都需要执行 生成秘钥 然后发送到其他所有节点 实现ssh免密码登录 如下是主节点的操作 其他节点也如此操作

[root@cdh ~]# yum -y install openssh-clients                 #安装ssh
[root@cdh ~]# ssh-keygen -t rsa                              #一直按回车 生成秘钥
[root@cdh ~]# ssh-copy-id cdh.slave1                         #发送到cdh.slave1节点
[root@cdh ~]# ssh-copy-id cdh.slave2                         #发送到cdh.slave2节点

步骤六:NTP服务器设置(用于不同节点间实现时间同步)

[root@localhost ~]# yum -y install ntp                   #安装ntp
[root@localhost ~]# vim /etc/ntp.conf                    #修改配置 设置
#注释掉所有server *.*.*的指向,新添加一条可连接的ntp服务器  我使用的是阿里云的NTP服务器
server ntp1.aliyun.com iburst
#在其他节点上把ntp指向master服务器地址即可
server 192.168.158.20 iburst
#安装完成后设置ntp开机启动并启动ntp
systemctl enable ntpd
systemctl start ntpd
#查看状态
systemctl status ntpd

步骤7:各节点下载cloudera manager 我用迅雷下载 并上传到个节点 速度比较快

下载地址:https://archive.cloudera.com/cm5/cm/5/

centos7 安装sniproxy centos7安装semanage_mysql_02


我下载的是:cloudera-manager-centos7-cm5.16.2_x86_64.tar.gz

**下边开始配置主节点安装 Cloudera Manager Server ,Cloudera ManagerAgent ,mysql **

1,先安装mysql

#获取mysql rpm包
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
#安装rpm 这个rpm是为了更新yum源地址的
rpm -ivh mysql-community-release-el7-5.noarch.rpm
#使用yum在线安装
yum install -y mysql-server
#启动mysql
systemctl start mysqld

登录后修改root密码

use mysql;
update user set password=password('root') where user='root' and host='localhost';
FLUSH PRIVILEGES    #刷新立即生效

需要安装 MySQL JDBC Driver (mysql-connector-java-5.1.40.zip)

unzip mysql-connector-java-5.1.40.zip                   #解压
cd mysql-connector-java-5.1.40                          #进入目录
mkdir -p /usr/share/java/                               #驱动许放在此目录 cm会在此文件夹查找
cp mysql-connector-java-5.1.40-bin.jar /usr/share/java/mysql-connector-java.jar    #复制并修改名称

安装完mysql后 需要创建CDH服务所需的数据库和用户 后边安装时需要用到

Service

Database

Db-User

Cloudera manager server

scm

由root用户初始化数据库时创建

Activity monitor

amon

amon

Reports manager

rman

rman

Hue

hue

hue

Hive metastore server

metastore

hive

Sentry server

sentry

sentry

Cloudera navigator audit server

nav

nav

Cloudera navigator audit server

navms

navms

Oozie

oozie

oozie

CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'root';
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'root';
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'root';
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'root';
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'root';
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY 'root';
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY 'root';
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'root';

挑个账号测试一下本地能否登陆 防止后期安装cdh 链接数据库时报错
如果 新建的用户本地登录不了 远程可以登录
解决办法:我用的mysql版本是5.6 安装完数据库后 需要删除匿名用户
用root登录mysql后执行

use mysql;                                   #选择mysql库
delete from user where user='';   #删除匿名用户
FLUSH PRIVILEGES;               #刷新缓存

2,Cloudera Manager 安装(主节点)
Cloudera Manager可以说是Cloudera系列产品和组件的核心,它负责统一配置管理CDH集群,基本上本篇文章都是围绕CM的安装部署来展开的,然后再通过CM去安装CDH及其其它相关组件。
在master节点安装Cloudera Manager Server并启动 ,cloudera-manager-daemons 是运行server和agent所需要的
刚才下载好的cloudera-manager包解压到/opt/目录下

tar -zxvf cloudera-manager-centos7-cm5.16.2_x86_64.tar.gz -C /opt/

注意:在主机节点创建如下的目录,否则容易报错,7180端口起不来。
mkdir -p /var/lib/cloudera-scm-server
mkdir -p /var/lib/cloudera-scm-agent
mkdir -p /var/lib/cloudera-scm-server-db/data

3,初始化数据

cd /opt/cm-5.16.2/share/cmf/schema                              #进入目录
#初始化数据
#scm_prepare_database.sh [-数据库类型] [-h主机名 [-u用户名] [-p密码]      [主机地址] [创建的数据库名] [用户] [密码]
./scm_prepare_database.sh mysql -hlocalhost -uroot -proot --scm-host localhost scm root root

在master和node节点安装Cloudera Manager Agent

#因为Cloudera Manager Server 与Cloudera Manager Agent 在一个cm包中 所以除主节点外 其他节点都要解压安装cm包
tar -zxvf cloudera-manager-centos7-cm5.16.2_x86_64.tar.gz -C /opt/  
#修改 cloudera-scm-agent/config.ini中的server_host为主节点主机名
vim /opt/cm-5.16.2/etc/cloudera-scm-agent/config.ini
# 改成主节点主机名.
server_host=cdh.master

# 各节点创建cm用户
useradd --system --home=/opt/cm-5.16.2/run/cloudera-scm-server --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
#如果没有安装psmisc 需要安装一下 (否则会报:cloudera-scm-agent:行109: pstree: 未找到命令)
yum install -y psmisc

#主节点启动
/opt/cm-5.16.2/etc/init.d/cloudera-scm-server start
/opt/cm-5.16.2/etc/init.d/cloudera-scm-server stop #停止
#各节点启动
/opt/cm-5.16.2/etc/init.d/cloudera-scm-agent start
/opt/cm-5.16.2/etc/init.d/cloudera-scm-agent stop  #停止

下载CDH安装包

在 https://archive.cloudera.com/cdh5/parcels/5.16.2/ 找到文件对应的版本

centos7 安装sniproxy centos7安装semanage_centos7 安装sniproxy_03


使用迅雷下载红框内三个文件 然后上传到主机 目录:

[root@cdh parcel-repo]# pwd
/opt/cloudera/parcel-repo

上传完毕后修改目录文件权限属性

chown cloudera-scm:cloudera-scm -R /opt/cloudera/parcel-repo/   #修改权限属性
#注意 一定要修改sha1名称为sha
mv CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel.sha1 CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel.sha
#修改后parcel-repo文件夹如下
-rw-r--r-- 1 cloudera-scm cloudera-scm 2132782197 8月  20 14:28 CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel
-rw-r--r-- 1 cloudera-scm cloudera-scm         41 8月  20 14:32 CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel.sha
-rw-r--r-- 1 cloudera-scm cloudera-scm      66804 6月  18 21:18 manifest.json`在这里插入代码片`

主节点执行如下操作
优化交换分区

echo "vm.swappiness = 10" >> /etc/sysctl.conf
sysctl -p

禁用透明大页面压缩

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

并将上面的两条命令写入开机自启动/etc/rc.local

CDH相关配置文件位置:

/etc/hadoop/conf

日志位置:

/opt/cm-5.16.2/log

数据库与日志相关配置文件在目录:

/opt/cm-5.16.2/etc/cloudera-scm-server

登录web界面 安装cdh
http://192.168.158.20:7180 账号:admin
密码:admin

1.登录web界面 配置集群安装CDH

centos7 安装sniproxy centos7安装semanage_centos7 安装sniproxy_04


2 .选择部署的版本

centos7 安装sniproxy centos7安装semanage_mysql_05


3.继续下一步,选择安装的CM的版本

centos7 安装sniproxy centos7安装semanage_cloudera_06


4.选择需要部署的主机

centos7 安装sniproxy centos7安装semanage_mysql_07


5.选择需要安装的clouderamanager版本 要选择与之前下载好的CDH的版本一致

centos7 安装sniproxy centos7安装semanage_mysql_08


6.percel文件下载并分发安装到集群所有节点上

centos7 安装sniproxy centos7安装semanage_mysql_09

7.开始分发安装到各节点

centos7 安装sniproxy centos7安装semanage_cloudera_10


8.检查集群中主机环境

centos7 安装sniproxy centos7安装semanage_cloudera_11


出现两个问题:

优化交换分区

echo "vm.swappiness = 10" >> /etc/sysctl.conf
sysctl -p

禁用透明大页面压缩

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

并将上面的两条命令写入开机自启动/etc/rc.local

9.群集设置 选择安装的服务组件

centos7 安装sniproxy centos7安装semanage_cloudera_12


10.群集设置 自定义角色分配

(这里一般情况下默认即可,但是如果集群中某台电脑的配置严重不行的时候,建议少分配点任务)

centos7 安装sniproxy centos7安装semanage_mysql_13


11.数据库设置

注意:这个要与前面的mysql中建立hive,oozie,hue相对应,如果之前没有建立的话,会报错

强烈建议将各个数据库与相应角色实例置于同一主机上

centos7 安装sniproxy centos7安装semanage_cloudera_14


12.审核更改,如果有特定目录的设定或者参数的设定,可以在这里进行更正

centos7 安装sniproxy centos7安装semanage_centos7 安装sniproxy_15


13.首次运行

centos7 安装sniproxy centos7安装semanage_数据库_16

14安装完毕 进入图形界面

centos7 安装sniproxy centos7安装semanage_数据库_17

常见问题:

在安装CDH时 查找不到节点如图所示:

centos7 安装sniproxy centos7安装semanage_数据库_18


查看日志:

cd /var/log/cloudera-scm-server
cat cloudera-scm-server.log

报如下错误

centos7 安装sniproxy centos7安装semanage_mysql_19


此错误 原因:/etc/hosts 如下设置

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 cdh.slave2
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 cdh.slave2
192.168.158.10  cdh.master
192.168.158.11  cdh.slave1
192.168.158.12  cdh.slave2

修改/etc/hosts 将 127.0.0.1 两行删掉, 保留内网IP和机器名的映射即可

192.168.158.10  cdh.master
192.168.158.11  cdh.slave1
192.168.158.12  cdh.slave2

然后主节点重启:systemctl status cloudera-scm-server 各节点重启:systemctl restart cloudera-scm-agent 问题解决

启动server log报错:

2019-08-21 09:02:12,762 ERROR SearchRepositoryManager-0:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: The server storage directory [/var/lib/cloudera-scm-server] doesn't exist.
2019-08-21 09:02:12,966 ERROR SearchRepositoryManager-0:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: No read permission to the server storage directory [/var/lib/cloudera-scm-server]
2019-08-21 09:02:12,966 ERROR SearchRepositoryManager-0:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: No write permission to the server storage directory [/var/lib/cloudera-scm-server]

解决: sudo mkdir /var/lib/cloudera-scm-server 注意:在主机节点创建上面的目录,否则会出错,7180端口起不来。
mkdir -p /var/lib/cloudera-scm-server
mkdir -p /var/lib/cloudera-scm-agent
mkdir -p /var/lib/cloudera-scm-server-db/data

首次运行安装时报错:Failed to install Oozie ShareLib.

centos7 安装sniproxy centos7安装semanage_数据库_20


在日志里搜索找到hdfs-site.xml安装位置然后修改:

vim /opt/cm-5.16.2/run/cloudera-scm-agent/process/49-oozie-OOZIE-SERVER-upload-sharelib/yarn-conf/hdfs-site.xml
#添加如下两项
  <property>
    <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
    <value>NEVER</value>
  </property>
#保存 然后返回安装界面 返回上一步 然后从新继续安装

问题原因:
无法写入;我的环境中有3个datanode,备份数量设置的是3。在写操作时,它会在pipeline中写3个机器。默认replace-datanode-on-failure.policy是DEFAULT,如果系统中的datanode大于等于3,它会找另外一个datanode来拷贝。目前机器只有3台,因此只要一台datanode出问题,就一直无法写入成功。
对于,dfs.client.block.write.replace-datanode-on-failure.policy,default在3个或以上备份的时候,是会尝试更换结点尝试写入datanode。而在两个备份的时候,不更换datanode,直接开始写。对于3个datanode的集群,只要一个节点没响应写入就会出问题,所以可以关掉

首次运行报错:Failed to create Oozie database tables.

centos7 安装sniproxy centos7安装semanage_mysql_21


解决办法:返回cloudera manager主页,查看已经有了oozie的服务,直接启动它!

centos7 安装sniproxy centos7安装semanage_centos7 安装sniproxy_22


数据库初始化报错

[                          main] DbProvisioner                  ERROR Exception when creating/dropping database with user 'scm' and jdbc url 'jdbc:mysql://cdh.master/?useUnicode=true&characterEncoding=UTF-8'
java.sql.SQLException: Access denied for user 'scm'@'cdh.master' (using password: YES)

之前安装完数据库 新建的用户本地登录不了 远程可以登录
解决办法:我用的mysql版本是5.6 安装完数据库后 需要删除匿名用户
用root登录mysql后执行

use mysql;                                   #选择mysql库
delete from user where user='';   #删除匿名用户
FLUSH PRIVILEGES;               #刷新缓存

问题解决

启动服务报错 pstree: 未找到命令
/opt/cm-5.16.2/etc/init.d/cloudera-scm-agent:行109: pstree: 未找到命令
/opt/cm-5.16.2/etc/init.d/cloudera-scm-server:行109: pstree: 未找到命令
原因:缺少psmisc工具
解决方法:yum install -y psmisc

启动服务报错 无效的用户"cloudera-scm"
install: 无效的用户"cloudera-scm"

install- invalid user ‘cloudera-scm’
原因:没有创建cm所需要的 cloudera-scm用户
解决方法:

#所有节点都要创建cloudera-scm用户
useradd --system --home=/opt/cm-5.16.2/run/cloudera-scm-server --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm