Centos7 环境下安装CDH 首先要安装cloudera manager 然后通过cm的图形界面来安装CDH 和一些相关组件 需要安装mysql来存储cloudera manager的一些数据 也可以使用其他数据库
通过yum安装优点是简单 少了一些操作 缺点就是慢 需要从远程服务器下载数据
集群使用vmware workstation 搭建模拟环境 网络配置使用NAT模式
集群主机设置 共三个服务器 cdh.master 设置为主服务器
ip地址 | hostname | CM管理软件 |
---|---|---|
192.168.158.10 | cdh.master | Cloudera Manager Server&Agent ,mysql |
192.168.158.11 | cdh.slave1 | Cloudera Manager Agent |
192.168.158.12 | 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.10 cdh.master
192.168.158.11 cdh.slave1
192.168.158.12 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.10 iburst
#安装完成后设置ntp开机启动并启动ntp
systemctl enable ntpd
systemctl start ntpd
#查看状态
systemctl status ntpd
步骤7:设置 yum repo
$ curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ curl -o /etc/yum.repos.d/cloudera-manager.repo https://archive.cloudera.com/cm5/redhat/7/x86_64/cm/cloudera-manager.repo
下边开始配置主节点安装 Cloudera Manager Server ,Cloudera ManagerAgent ,mysql (由于我本机自带mysql所以没在主节点安装mysql mysql安装请自行查找)
1,需要安装安装 MySQL JDBC Driver (mysql-connector-java-5.1.40.zip) 解压
$ mkdir -p /usr/share/java/ #驱动许放在此目录 cm会在此文件夹查找
$ cp mysql-connector-java-5.1.40-bin.jar /usr/share/java/mysql-connector-java.jar #复制并修改名称
2,安装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后 需要创建CDH服务所需的数据库和用户 后边安装时需要用到
Service | Database | Db-User |
---|---|---|
Cloudera manager server | scm | scm |
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 scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'root';
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所需要的
yum install -y cloudera-manager-daemons cloudera-manager-server
数据库与日志相关配置文件在目录:
/etc/cloudera-scm-server
日志目录
/var/log/cloudera-scm-server
3,初始化数据
#查找安装目录
[root@cdh schema]# whereis cmf
cmf: /usr/lib64/cmf /usr/share/cmf
cd /usr/share/cmf/schema #进入目录
#初始化数据
#scm_prepare_database.sh [-数据库类型] [-h主机名 [-u用户名] [-p密码] [主机地址] [创建的数据库名] [用户] [密码]
./scm_prepare_database.sh mysql -hlocalhost -uroot -proot --scm-host localhost scm root root
启动cloudera-scm-server
systemctl start cloudera-scm-server #启动
systemctl status cloudera-scm-server #查看状态
systemctl stop cloudera-scm-server #关闭
在master和node节点安装Cloudera Manager Agent
yum install -y cloudera-manager-agent cloudera-manager-daemons #安装agent
#修改 /etc/cloudera-scm-agent/config.ini 中的server_host为master的IP
vim /etc/cloudera-scm-agent/config.ini
# Hostname of the CM server.
server_host=cdh.master
systemctl start cloudera-scm-agent #启动
systemctl status cloudera-scm-agent #查看状态
systemctl stop cloudera-scm-agent #停止服务
优化交换分区
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
登录web界面 安装cdh
http://192.168.158.10:7180
账号:admin
密码:admin
1.登录web界面 配置集群安装CDH
2 .选择部署的版本
3.继续下一步,选择安装的CM的版本
4.选择需要部署的主机
5.选择需要安装的clouderamanager版本
6.percel文件下载并分发安装到集群所有节点上
注意: 此步骤需要下载parcel文件 此文件1G左右 下载十分慢 解决办法:
在 https://archive.cloudera.com/cdh5/parcels/5.16.2/ 找到文件对应的版本
使用迅雷下载红框内三个文件 然后上传到主机 目录:
[root@cdh parcel-repo]# pwd
/opt/cloudera/parcel-repo
上传完毕后修改目录文件权限属性
chown cloudera-scm:cloudera-scm -R 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
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.首次运行
14安装完毕 进入图形界面
常见问题:
在安装CDH时 查找不到节点如图所示:
查看日志:
cd /var/log/cloudera-scm-server
cat cloudera-scm-server.log
报如下错误
此错误 原因:/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.
在日志里搜索找到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.
解决办法:返回cloudera manager主页,查看已经有了oozie的服务,直接启动它!
安装数据库遇到的问题
注意: 在主机 我安装过mysql8 但是出现了一些问题 如下
我使用的是mysql-connector-java-8.0.17-1.el7.noarch.rpm驱动 换成低版本mysql-connector-java-5.1.40.zip就没有问题
数据库换成mysql5.7版本 就没有问题
安装参考:https://www.jianshu.com/p/1ebc95382d6e
https://blog.csdn.net/czk740960212/article/details/80484671
https://blog.51cto.com/wzlinux/2321433?source=dra