本次安装采用离线安装的方式,需要提前下载好需要的包。
1. 准备工作
1.1 环境说明
- 操作系统:RedHat企业级Linux6.5 64-bit
- Cloudera Manager:5.8.4
- CDH:5.8.4
- Mysql:5.7.21
1.2 CM下载地址
CM5.8.4下载地址http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.8.4/RPMS/x86_64/
1.3 CDH下载地址
CDH5.8.4下载地址http://archive.cloudera.com/cdh5/parcels/5.8.4/
1.4 mysql下载地址
mysql下载地址https://dev.mysql.com/downloads/mysql/
2.安装mysql
Cloudera Manager支持三种数据库类型:MySQL、PostgreSQL、Oracle。这里我们选择使用MySQL
2.1主从模式安装
mysql采用热双机备份安装的方式,具体安装过程参照mysql主从模式安装
2.2设置外部链接许可
2.2.1新增防火墙配置
1)修改iptable配置:vi /etc/sysconfig/iptables (保存退出:wq)
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT(新增3306端口访问许可)
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
注意:如果不需要开启防火墙,可直接关闭防火墙(service iptables stop
)
2)重启防火墙:service iptables restart
3)查看防火墙状态:service iptables status
2.2.2 mysql授权外部访问许可
(1)登录mysql:mysql -uroot -p
(2)授权外部访问
grant all privileges on *.* to root@'%' identified by 'ztesoft' with grant option;
_. --指所有库的所有权限,单独指定库时:database.*
% --指所有IP可以访问,单独指定IP时:’IP1,IP2’_
(3)刷新数据库缓存:flush privileges;
(4)测试连接
3. 安装JDK
3.1 查看是否已安装jdk
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# rpm -qa |grep java
(1)无内容输出--未安装JDK
(2)已安装
备:卸载JDK
3.2 安装JDK
(1) 进入安装包所在目录
(2) 执行下面的命令,安装JDK
yum install oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
3.3 JDK环境变量设置
(1)获取JDK安装版本
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# ll /usr/java/
total 4
drwxr-xr-x. 8 root root 4096 Dec 7 23:53 jdk1.7.0_67-cloudera
(2)编辑/etc/profile文件
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# vi /etc/profile
(3)增加环境变量
export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
注意:将上述内容放到profile文件的最末尾
(4)生效环境变量
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# source /etc/profile
(5)测试安装成果
java -version
注意:上述配置JDK环境变量的方法,是将jdk环境设置到系统变量中,也可以仅将jdk的环境变量设置为用户级别的,即将第(3)步中的内容添加到目标用户的.bash_profile(该文件位于用户家目录下)文件末尾
4. 安装CM和CDH环境准备工作
4.1 查看IP配置
(1)查看网卡信息:ifconfig
(2) 查看IP配置
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# ls /etc/sysconfig/network-scripts/
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth3
4.2 配置hosts文件
(1) 编辑hosts文件:vim /etc/hosts
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# vim /etc/hosts
(2) 其它每台机器的hosts文件做同样的配置
4.3 关闭防火墙
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# service iptables stop
4.4 关闭selinux
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# vim /etc/selinux/config
#将文件中的SELINUX="" 为 disabled ,然后重启。
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# setenforce 0
如果不想重启系统,使用命令setenforce 0
注:
setenforce 1 设置selinux 成为enforcing模式
setenforce 0 设置selinux 成为permissive模式
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# getenforce(或者sestatus -v)
Permissive
4.5 创建hadoop用户并授权
集群每台机器都得做如下操作:
4.5.1 创建hadoop用户组和用户
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# groupadd hadoop //新建hadoop组
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# useradd -g hadoop -p hadoop hadoop//新建hadoop用户
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# passwd hadoop //修改hadoop密码
Changing password for user hadoop.
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
4.5.2 给hadoop用户配置sudo权限
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# vi /etc/sudoers
添加:hadoop ALL=(ALL) NOPASSWD: ALL
hadoop为当前需要设置的系统用户,本次设置为hadoop
4.6 mysql创建数据库并赋权
(1)创建用户
create user 'scmuser'@'%' identified by 'ztesoft';
create user 'hivedbuser'@'%' identified by 'ztesoft';
create user 'amondbuser'@'%' identified by 'ztesoft';
(2) 创建数据库
create database scm DEFAULT CHARACTER SET utf8;
create database hivedb DEFAULT CHARACTER SET utf8;
create database amondb DEFAULT CHARACTER SET utf8;
(3) 赋权给每个用户
grant all on scm.* to 'scmuser'@'%' identified by 'ztesoft';
grant all on hivedb.* to 'hivedbuser'@'%' identified by 'ztesoft';
grant all on amondb.* to 'amondbuser'@'%' identified by 'ztesoft';
(4) 刷新privileges
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4.7 搭建本地软件仓库
4.7.1 修改httpd服务端口
(1)vi /etc/httpd/conf/httpd.conf
(2)修改Listen为12580
将端口由 80改为12580,默认端口会遇到各种限制
(3)启动http服务
[root@SHQZ-PS-IOT-TEST-WEB01 ~] service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 10.45.47.103 for ServerName[ OK ]
4.7.2 本地仓库建立方法1
(1)CM本地仓库
mkdir -p /repos/cm/;
cd /repos/cm
mkdir cm540.p0.165.el6
ln –s cm540.p0.165.el6 latest
把cloudera-manager的安装包上传到latest目录中
cd /repos/cm
createrepo .(注意命令后面的点) ---生成RPMS 索引信息
(2) 搭建cdh仓库
mkdir -p /repos/parcels/cdh;
cd /repos/parcels/cdh
mkdir cdh5.3.1.p0.5-el6 --cdh的版本号
ln -s cdh5.3.1.p0.5-el6 latest
上传CDH-5.3.1-1.cdh5.3.1.p0.5-el6.parcel包和manifest.json文件到latest目录下
(3) 在Apache服务器上添加安装包的软连接
cd /var/www/html/
ln -s /repos repos创建软连接,把/repos映射到repos下面
(4) 配置yum
在每个机器上,进入到/etc/yum.repos.d下,新增myrepo.repo,如下
在myrepo.repo文件中,添加如下内容:
其中红色框选的部分配置的url事先在浏览器中访问试试,如果出现下方的结果,则表示我们创建的本地仓库没问题,如果不能访问,请检查一下防火墙设置是否正确,或检查httpd服务是否启动或者启动成功了。
4.7.3 本地仓库建立方法2(建议采用此方法)
(1)创建本地仓库,并放入安装包
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# mkdir /var/www/html/cm531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# mv /root/cm-cdhfile/CM5.3.1/* /var/www/html/cm531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# mkdir /var/www/html/cdh531
[root@SHQZ-PS-IOT-TEST-WEB01~]#mv /root/cm-cdhfile/CDH5.3.1/* /var/www/html/cdh531
注意:将cm的安装包放到/var/www/html/cm531文件夹下,cdh的安装包以及manifest.json这个文件一并放到/var/www/html/cdh531,后面创建本地yum源会用到
(2) 创建索引
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# chmod -R oug+rx /var/www/html/cm531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# cd /var/www/html/cm531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# createrepo . //注意后面的点
Spawning worker 0 with 6 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
//如果提示command not found,则安装createrepo:yum install createrepo
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# chmod -R oug+rx /var/www/html/cdh531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# cd /var/www/html/cdh531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# createrepo .
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
(3) 创建新的cloudera-manager.repo和cdh.repo源配置文件
[root@SHQZ-PS-IOT-TEST-WEB01 ~]#cd /etc/yum.repos.d
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# touch cloudera-manager.repo
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# vi cloudera-manager.repo
[cloudera-manager]
name=cloudera-manager-5
baseurl=http://172.17.87.4:12580/cm531
gpgcheck=0
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]#
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]# touch cdh.repo
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]# vi cdh.repo
[cdh]
name=cdh5
baseurl=http://10.45.47.103:12580/cdh531
gpgcheck=0
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]#
5. 安装Cloudera Manager
5.1 安装CM
(1)进入CM安装包存放路径
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# cd /var/www/html/cm531
[root@SHQZ-PS-IOT-TEST-WEB01 cm531]# ll
(2)安装CM
[root@SHQZ-PS-IOT-TEST-WEB01 cm531]# yum install cloudera-manager-server-5.3.1-1.cm531.p0.191.el6.x86_64.rpm
Installed:
cloudera-manager-server.x86_64 0:5.3.1-1.cm531.p0.191.el6
Dependency Installed:
cloudera-manager-daemons.x86_64 0:5.3.1-1.cm531.p0.191.el6
Complete!
5.2 配置CM使用的数据库实例
(1) 进入/etc/cloudera-scm-server目录
[root@SHQZ-PS-IOT-TEST-WEB01 cm531]# cd /etc/cloudera-scm-server
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera-scm-server]# ls
db.properties log4j.properties
(2) 修改db.properties文件
[root@host103 cloudera-scm-server]# vi db.properties
# The database host
# If a non standard port is needed, use 'hostname:port'
com.cloudera.cmf.db.host=172.17.87.4:3306
//记得把#去掉
# The database name
com.cloudera.cmf.db.name=scm
# The database user
com.cloudera.cmf.db.user=scmuser
# The database user's password
com.cloudera.cmf.db.password=123456
"db.properties" 22L, 526C written
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera-scm-server]#
5.3 拷贝mysql驱动
将mysql驱动包放置到/usr/share/cmf/lib/目录下,最好放置到每台机器上
[root@SHQZ-PS-IOT-TEST-WEB01 lib]# ll mysql-connector-java-5.1.33-bin.jar
-rwxrwxrwx. 1 root root 959987 Dec 9 18:17 mysql-connector-java-5.1.33-bin.jar
[root@SHQZ-PS-IOT-TEST-WEB01 lib]# pwd
/usr/share/cmf/lib
5.4 启动CM
(1) 启动cloudera-scm-server服务
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera]# service cloudera-scm-server start
Starting cloudera-scm-server: [ OK ]
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera]# service cloudera-scm-server status
cloudera-scm-server (pid 63461) is running...
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera]#
(2) 查看后台日志
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera-scm-server]# tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
(3) 访问CM控制台
打开浏览器:http://172.17.87.4:7180/ 初始密码是:admin/admin
6.安装CDH
6.1 登陆CM控制台,安装CDH
注意:当集群机器数量较大时,为了方便安装JDK可以选中该复选框,但当集群没有连接外网时,yum安装失败。解决的办法是:增加JDK.repo文件指向JDK安装包存放的仓库。
[root@SHQZ-PS-IOT-TEST-WEB01 cm531]# cd /etc/yum.repos.d/
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]# cp cdh.repo JDK.repo
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]# vi JDK.repo
[JDK]
name=jdk-version1.7
baseurl=http://172.17.87.4:12580/cm531/
gpgcheck=0
6.2 检查主机的正确性
6.2.1 主机时钟不同步的解决办法
(1)假设
集群规划为3个节点,每个节点的ip、主机名和部署的组件分配如下
192.168.56.121 cdh1 NameNode、Hive、ResourceManager、HBase
192.168.56.122 cdh2 DataNode、SSNameNode、NodeManager、HBase
192.168.56.123 cdh3 DataNode、HBase、NodeManager
我们一般选用namenode 节点作为时钟同步服务器,其他节点为客户端同步时间到该节点。
(2)安装ntp
[root@host103 etc]#yum install ntp
(3)修改 cdh1 上的配置文件 /etc/ntp.conf
增加server 10.45.47.103
并注释掉其他所有server
(4)启动 ntp
[root@host103 etc]#service ntpd start
(5)设置开机启动
[root@host103 etc]# chkconfig ntpd on
ntpq用来监视ntpd操作,使用标准的NTP模式6控制消息模式,并与NTP服务器通信。
ntpq -p 查询网络中的NTP服务器,同时显示客户端和每个服务器的关系。
(6)在其他datanode节点上执行第3步操作
在其他服务器 /etc/ntp.conf 中增加server 192.168.56.121
6.2.2 Cloudera建议
通过调节swap参数,来优化linux虚拟内存管理:基于程序的局部性原理,linux通过虚拟内存机制来实现并发运行进程,linux发现物理内存不够用时,会根据LRU算法将一部分内存swap out到硬盘;当运行被换出的那个线程时,在swap in 到内存里;
例如:echo 0 > /proc/sys/vm/swappiness (值为0表示尽量都用物理内存,值为100表示积极的使用swap分区;)这个参数很重要;小心调节;一般默认为60; 在紧急处理线上问题时,可以紧急使用一下。
修改:/etc/sysctl.conf中增加如下代码:
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 2097152
net.core.rmem_max = 41943040
net.core.wmem_default = 2097152
net.core.wmem_max = 41943040
vm.swappiness = 1
执行命令使上面的配置生效:/sbin/sysctl -p
6.2.3 sysctl -p 报错解决办法
修改 linux 内核文件 /etc/sysctl.conf后执行sysctl -p 报错
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
执行下面的命令:
modprobe bridge;
lsmod|grep bridge;
6.3 安装CDH服务
安装完cm和CDH后,可以开始安装cm的监控即 cloudera manager service
(1) 进入cm主页点击右上角添加 cloudera manager service
(2) 为每个服务选择主机
(3) 点击继续
cm监控需要一个数据库配置;一个cm需要一个数据库,这里我们使用之前创建的amondb数据库。
如果之前未创建,需要先创建cm的数据库,步骤如下:
登陆mysql
创建库create database amondb DEFAULT CHARACTER SET utf8;
赋权grant all on amondb.* to amondbuser@'%' identified by 'ztesoft';
生效赋权flush privileges;
注:revoke all on amondb.* from amondbuser #收回权限的操作
记得在scm安装的主机上要添加mysql的驱动包,其目录是/usr/share/cmf/lib
否则会出现如下报找不到驱动的错误
(4) 测试连接通过后点继续
(5) 默认配置,不修改点继续
(6) 安装完成后点继续
回到主页这边如果所示问号变成绿色了
6.3.2 服务安装顺序
一般而言,服务安装顺序如下:
(1) zookeeper和hdfs需要先安装
(2) 然后安装yarn
(3) Ks依赖solr,solr依赖hbase,hbase依赖zookeeper
Hive在安装了hdfs和zookeeper以后可以安装,sentry依赖hive。在cm主页选择安装
6.3.3 安装zookeeper
(1) 点击添加服务,选择zookeeper
(2) 选择zookeeper服务要安装到的主机
(3) 使用默认配置,直接点击继续
(4) 点击继续,完成安装
6.3.4 安装hdfs服务
(1) 点击添加服务,选择HDFS
(2) 选择HDFS服务要安装到的主机
(3) 使用默认配置,直接点击继续
(4) 点击继续,完成安装
6.3.4 安装YARN
(1) 点击添加服务,选择YARN
(3) 使用默认配置,直接点击继续
6.3.5 安装hive
安装hive服务前必须先要安装Mapreduce或者YARN。
安装hive之前需要将mysql的driver(mysql-connector-java-5.1.33-bin.jar)放置到/opt/cloudera/parcels/CDH-5.3.1-1.cdh5.3.1.p0.5/lib/hive/lib目录下,最好每台主机都放置.
(2) 选择hive服务要安装到的主机
(3) 安装hive需要进行数据库配置,这里我们使用之前配置好的数据库
(4) 使用默认配置,直接点击继续
(5) 点击继续,完成安装
6.3.8 安装hbase
安装hbase之前需要先安装zookeeper服务!
(1) 点击添加服务,选择HDFS
(3) 使用默认配置,直接点击继续
(4) 点击继续,完成安装
6.3.8 其他安装
安装过程与以上类似,根据规划内容将服务安装到特定的主机上,配置参数先不需要改,后面可以通过参数调优修改服务配置参数。
7.4 部署客户端配置
通过部署客户端配置,使所有修改的配置生效。
7. FAQ
7.1 主机:页面交换到磁盘警告
一般出现于CDH前期,安装服务时:
原因:如果该运行状况测试失败,可能表明主机操作系统的配置不当或主机上运行的进程太多.
解决办法:尝试减少 vm.swappiness,或增加主机内存。
调整Linuxswappiness参数:cat /proc/sys/vm/swappiness //查看swappiness值
临时调法:sysctl vm.swappiness=0 //默认为60,0表示最大限度使用物理内存、100表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
永久调法:
需要在/etc/sysctl.conf修改,加上:
[root@timeserver ~]# cat /etc/sysctl.conf
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
vm.swappiness=0
[root@timeserver ~]# sysctl -p
7.2 HDFS:Canary测试失败
报错:Canary无法在目录 /tmp/.cloudera_health_monitoring_canary_files 中写入文件。
原因:该运行状况测试失败可能表示群集未能正确或及时地满足基本客户端datanode请求
处理方法:【HDFS】--【实例】--【添加角色实例】--【datanode选择主机】--【继续】
7.3 YARN、zookeeper、hbase等报server之间通信问题
报错:Canary 测试建立与 ZooKeeper 服务的连接或者客户端会话失败。
原因:datanode之间防火墙限制导致不能互通
解决办法:关闭防火墙或将CDH、CM相关的端口添加到/etc/sysconfig/iptables和/etc/sysconfig/ip6tables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT