完全离线搭建CDH5.15.1
一.说明
1.1 操作系统:
CentOS-7-x86_64-DVD-1511.iso
1.2 JDK版本:
jdk-8u162-linux-x64.rpm
1.3 CDH所需安装包及版本说明:
CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel
CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sha1
cloudera-manager-centos7-cm5.15.1_x86_64.tar.gz
manifest.json
1.4 mysql离线安装包:
mysql-5.7.23-1.el7.x86_64.rpm-bundle.tar
mysql-connector-java-5.1.43.jar
1.5 yum源安装包
CentOS-7-x86_64-Everything-1511.is
CDH下载目录:
http://archive.cloudera.com/cdh5/parcels/5.15.1.4/
Cloudera Manager下载目录
https://www.cloudera.com/downloads/manager/5-15-1.html
CHD5相关的Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中
CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sha1重命名CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sha,这点必须注意,否则,系统会重新下载CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel文件
二.环境搭建
2.1 网络配置(所有节点)
vi /etc/sysconfig/network 修改hostname:
NETWORKING=yes
HOSTNAME=cdh01
vi /etc/hosts ,修改ip与主机名的对应关系
192.168.101.71 cdh01
192.168.101.72 cdh02
192.168.101.73 cdh03
192.168.101.74 cdh04
2.2 SSH免密码登录
生成密钥:ssh-keygen –t rsa
一直使用默认
发送密钥到cdh01, cdh02,cdh03,cdh04注意也要发送秘钥给本机:
ssh-copy-id root@cdh01
2.3 关闭防火墙
更改防火墙配置
依次执行命令如下:
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
2.4 关闭SELINUX
vim /etc/sysconfig/selinux
将SELINUX=enforcing改为SELINUX=disabled
查看SELINUX状态:
使用命令:getenforce
SELinux status: enabled(enabled:开启;disabled:关闭)
2.5 安装jdk
2.5.1 卸载centos自带的jdk:
查看:rpm -qa | grep java
卸载:rpm -e --nodeps java***
rpm -qa | grep java
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64
rpm -e --nodeps javassist-3.16.1-10.el7.noarch
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.36-1.13.8.1.el7_1.x86_64
rpm -e --nodeps javamail-1.4.6-8.el7.noarch
rpm -e --nodeps nuxwdog-client-java-1.0.3-2.el7.x86_64
rpm -e --nodeps libvirt-java-0.4.9-4.el7.noarch
rpm -e --nodeps tzdata-java-2015g-1.el7.noarch
rpm -e --nodeps javapackages-tools-3.4.1-11.el7.noarch
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.91-2.6.2.3.el7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-devel-1.7.0.91-2.6.2.3.el7.x86_64
rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
rpm -e --nodeps libvirt-java-devel-0.4.9-4.el7.noarch
rpm -e --nodeps java-1.8.0-openjdk-devel-1.8.0.65-3.b17.el7.x86_64
rpm -e --nodeps java-1.6.0-openjdk-devel-1.6.0.36-1.13.8.1.el7_1.x86_64
上传文件 rz –be 文件名称
2.5.2 配置jdk
解压安装: rpm -ivh jdk-8u162-linux-x64.rpm
配置环境变量: echo “JAVA_HOME=/usr/java/latest/”>> /etc/environment
生效:
source /etc/profile
查看版本
java -version
javac -version
2.6 搭建集群公共yum源
选择其中一台服务器搭建集群公共yum源;这里以cdh04节点为例
2.6.1安装httpd
(如果先下载好了httpd的rpm包也可以直接在搭建的节点上直接安装,不用再搭建本地yum源下载httpd,注意版本)
先搭建本地yum源安装httpd
- 挂载:mount /etc/app/CentOS-7-x86_64-Everything-1511.iso /var/yumRepo
- cd /etc/yum.repos.d/
- mv CentOS-Base.repo centos7.repo 其他repo文件删除
- vim /etc/yum.repos.d/centos7.repo
[base]
name=centos7
baseurl=file:///var/yumRepo
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1
baseurl=file:///etc/app 该路径为CentOS-7-x86_64-Everything-1511.iso本地文件路径
- yum makecache
yum -list - 安装httpd: yum -y install httpd
- 启动:systemctl start httpd.service
- 查看状态:systemctl status httpd.service
- 开机自启:systemctl enable httpd.service
- 然后通过浏览器访问测试,如下图
2.6.2 挂载,搭建公共yum源
8. 创建centos7目录:mkdir /var/www/html/centos7
9. 挂载:mount /etc/app/CentOS-7-x86_64-Everything-1511.iso /var/www/html/centos7
(/var/www/html为httpd生成目录)
10. 开机自启:
echo “mount /etc/app/CentOS-7-x86_64-Everything-1511.iso /var/www/html/centos7”>> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
4.vim /etc/yum.repos.d/centos7.repo
[base]
name=centos7
baseurl=http://cdh04/centos7/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1
5 .然后再通过浏览器访问测试http://cdh04/centos7/ ,如下图
备注:yum下载不安装命令
yum install –downloadonly –downloaddir=/home/mod_ssl mod_ssl
2.7 设置ntp
2.7.1 修改系统时间如果时间不对
[root@10-121-2-96 opt]# timedatectl set-ntp no
[root@10-121-2-96 opt]# timedatectl set-time “2018-07-05 15:06:00”
[root@10-121-2-96opt]# timedatectl set-timezone Asia/Shanghai
[root@10-121-2-96 opt]# date
Fri Jul 5 15:06:16 CST 2018
2.7.2 yum安装ntp:
yum -y install ntpd
2.7.3 ntp服务端搭建
2.7.4 ntp客户端设置
如果有ntp服务器就不用再搭建ntp服务器
2.8 mysql安装
2.8.1 删除原有的mariadb,不然mysql装不进去
mariadb-libs-5.5.52-1.el7.x86_64
rpm -qa|grep mariadb
[root@cdh01 opt]# rpm -e --nodeps mariadb-devel-5.5.44-2.el7.centos.x86_64
[root@cdh01 opt]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64
[root@cdh01 opt]# rpm -e --nodeps mariadb-server-5.5.44-2.el7.centos.x86_64
[root@cdh01 opt]# rpm -e --nodeps mariadb-5.5.44-2.el7.centos.x86_64
2.8.2 离线安装mysql的rpm包
在https://dev.mysql.com/downloads/mysql/选择为Red Hat Enterprise Linux 7 / Oracle Linux7 ,把os的版本选择为all。
直接下载mysql-5.7.23-1.el7.x86_64.rpm-bundle.tar,所有的rpm包都在里面
rpm -ivh mysql-community-common-5.7.23-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.23-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.23-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.23-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.23-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.23-1.el7.x86_64.rpm
至此,mysql5.7所有文件安装完毕,接下来就是开启服务测试了。
rpm -e --nodeps mysql-community-common-5.7.23-1.el7.x86_64.rpm
rpm -e --nodeps mysql-community-libs-5.7.23-1.el7.x86_64.rpm
rpm -e --nodeps mysql-community-devel-5.7.23-1.el7.x86_64.rpm
rpm -e --nodeps mysql-community-libs-compat-5.7.23-1.el7.x86_64.rpm
rpm -e --nodeps mysql-community-client-5.7.23-1.el7.x86_64.rpm
rpm -e --nodeps mysql-community-server-5.7.23-1.el7.x86_64.rpm
2.8.3 配置mysql
-
首先关闭mysql服务:
service mysqld stop -
然后修改配置文件:
vim /etc/my.cnf
接下来加入代码即可空密码登录mysql:
Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
skip-grant-tables #添加这句话,这时候登入mysql就不需要密码
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = ‘SET NAMES utf8’
character-set-server = utf8
-
开启mysql服务:
service mysqld start -
.空密码登录mysql:
mysql -u root -p #输入命令回车进入,出现输入密码提示直接回车
2.8.4 设置mysql密码:
mysql> update mysql.user set authentication_string=password(‘rooLiu@123’),host=’%’ where user=‘root’;
mysql> flush privileges; #更新权限
Query OK, 0 rows affected (0.00 sec)
mysql>flush privileges; #更新权限
mysql>quit; #退出
service mysqld stop # 停止mysql服务, 恢复mysql配置
vim /etc/my.cnf #修改配置文件
Disabling symbolic-links is recommended toprevent assorted security risks
//# skip-grant-tables # 注释掉这句话
symbolic-links=0
service mysqld start # 启动mysql服务
mysql -uroot -p # 输入新密码登录
问题:navicat远程访问,密码过期。
Error:1862-your password has expired,…
终端执行以下sql解决—设置密码不过期
alter user ‘root’@’%’ identified by ‘rooLiu@123’, ‘root’@’%’ password expire never;
2.8.5 设置mysql开机自启:
systemctl enable mysqld
2.8.6添加mysql驱动 (每个节点都要添加)
( LINUX下执行)拷贝mysql-connector-java-5.1.43.tar到 /usr/share/java/mysql-connector-java.jar (如果不存在,需要创建)
(版本号要去掉)
2.8.7添加权限:
mysql -u root -p rooLiu@123
GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘rooLiu@123’ WITH GRANT OPTION;
flush privileges;
重启mysql服务即可使用。
2.8.8创建数据库:依次执行命令(MYSQL下执行)
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database monitor DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
2.8.9赋远程访问权限
use mysql;
update user set host=’%’ where user=‘root’;
ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’ 不予理会
flush privileges;
三.安装Cloudera-Manager
3.1 安装配置CM
3.1.1 解压cm tar包到指定目录
tar -xvf cloudera-manager-centos7-cm5.15.1_x86_64.tar.gz -C /opt
3.1.2 创建cloudera-scm用户
useradd --system --home=/opt/cm-5.15.1/run/cloudera-scm-server --no-create-home --shell=/bin/false --comment “Cloudera SCM User” cloudera-scm
3.1.3 在主节点创建cloudera-manager-server的本地元数据保存目录
mkdir /var/cloudera-scm-server
chown cloudera-scm:cloudera-scm /var/cloudera-scm-server
3.1.4 配置从节点agent指向主节点服务器
-
vim /opt/cm-5.15.1/etc/cloudera-scm-agent/config.ini
将server_host改为CMS所在的主机名即cdh01 -
建立数据库:将下载好的mysql-connector-java-5.1.43.jar
放到/opt/cm-5.15.0/share/cmf/lib
(注意去掉版本号)
3.1.5同步解压配置的CM文件到其他节点
将解压后的cloudera-manager-centos7-cm5.15.1_x86_64.tar.gz 的两个文件拷贝到其他节 点的相同路径上,包括第4步修改后的config.ini
scp -r /opt/cloudera cm-5.15.1 root@cdh02:/opt
3.1.6将资源文件拷贝到parce-repo文件下
cp CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcelCDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sha
manifest.json /opt/cloudera/parcel-repo
( 注意:其中CDH-5.11.1-1.cdh5.11.1.p0.18-el5.parcel.sha1 后缀要把1去掉 )
3.1.7 所有节点创建parcels目录
mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
3.1.8 初始化数据库
-
在mysql数据库下执行以下命令,给操作的用户向下授权的权限。
use mysql;
GRANT ALL PRIVILEGES ON . TO ‘root’@‘cdh01’ IDENTIFIED BY ‘rooLiu@123’ WITH GRANT OPTION;
flush privileges; -
/opt/cm-5.15.1/share/cmf/schema/scm_prepare_database.sh mysql -hcdh01-uroot -p --scm-host cdh01 scmdbn scmdbu scmdbp
说明:这个脚本就是用来创建和配置CMS需要的数据库的脚本。各参数是指:
mysql:数据库用的是mysql,如果安装过程中用的oracle,那么该参数就应该改为oracle。
-hmaster:数据库建立在hadoop1主机上面。也就是主节点上面。
-uroot:root身份运行mysql。-123456:mysql的root密码是***。
–scm-host master:CMS的主机,一般是和mysql安装的主机是在同一个主机上。
最后三个参数是:数据库名,数据库用户名,数据库密码
问题描述:没有权限
执行:
use mysql;
GRANT ALL PRIVILEGES ON . TO ‘root’@‘cdh01’ IDENTIFIED BY ‘rooLiu@123’ WITH GRANT OPTION;
flush privileges;
问题2:密码强度修改 强 或者 弱
执行:
密码强度改弱
set global validate_password_policy=0
set global validate_password_length=3
3.1.9 配置节点启动全局变量命令
-
配置主节点CLOUDERA SCM SERVER 启动全局变量
执行命令如下:
cp /opt/cm-5.15.1/etc/init.d/cloudera-scm-server /etc/init.d
修改变量路径
vim /etc/init.d/cloudera-scm-server
将CMF_DEFAULTS=${CMF_DEFAULTS:-/etc/default}改为=/opt/cm-5.15.1/etc/default -
配置从节点CLOUDERA SCM AGAENT 启动全局变量
cp /opt/cm-5.15.1/etc/init.d/cloudera-scm-agent /etc/init.d
修改变量路径
vim /etc/init.d/cloudera-scm-agent
将CMF_DEFAULTS=${CMF_DEFAULTS:-/etc/default}改为=/opt/cm-5.15.1/etc/default -
启动server 和agent
service cloudera-scm-server start
service cloudera-scm-server on
service cloudera-scm-agent start
chkconfig cloudera-scm-agent on #开机自启
问题:数据库初始化时失败
解决方法:在mysql数据库下执行以下命令,给操作的用户向下授权的权限。
GRANT ALL PRIVILEGES ON . TO ‘root’@‘cdh01’ IDENTIFIED BY’1234’ WITH GRANT OPTION;
重启mysql服务:service mysqld restart
四.CDH集群安装
4.1配置集群主机
ClouderaManager浏览器默认管理账号:
http://cdh01:7180
User:admin
Password:admin
首次登陆进入集群安装向导:
第一个警告:
Cloudera 建议将 /proc/sys/vm/swappiness 设置为 10。当前设置为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf 以在重启后保存该设置。
echo 10 > /proc/sys/vm/swappiness
这样操作重启机器还是还原,要永久改变
vim /etc/sysctl.conf
vm.swappiness=10
第二个警告,提示执行命令:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
执行完毕,重启后,警告依然,暂时不处理
4.2 安装服务
注意:这里开始,所有的服务,既可以通过下述自助来安装一系列服务;也可以手动在CM管理页面一个一个添加
之前安装时选择一次性安装一系列服务,由于没有新建hue数据库导致hue服务安装不上,所以后面选择一个一个安装,在前期搭建环境时这样更好,起码出现问题可以锁定是哪个服务。
4.3 分步安装服务步骤为:
点击页面上Cloudera MANAGER,回到主节点页面
出现cluster1群集1,点击下拉,选择“添加服务”
HDFS,Hive, HUE,Oozie, YARN, ZOOKEEPER是核心Hadoop的几个服务,分别安装,由于这些节点存在依赖关系,需注意先后顺序(当然,安装时CM会警告),顺序是:
Zookeeper, hdfs, yarn, hive, oozie, hue
注意:在安装hive, hue和oozie时,要将MySQL驱动jar拷贝到相应位置
CM
第一步:
cp /etc/app/mysql/mysql-connector-java.jar
/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hive/lib
cp /etc/app/mysql/mysql-connector-java.jar /var/lib/oozie
第二步:
scp -r /etc/app/mysql/mysql-connector-java.jar
root@cdh02: /opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hive/lib
scp -r /etc/app/mysql/mysql-connector-java.jar root@cdh02:/var/lib/oozie
依次发送给其他节点
按需安装完服务后,可在集群界面(即Cloudera MANAGER)看一下集群的状况
o 绿色:良好
o 黄色:运行不良
o 红色:存在问题
4.4 查看日志
CM虽然配置麻烦,但日志齐全,每个操作,都能找到相应的运行日志,日志对于配合、调试和查看任务进度都有很大的帮助
五.Q&A
5.1 hdfs
1, Hadoop Datanode节点无法启动(All directories in dfs.data.dir are invalid)
这是data目录没有权限
解决:chmod -R 777 dfs
- 执行 hadoop jar时候 输出目录可能需要手动添加和设置权限,否则执行时候会提示
NFS service is already running on this host. Please stop the NFS service running on this host before attempting to start the NFS Gateway role
解决:
service nfs stop
service nfs status
3.Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
权限问题,需要修改目标操作的权限,或者修改操作的用户。
可以用 hdfs dfs -ls / 查看各个目录的所属用户
解决:如果目录或文件所属用户不对,需要修改: hdfs dfs -chown -R user:group 目标文件
5.2 hive
1,Version information not found
解决:
打开页面>hive.metastore.schema.verification 设置为false 去掉勾选
2,javax.jdo.JDODataStoreException: Required table missing : “VERSION
” in Catalog “” Schema “”. DataNucleus requires this table to perform its persistence operations. Either your MetaData is incorrect, or you need to enable “datanucleus.autoCreateTables”
解决:
打开页面>datanucleus.autoCreateSchema 设置为true就是勾选就可以
5.3 hue
1,Unexpected error. Unable to verify database connection
查看日志报错是:ImportError: libxslt.so.1: cannot open shared object file: No such file or directory
原因是centos缺少库文件,执行如下命令即可
解决:
yum install krb5-devel cyrus-sasl-gssapi cyrus-sasl-deve libxml2-devel libxslt-devel mysql mysql-devel openldap-devel python-devel python-simplejson sqlite-devel
5.4 mysql驱动使用总结
使用到mysql驱动的几处:
- /usr/share/java
- /opt/cm-5.15.0/share/cmf/lib
- /opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/lib/hive/lib
- /var/lib/oozie
注意:各个节点都要有,且去除版本号(mysql-connector-java.jar)