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找不到会报错
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/
我下载的是: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/ 找到文件对应的版本
使用迅雷下载红框内三个文件 然后上传到主机 目录:
[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
2 .选择部署的版本
3.继续下一步,选择安装的CM的版本
4.选择需要部署的主机
5.选择需要安装的clouderamanager版本 要选择与之前下载好的CDH的版本一致
6.percel文件下载并分发安装到集群所有节点上
7.开始分发安装到各节点
8.检查集群中主机环境
出现两个问题:
优化交换分区
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.群集设置 选择安装的服务组件
10.群集设置 自定义角色分配
(这里一般情况下默认即可,但是如果集群中某台电脑的配置严重不行的时候,建议少分配点任务)
11.数据库设置
注意:这个要与前面的mysql中建立hive,oozie,hue相对应,如果之前没有建立的话,会报错
强烈建议将各个数据库与相应角色实例置于同一主机上
12.审核更改,如果有特定目录的设定或者参数的设定,可以在这里进行更正
13.首次运行
cd /var/log/cloudera-scm-server
cat cloudera-scm-server.log
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.
在日志里搜索找到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
#添加如下两项
dfs.client.block.write.replace-datanode-on-failure.enable
true
dfs.client.block.write.replace-datanode-on-failure.policy
NEVER
#保存 然后返回安装界面 返回上一步 然后从新继续安装
问题原因:
无法写入;我的环境中有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.
解决办法:返回cloudera manager主页,查看已经有了oozie的服务,直接启动它!
数据库初始化报错
[ 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
安装参考:https://www.jianshu.com/p/1ebc95382d6e
https://blog.csdn.net/czk740960212/article/details/80484671
https://blog.51cto.com/wzlinux/2321433?source=dra