https://blog.csdn.net/zzq900503/article/details/52982828
https://www.cnblogs.com/felixzh/p/9082344.html
简介
我们在上篇文章中已经了解了CDH,为了后续的学习,我们本章就来安装CDH5.8。CDH5.8是目前比较新的版本,自带hadoop2.0以上的hadoop,而且已经包含了很多组件,也是我们接下来需要学习的hadoop生态圈中的组件。
环境
Cloudera Manager是为了简化hadoop及其组件的部署,但是由于包含的组件较多,对内存要求也比较大。所以我们尽量要保持主节点master和副节点足够的内存和磁盘空间,否则会出现一些无法预估的错误。
官方推荐配置
主节点 内存10G以上 磁盘30G
副节点 内存4G以上 磁盘30G
如果不满足条件的话可以适当减一些配置,但不保证能安装成功。
我们这里还是用VM虚拟机创建三个虚拟机来部署。
因为条件限制我的虚拟机创建如下:
PC机系统win10(这个随意,应该不影响)
PC机内存16G
虚拟机VMware-workstation11
虚拟机系统CentOS-6.4-x86_64 也就是 CentOS6.4版本64位的linux系统
作为master的主节点的虚拟机 cloudera scm server内存 8G 磁盘30G
作为slave1的副节点的虚拟机1 cloudera scm agent内存 2G 磁盘30G
作为slave2的副节点的虚拟机2 cloudera scm agent 内存 2G 磁盘30G
Cloudera Manager 5.8.2
CDH 5.8.2
JDK 1.8
Mysql 5.6.34
选择安装方式
第一种使用cloudera-manager-installer.bin在线安装
第二种使用rpm、yum、apt-get方式在线安装
第三种使用是Tarballs的方式离线安装
我们前面讲到cloudera有三种安装方式,第一种是最方便的,就像安装一个客户端软件一样就可以了,操作简单。
但是第一种第二种方式都是在线安装,也就是需要网络网速,虚拟机需要连接外网,尤其是部分资源被墙了,所以在线安装会很慢。。。而且安装中断安装失败的可能性很大。
所以我们还是用第三种方式来安装,离线安装虚拟机不需要连接外网,可实现全离线安装,但是需要三台虚拟机和PC机能相互ping通。
我现在的情况是PC机能上外网,三台虚拟机不能上外网(作了ip限制),所以采用完全离线安装。
下载相关包
因为下载可能需要点时间,所以我们先把需要下载的东西全部列出来,可以边下载边安装配置linux系统,到最后快到安装部分时才需要用到下面的安装包。
oracle版本的jdk
需要oracle的java1.7以上的jdk
下载地址
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
我这里选择了一个rpm。
mysql离线安装包
http://dev.mysql.com/downloads/mysql/ 打开网址: Select Platform: 选择 Linux-Generic
选择选择 Linux - Generic (glibc 2.5) (x86, 64-bit), RPM 进行下载
我这里下载5.6.34版本的,如果跟我下载的一样,可以使用链接
http://cdn.mysql.com//Downloads/MySQL-5.6/MySQL-5.6.34-1.linux_glibc2.5.x86_64.rpm-bundle.tar
JDBC
hive/Oozie/Hue等都会使用到MySQL,因而安装MySQL是必须的。连接MySQL会用到JDBC驱动。
我们可以去Mysql的官网下载选一个版本即可,我这里选5.1.40,这里的版本随意,不需要跟什么搭配对应:
http://download.softagency.net/MySQL/Downloads/Connector-J/
或者
http://dev.mysql.com/downloads/connector/j/
http://download.softagency.net/MySQL/Downloads/Connector-J/mysql-connector-java-5.1.40.zip
Cloudera Manager安装包
资源链接
http://archive.cloudera.com/cm5/
大家可以根据自己所用的linux系统选择相应的版本来下载。
由于我们虚拟机的系统是CentOS6.4,所以需要下载如下文件:
Cloudera Manager 5.8.2安装包
http://archive.cloudera.com/cm5/cm/5/cloudera-manager-el6-cm5.8.2_x86_64.tar.gz
CDH安装包
资源链接 http://archive.cloudera.com/cdh5/
这里版本需要与系统对应centos 6.x使用的CDH版本为CDH-X.X.X-1.cdhX.X.X.p0.22-el6.parcel,而centos 5.x使用的CDH版本为CDH-X.X.X-1.cdhX.X.X.p0.22-el5.parcel。
而且需要注意的是CDH的版本需要等于或者小于CM的版本,因为我们的CM是5.8.2版本,所以要选择小于或者等于5.8.2的版本。
我们是centOS系统,选择parcels文件夹即可。
根据自己的系统和环境版本选择安装包。
我这里用CDH5.8.0安装包
需要注意的是这里的CDH5.8.2没找到CDH5.8.2-0的版本,CDH5.8.2-1版本是大于CMCDH5.8.2的,所以我这里用CDH5.8.0。
http://archive.cloudera.com/cdh5/parcels/5.8.0/CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel
http://archive.cloudera.com/cdh5/parcels/5.8.0/CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel.sha1
http://archive.cloudera.com/cdh5/parcels/5.8.0/manifest.json
下载完成后的文件
系统安装
如果是用的真机或者阿里云服务器等可省略此步骤,这里我们是学习环境,所以需要用VM11建立三台虚拟机。
详细步骤查看:
(注意选择虚拟机类型时选择Minimal Desktop,如果选择Minimal 最小安装会没有图形界面)
hadoop基础------虚拟机(二)---虚拟机安装以及安装linux系统
我们可以先创建一个内存2G的 磁盘30G的虚拟机 然后克隆出另外2个。
然后把其中一个的内存修改成8G作为主机master-cloudera scm server即可。
现在我们有了3台虚拟机
配置如下
cm0 内存8G 磁盘30G
cm1 内存2G 磁盘30G
cm2 内存2G 磁盘30G
我这里安装的是所有组件服务,安装完成后的磁盘和内存情况如下,所以内存太小和磁盘空间不够的话真的不行。。。
安装vmware tools
如果是真机可以忽略这个步骤。
vmware tools工具可以实现虚拟机和PC主机之间的复制粘贴,否则命令需要全部手打,会比较不方便。
安装vmware tools的详细步骤可参考:
hadoop基础-------虚拟机(三)-----VMware虚拟机下linux系统的与windows主机实现复制粘贴
以及
hadoop基础------虚拟机(四)-----VMware虚拟机下linux系统的图形界面和命令行文本界面的切换
网络配置
为了虚拟机之间能相互ping通,我们需要对虚拟机的网络根据PC的主机进行一下配置。如果是真机的话,也需要配置并测试是否能相互ping通。
因为我们之前已经学习过了,大家可以按照下面这篇文章详细操作:
注意:因为虚拟机克隆产生的VM的网卡号一般都会自动增加,也就是原VM是eth0,克隆生成的就是eth1,eth2等。
所以命令中的网卡号要对应
所以DEVICE=ethX这里需要对应。
linux基础(十)----linux网络配置详细步骤---桥接模式和两台机子的远程通信
对虚拟机网络不熟悉的也可以参考阅读:
hadoop基础-------虚拟机(五)-----虚拟机linux系统网络配置的三种模式
ps:都设置好之后如果发现物理机和虚拟机都能ping通192.168.X.1而且物理机能ping通虚拟机,但虚拟机ping不通物理机,一般是防火墙问题。
可能遇到的问题
遇到的问题----linux系统中的eth0网络不见了--重启不加载ifcfg-eth0的配置--需要重新激活
配置完成后用ifconfig查看网络情况如下:
关闭防火墙
物理机和虚拟机的防火墙和SElinux都需要关闭
在安装过程中需要关闭防火墙和SElinux,否则会异常。
使用getenforce命令查看SElinux是否关闭
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled,执行该命令后重启机器生效
service iptables status 查看防火墙状态
chkconfig iptables off
修改主机名和hosts文件
修改主机名命令
vi /etc/sysconfig/network
查看主机名命令
hostname
修改如下(重启后生效)
修改hosts文件
hosts文件主要是把ip和主机名映射起来。
vi /etc/hosts
三台虚拟机都在hosts文件中增加(根据自己的主机名和设置的ip):
192.168.30.168 cm0
192.168.30.171 cm1
192.168.30.170 cm2
修改如下:
设置ssh无密码登陆(所有节点)
因为hadoop集群在安装的时候需要集群中所有机器的权限。
所以我们需要打通所有节点的ssh无密码登陆。
思路是生成每台机子的密钥,集中在一个文件中,再分发到每台机子上。
为了确保下面的命令能顺利执行,请先重启所有节点并且保证所有节点能够通过主机名ping通。
三台机子都分别使用
ssh-keygen -t rsa
然后一直回车生成密钥。
我们可以看到/root/.ssh目录下有了密钥文件id_rsa以及公钥文件id_rsa.pub。
cd /root/.ssh
ls
三个节点中分别把公钥id_rsa.pub复制一份命名为authorized_keys_cm0、authorized_keys_cm1、authorized_keys_cm2。
也就是cm0中执行
cp id_rsa.pub authorized_keys_cm0
也就是cm1中执行
cp id_rsa.pub authorized_keys_cm1
也就是cm2中执行
cp id_rsa.pub authorized_keys_cm2
把从节点cm1和cm2的公钥传送到cm0节点的/root/.ssh文件夹中
cm1使用命令
scp authorized_keys_cm1 root@cm0:/root/.ssh
cm2使用命令
scp authorized_keys_cm2 root@cm0:/root/.ssh
这个时候我们在cm0中的root/.ssh目录会看到authorized_keys_cm0、authorized_keys_cm1、authorized_keys_cm2三个文件。
把它们合并追加到authorized_keys文件中。
cat authorized_keys_cm0>> authorized_keys
cat authorized_keys_cm1>> authorized_keys
cat authorized_keys_cm2>> authorized_keys
我们可以看到这个通行证authorized_keys中已经有了三台机子的公钥。
把这个通行证authorized_keys分发到其他节点----cm1和cm2中。
scp authorized_keys root@cm1:/root/.ssh
scp authorized_keys root@cm2:/root/.ssh
检查看看 cm1和cm2中已经有通行证了
测试节点之间相互ssh
例如在cm0中
ssh cm1
exit
ssh cm2
exit
例如在cm1中
ssh cm0
exit
ssh cm2
exit
配置NTP服务
集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。 运行时会报运行状况不良具体思路如下:
master节点作为ntp服务器与外界对时中心同步时间,随后对所有slave节点提供时间同步服务。(如果不能上外网那需要保证所有salve节点与master时间同步)
所有slave节点以master节点为基础同步时间。
步骤如下
查看NTP服务状态
ntpstat
启动ntp
service ntpd start
一般CentOS系统自带ntp服务,如果没安装的话需要安装一下,如果能连接外网,最方便的安装方法是yum
yum install ntp
如果不能连接外网只能自己查一下离线安装了--下载rpm包安装一下即可。
设置开机启动
chkconfig ntpd on
配置ntp
在配置前,先使用ntpdate手动同步下时间,免得本机与外部时间服务器时间差距太大,让ntpd不能正常同步。
使用命令
master节点cm0 ntpdate -u 65.55.56.206 (没有外网的话master就不需要配置了)
slave节点cm1和cm2 ntpdate cm0 (主节点ntp服务器)
vi /etc/ntp.conf
进入配置文件
master节点cm0选用65.55.56.206作为对时中心。(没有外网的话master就不需要配置了)
主要配置如下
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
restrict default nomodify notrap
server 65.55.56.206 prefer
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
主要是增加
server 65.55.56.206 prefer
slave节点cm1和cm2选用cm0作为对时中心。
主要配置如下
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
#这里是主节点的主机名或者ip
server cm0
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
主要是增加
server cm0
配置文件完成,保存退出,启动服务,执行如下命令
service ntpd start
执行启动5到10分钟后检查是否成功。(才执行完命令一般本地的ntp服务器还没有正常启动,一般需要等待5-10分钟才可以正常同步。)
用
ntpstat
命令查看同步状态,出现以下状态代表启动成功:
synchronised to NTP server () at stratum 2time correct to within 74 mspolling server every 128 s
检查是否设置成功
chkconfig --list ntpd 其中2-5为on状态就代表成功。
watch "ntpq -p"
查看同步报告。
因为NTP的时间同步是平滑同步,不是跳跃式同步,如果设置得不好的话,很难校验出它同步成功了没,总感觉会缺少几秒钟的感觉。
有一种解决方法是 我们这里不用NTP的自动同步,而是使用crond每分钟ntpdate 跳跃式同步一次。
这种方法不建议在生产环境使用,但是一般生成环境都有外网,所以就能正确设置NTP。
所以下面我们在局域网无外网的情况下可以用以下方法(偏方)确保时间同步:
为了确保能同步时间,我们这里再加上定时同步步骤。
首先保证cm0的NTP服务是开启的。
然后停止cm1和cm2的NTP服务。
在cm0中运行
service ntpd start
在cm1和cm2中运行
service ntpd stop
cm1上的配置:
修改crond自动运行程序的配置文件:
vi /var/spool/cron/root (此处是以root用户为例,如果是其他用户,替换为对应的用户文件名,即可),在该配置文件中,添加一行:
*/1 * * * * ntpdate cm0
(每隔一分钟,从cm0同步一次时间)
保存,重新启动crond服务:
service crond restart。
一分钟以后,cm1的时间就同步为cm0的时间了。
cm2的配置:同cm1一样。局域网内还有其他机器,设置方法也同cm1一样。
然后CM中的NTP验证需要抑制。
所有节点安装jdk
CentOS自带OpenJdk,不过运行CDH5需要使用Oracle的Java 7以上的jdk支持。
所以我们需要把OpenJdk卸载,然后安装Oracle的java7以上的jdk。
查看最低需要支持的jdk版本链接:
卸载OpenJdk
使用
rpm -qa | grep java
查询java相关的包,使用
rpm -e --nodeps 包名
卸载。
图中我们可以看到有3个java相关的包,使用命令
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64
rpm -e --nodeps tzdata-java-2012j-1.el6.noarch
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el6_3.x86_64
都卸载之后jdk卸载成功了。
安装oraclejdk
我们之前已经下载了oracle的java jdk1.8.现在用ssh工具把文件传到这几台虚拟机中。
连接之后我们新建一个目录用来安装jdk,目录新建为/usr/local/java,然后把jdk-8u111-linux-x64.rpm拉过去。
进入该目录使用命令
rpm -ivh 包名
安装。
我们这里也就是
cd /usr/local/java
rpm -ivh jdk-8u111-linux-x64.rpm
由于是rpm包并不需要我们来配置环境变量,我们只需要配置一个全局的JAVA_HOME变量即可,执行命令:
JAVA_HOME的目录对应我们的安装目录,我们这里放rpm的目录是/usr/local/java/,但是用rpm安装的jdk默认路径是usr/java/latest。
所以我们的JAVA_HOME变量应该是/usr/java/latest/。
echo "JAVA_HOME=/usr/java/latest/" >> /etc/environment
然后用
java -version
检查是否安装成功。
其他两台cm1和cm2也类似操作安装即可。
主节点安装mysql
注意,仅在server节点也就是master节点cm0安装mysql。
CentOS自带了mysql,但是版本较低是5.1的。
使用命令
rpm -qa | grep mysql
查看系统之前是否已安装MySQL。
查看组件需要需要的mysql版本链接
所以 我们还是需要把原mysql卸载,安装新的mysql5.6以上。
卸载旧mysql
我们还是使用命令
rpm -e --nodeps 包名
卸载旧的mysql,我们这里也就是使用
rpm -e --nodeps mysql-libs-5.1.66-2.el6_3.x86_64
命令来进行卸载。
rpm -qa | grep mysql 验证一次是否删除成功。
安装mysql
然后把我们之前下载好的mysql安装文件MySQL-5.6.34-1.linux_glibc2.5.x86_64.rpm-bundle.tar用ssh工具上传到虚拟机中。
我们还是新建一个目录/usr/local/mysql
详细安装步骤查看
【2019-1-26 qqflying备注:CentOS 7下面安装mysql,还要额外删除系统自带的MariaDB数据库
[root@localhost ~]# rpm -qa|grep mysql akonadi-mysql-1.9.2-4.el7.x86_64 qt-mysql-4.8.7-2.el7.x86_64 [root@localhost ~]# rpm -e --nodeps akonadi-mysql-1.9.2-4.el7.x86_64 [root@localhost ~]# rpm -e --nodeps qt-mysql-4.8.7-2.el7.x86_64 [root@localhost ~]# rpm -qa|grep mysql [root@localhost ~]# rpm -qa|grep MariaDB [root@localhost ~]# rpm -qa|grep mariadb mariadb-server-5.5.56-2.el7.x86_64 mariadb-5.5.56-2.el7.x86_64 mariadb-libs-5.5.56-2.el7.x86_64 [root@localhost ~]# rpm -e --nodeps mariadb-server-5.5.56-2.el7.x86_64 [root@localhost ~]# rpm -e --mariadb-5.5.56-2.el7.x86_64 rpm: --mariadb-5.5.56-2.el7.x86_64: 未知的选项 [root@localhost ~]# rpm -e --nodeps mariadb-5.5.56-2.el7.x86_64 [root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 [root@localhost ~]#
】
安装mysql其他相关组件
除了安装mysqlsever和client之外我们还需要安装其他相关的mysql组件,这些组件都在加压出来的目录中。
解压mysql文件的目录里发现了除了
MySQL-client-5.6.34-1.linux_glibc2.5.x86_64.rpm
MySQL-server-5.6.34-1.linux_glibc2.5.x86_64.rpm
这两个安装文件之外另外的rpm包。
我们把其他几个关联rpm包也安装一下。
rpm -ivh MySQL-shared-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-devel-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-shared-compat-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-embedded-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-test-5.6.34-1.linux_glibc2.5.x86_64.rpm
修改密码和创建数据库并授权
旧版mysql才安装完root密码为空,新版mysql的root密码为随机密码保存在/root/.mysql_secret中。
修改密码
使用
service mysql start
启动mysql
使用
netstat -ntlp | grep 3306
查找3306端口确认是否已经启动成功。
cat /root/.mysql_secret
查看随机密码
mysql -u root -p mysql
然后输入随机密码首次登录mysql并且选择mysql数据库
使用以下命令设置root的新密码
mysql> SET PASSWORD = PASSWORD('123456');
mysql>create database roger;
mysql> quit
我这里新密码设置为123456.
然后
mysql -u root -p
使用123456登陆成功。
创建数据库并授权
我们需要创建cdh5.8组件中会使用到的数据库,创建语句如下:
mysql -u root -p 输入密码进入mysql命令行,创建以下数据库:
#hive
mysql>create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#activity monitor
mysql>create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#activity oozie
mysql>create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#hue数据库
mysql>create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
设置root授权访问以上所有的数据库:
#授权root用户在主节点拥有所有数据库的访问权限---'123456' 对应刚才设置的root的密码。
mysql>grant all privileges on *.* to 'root'@'cm0' identified by '123456' with grant option;
mysql>flush privileges;
检查环境
在正式开始安装CDH之前最好先检查一下能不能相互免密ssh,以及防火墙是否关闭,集群中的时间是否统一,java版本是否是oracle的版本,主节点mysql是否安装正确等。
ssh测试
例如在cm0中
ssh cm1
exit
ssh cm2
exit
例如在cm1中
ssh cm0
exit
ssh cm2
exit
例如在cm2中
ssh cm0
exit
ssh cm1
exit
时间是否统一
每台机子中使用
date
命令查看当前时间,最好是完全一样或者差距不大即可。
或者在cm0中使用命令
date;ssh cm1 date;ssh cm2 date
java的版本
每个机子中使用
java -version
命令查询jdk的版本。只要不是自带的openJDK即可。
防火墙状态
每个机子中使用
service iptables status
查看防火墙状态
【2019-1-26 qqflying 备注:Centos 7下查看防火墙状态:
查看 service firewalld status
停止 service firewalld stop
启动 service firewalld start
禁止开机启动 systemctl disable firewalld
】
SElinux状态
每个机子中使用
getenforce
命令查看SElinux是否关闭
mysql状态和数据库
mysql -u root -p
使用123456登陆成功后。
show databases;
看看是否新建需要用到的数据库
主节点安装Cloudera Manager Server 和所有节点配置Agent
主节点安装cloudera manager
在主节点cm0中解压安装cloudera manager。
首先把我们下载好的cloudera-manager-*.tar.gz包和mysql驱动包mysql-connector-java-*-bin.jar放到主节点cm0的/opt中。如图:
我下载的版本分别是:cloudera-manager-el6-cm5.8.2_x86_64.tar.gz和mysql-connector-java-5.1.40.zip。
【2019-1-26 qqflying 备注:centos7下需要安装el7而不是el6,所以需要下载cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz进行安装(下载地址:
http://archive.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.8.0_x86_64.tar.gz
),否则客户端服务启动时(/opt/cm-5.8.2/etc/init.d/cloudera-scm-agent start)会报错,“/usr/bin/env: python2.4: 没有那个文件或目录”。
】
cloudera manager的目录默认位置在/opt下
所以我们在opt目录解压安装文件,命令如下:
cd /opt
tar xzvf cloudera-manager-el6-cm5.8.2_x86_64.tar.gz
使用命令
ls
确保cm-5.8.2和cloudera目录在/opt目录下。
Cloudera Manager建立数据库
我们把mysql-connector-java-5.1.40.zip也解压一下。
unzip mysql-connector-java-5.1.40.zip
ls
cd mysql-connector-java-5.1.40
发现jar包mysql-connector-java-5.1.40-bin.jar已经解压出来了。
使用命令
cp mysql-connector-java-5.1.40-bin.jar /opt/cm-5.8.2/share/cmf/lib/
把mysql-connector-java-5.1.40-bin.jar放到/opt/cm-5.8.2/share/cmf/lib/中。
cd /opt/cm-5.8.2/share/cmf/lib/
ls|more
确认已经放进去了。
在主节点初始化CM5的数据库
使用命令
在命令里scm_prepare_database.sh后面的参数分别是:数据库类型 数据库名称(可以随便起一个名称) 数据库主机名 数据库用户名 密码 --scm-host 主节点机名 scm scm scm
/opt/cm-5.8.2/share/cmf/schema/scm_prepare_database.sh mysql cm -h cm0 -u root -p 123456 --scm-host cm0 scm scm scm
Agent配置
主节点修改agent配置文件。
/opt/cm-5.8.2/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名。
使用命令
vim /opt/cm-5.8.2/etc/cloudera-scm-agent/config.ini
在主节点cm0用命令同步Agent到其他所有节点
scp -r /opt/cm-5.8.2 root@cm1:/opt/
scp -r /opt/cm-5.8.2 root@cm2:/opt/
在所有节点创建cloudera-scm用户
在每台机子中
使用命令
useradd --system --home=/opt/cm-5.8.2/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
启动cm和agent
主节点cm0通过命令
/opt/cm-5.8.2/etc/init.d/cloudera-scm-server start
启动服务端。
所有节点通过命令
/opt/cm-5.8.2/etc/init.d/cloudera-scm-agent start
启动Agent服务。 (所有节点都要启动Agent服务,包括服务端)
我们启动的其实是个service脚本,需要停止服务将以上的start参数改为stop就可以了,重启是restart。
Cloudera Manager Server和Agent都启动以后,就可以进行尝试访问了。
【2019-1-26 qqflying备注:server和agent启动之后,需要等待几分钟才能访问下面网站,所以不要误以为自己没弄好】
http://master:7180/cmf/login
我这里master是主节点cm0,也就是应该访问
http://192.168.30.168:7180/cmf/login
安装CM成功。
安装到此处,可以考虑备份节点,为将来的节点拓展做准备。
CDH5的安装和集群配置
准备文件
安装parcel
本地通过Parcel安装过程与本地通过Package安装过程完全一致,不同的是两者的本地源的配置。
区别如下:
Package本地源:软件包是.rpm格式的,数量通常较多,下载的时候比较麻烦。通过”createrepo .”的命令创建源,并要放到存放源文件主机的web服务器的根目录下,详见创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备
Parcel本地源:软件包是以.parcel结尾,相当于压缩包格式的,一个系统版本对应一个,下载的时候方便。如centos 6.x使用的CDH版本为CDH-X.X.X-1.cdhX.X.X.p0.22-el6.parcel,而centos 5.x使用的CDH版本为CDH-X.X.X-1.cdhX.X.X.p0.22-el5.parcel。
这些文件放好之后,CM会获取这个包,并出现在主机->包裹的页面。出现的快慢跟你设置的包的刷新频率有关,默认是1小时。也可以重启CM服务和agent服务识别。
可以在管理页面的属性标签下的包裹种类里修改。
【2019-1-26 qqflying备注:群集安装过程中会下载很多安装文件放到/var/cache/yum/x86_64/7/base/packages/目录中去,其中一个cloudera-manager-daemons-5.8.0-1.cm580.p0.42.el7.x86_64.rpm比较大514M,最好是提前下载下来安装之后在执行群集安装,否则网速慢的时候可能报错:[Errno 256] No more mirrors to try. 从而整体出现安装失败的提示】
等待parcel安装
正常情况下 内网网速速好的话 10分钟左右激活完毕,最多不超过30分钟 如果卡住了 建议看看日志
安装过程中有什么问题 可以用
/opt/cm-5.8.2/etc/init.d/cloudera-scm-agent status
/opt/cm-5.8.2/etc/init.d/cloudera-scm-server status
查看服务器客户端状态
也可以通过
/var/log/cloudera-scm-server/cloudera-scm-server.log
/var/log/cloudera-scm-agent/cloudera-scm-agent.log
查看日志
如果上面的路径找不到则在
日志文件夹"/opt/cm-5.8.2/log"查看日志,里面包含server和agent的log,使用命令如下:
tail -f /opt/cm-5.8.2/log/cloudera-scm-server/cloudera-scm-server.log
tail -f /opt/cm-5.8.2/log/cloudera-scm-agent/cloudera-scm-agent.log
例如我这里NTP因为没有外网,所以会报错,不过有些错误不影响的话不需要管。
成功激活后继续右下角点击继续
主机检查
会进入自动检查主机(耗时2分钟左右)然后给出报告,包括需要修改的部分和组件的版本
解决警告
这里有2个警告需要解决一下,至于版本里的不可用不适用不需要管。
警告一
Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf,以在重启后保存该设置。您可以继续进行安装,但 Cloudera Manager 可能会报告您的主机由于交换而运行状况不良。以下主机将受到影响
解决方法
每台受影响的主机运行
echo 10 > /proc/sys/vm/swappiness 即可解决。
警告二
已启用透明大页面压缩,可能会导致重大性能问题。请运行“echo never > /sys/kernel/mm/transparent_hugepage/defrag”以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始脚本中,以便在系统重启时予以设置。以下主机将受到影响
解决方法
每台受影响的主机运行命令
echo never > /sys/kernel/mm/transparent_hugepage/defrag
并且
vim /etc/rc.local
加入echo never > /sys/kernel/mm/transparent_hugepage/defrag这条命令。
然后点击重新运行进行重新检查
全部绿勾了,然后点击右下角的完成。
选择安装哪些组件服务--这里根据需求选择即可。
选择组件服务
右下角点击继续,然后配置角色。一般情况下保持默认就可以了(Cloudera Manager会根据机器的配置自动进行配置,如果需要特殊调整,自行进行设置就可以了)。
我这里使用默认配置,所以直接点击继续就可以了。
配置数据库
然后配置数据库
这里需要输入自己的mysql的对应数据库名称和用户名以及密码。
我们之前在mysql中新建的数据名分布对应填入 然后点击测试连接。
hive root 123456
oozie root 123456
hue root 123456
如果测试连接全部是Successful,则点击右下角的继续。
可能遇到的问题---hue--unable to verify
查看日志后发现原因是
Error loading MySQLdb module: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
这个是因为cm的服务端是用java编写的,cm的客户端是python编写的,这里测试连接时是用python去连接数据库。但是CentOS系统本身会缺少一些python连接数据库需要的关联库。
解决方法
在mysql的安装目录找到系统缺少的这个包,关联到系统即可。
根据最后提示,应该是找不着一个交libmysqlclient_r.so.16的文件,于是到mysql安装目录里找到这个文件并且做一个软连接到/usr/lib
如果是按照我们之前的离线安装mysql步骤安装的话 默认的mysql安装目录是/var/lib/mysql/
ln -s /var/lib/mysql/lib/libmysqlclient_r.so.16 /usr/lib64/libmysqlclient_r.so.16
但是/var/lib/mysql/ 目录下没有找到lib目录
使用
find / -name libmysqlclient_r.so.16
whereis libmysqlclient_r.so.16
也找不到libmysqlclient_r.so.16。
我们在之前解压mysql文件的目录里发现了除了
MySQL-client-5.6.34-1.linux_glibc2.5.x86_64.rpm
MySQL-server-5.6.34-1.linux_glibc2.5.x86_64.rpm
这两个安装文件之外另外的rpm包。
我们把其他几个关联rpm包也安装一下。
rpm -ivh MySQL-shared-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-devel-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-shared-compat-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-embedded-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-test-5.6.34-1.linux_glibc2.5.x86_64.rpm
安装完成后再查找
whereis libmysqlclient_r.so.16
发现已经有了libmysqlclient_r.so.16而且已经在/usr/lib64路径下了。
再次点击测试连接,成功。
审核更改
审核更改中列出相关目录和配置,如果有需要的话就修改,无特殊需求使用默认的即可,点击右下角的继续。
另外如果需要自己设定文件夹,一定要先mkdir文件夹,否侧hdfs会无法启动,并且报错文件夹不存在,并确保访问权限。
集群启动
集群会首次运行所有的组件,这过程中可能会有一些错误,不要担心,解决重试即可。下面会依次给出我遇到的情况供大家参考,基本上都是权限或者驱动问题。
正确首次启动后如下图(是不是很激动^^)
右下角继续,离成功安装一步之遥。
可能遇到的问题---hdfs启动失败--创建/tmp目录失败
Directory /tmp does not currently exist
Can't open /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp/supervisor.conf: Permission denied.
报错信息
Mon Nov 28 14:20:59 CST 2016
JAVA_HOME=/usr/java/latest/
using /usr/java/latest/ as JAVA_HOME
using 5 as CDH_VERSION
using /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp as CONF_DIR
using as SECURE_USER
using as SECURE_GROUP
unlimited
Directory /tmp does not currently exist.
+ HADOOP_CLASSPATH=/opt/cm-5.8.2/share/cmf/lib/plugins/event-publish-5.8.2-shaded.jar:/opt/cm-5.8.2/share/cmf/lib/plugins/tt-instrumentation-5.8.2.jar:/opt/cm-5.8.2/share/cmf/lib/plugins/navigator/cdh57/audit-plugin-cdh57-2.7.2-shaded.jar
+ set -x
+ replace_conf_dir
+ find /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp -type f '!' -path '/opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp/logs/*' '!' -name '*.log' '!' -name '*.keytab' '!' -name '*jceks' -exec perl -pi -e 's#{{CMF_CONF_DIR}}#/opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp#g' '{}' ';'
Can't open /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp/supervisor.conf: Permission denied.
+ make_scripts_executable
+ find /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp -regex '.*\.py∥shpy‖sh$' -exec chmod u+x '{}' ';'
+ '[' DATANODE_MAX_LOCKED_MEMORY '!=' '' ']'
+ ulimit -l
+ export HADOOP_IDENT_STRING=hdfs
+ HADOOP_IDENT_STRING=hdfs
+ '[' -n '' ']'
+ acquire_kerberos_tgt hdfs.keytab
+ '[' -z hdfs.keytab ']'
+ '[' -n '' ']'
+ '[' validate-writable-empty-dirs = mkdir ']'
+ '[' file-operation = mkdir ']'
+ '[' bootstrap = mkdir ']'
+ '[' failover = mkdir ']'
+ '[' transition-to-active = mkdir ']'
+ '[' initializeSharedEdits = mkdir ']'
+ '[' initialize-znode = mkdir ']'
+ '[' format-namenode = mkdir ']'
+ '[' monitor-decommission = mkdir ']'
+ '[' jnSyncWait = mkdir ']'
+ '[' nnRpcWait = mkdir ']'
+ '[' -safemode = supergroup -a get = 1777 ']'
+ '[' monitor-upgrade = mkdir ']'
+ '[' finalize-upgrade = mkdir ']'
+ '[' rolling-upgrade-prepare = mkdir ']'
+ '[' rolling-upgrade-finalize = mkdir ']'
+ '[' nnDnLiveWait = mkdir ']'
+ '[' refresh-datanode = mkdir ']'
+ '[' mkdir = mkdir ']'
+ '[' 5 -ne 5 ']'
+ DIR=/tmp
+ USER=hdfs
+ GROUP=supergroup
+ PERMS=1777
+ RET=0
+ /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hadoop-hdfs/bin/hdfs --config /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp dfs -test -d /tmp
原因是hdfs用户或者cm用户对这个文件没有操作权限。我们进入这个目录查看
cd /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp/
ls -l
发现确实是这个文件只有root才能读写,那么我们应该设置一下权限,因为cm是用hdfs用户在操作的。
使用命令
cd /opt/cm-5.8.2/run/cloudera-scm-agent/process/61-hdfs-NAMENODE-createtmp/
chmod 666 supervisor.conf
ls -l
然后点击右下角的重试。
可能遇到的问题--启动 Key-Value Store Indexer, YARN (MR2 Included)---Create Job History Dir 失败
启动 Key-Value Store Indexer, YARN (MR2 Included)
仅完成 0/2 个步骤。首个失败:在服务 Key-Value Store Indexer 上执行命令 Start 失败
仅完成 0/2 个步骤。首个失败:在服务 YARN (MR2 Included) 上执行命令 Create Job History Dir 失败
使用用户 mapred 组 hadoop 和权限 1777 创建 DFS 目录 /tmp/logs
主机运行状况变成不良时,主机 cm0 (id=3) 上的进程 dfs-create-dir (id=72) 被标记为失败
Mon Nov 28 14:53:18 CST 2016
JAVA_HOME=/usr/java/latest/
using /usr/java/latest/ as JAVA_HOME
using 5 as CDH_VERSION
using /opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir as CONF_DIR
using as SECURE_USER
using as SECURE_GROUP
unlimited
Directory /tmp/logs does not currently exist.
Created directory /tmp/logs.
Changed ownership of /tmp/logs to mapred:hadoop.
Can't open /opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir/supervisor.conf: Permission denied.
+ HADOOP_CLASSPATH=/opt/cm-5.8.2/share/cmf/lib/plugins/event-publish-5.8.2-shaded.jar:/opt/cm-5.8.2/share/cmf/lib/plugins/tt-instrumentation-5.8.2.jar:/opt/cm-5.8.2/share/cmf/lib/plugins/navigator/cdh57/audit-plugin-cdh57-2.7.2-shaded.jar
+ set -x+ replace_conf_dir+ find /opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir -type f '!' -path '/opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir/logs/*' '!' -name '*.log' '!' -name '*.keytab' '!' -name '*jceks' -exec perl -pi -e 's#{{CMF_CONF_DIR}}#/opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir#g' '{}' ';'Can't open /opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir/supervisor.conf: Permission denied.+ make_scripts_executable+ find /opt/cm-5.8.2/run/cloudera-scm-agent/process/72-dfs-create-dir -regex '.*\.py∥shpy‖sh$' -exec chmod u+x '{}' ';'+ '[' DATANODE_MAX_LOCKED_MEMORY '!=' '' ']'+ ulimit -l+ export HADOOP_IDENT_STRING=hdfs+ HADOOP_IDENT_STRING=hdfs+ '[' -n '' ']'+ acquire_kerberos_tgt hdfs.keytab+ '[' -z hdfs.keytab ']'+ '[' -n '' ']'+ '[' validate-writable-empty-dirs = mkdir ']'
点击stderr看了详细的报错发现仍然是权限问题,解决方法跟之前一样,进入这个路径后更改下权限即可。
可能遇到的问题--Solr, HBase--Command Start is not currently available for execution
这种情况界面上没有详细的信息但是在日志中可以看到是超时了,这种情况下确保局域网网络好的情况下并且master服务器服务良好的情况下直接重试。
可能遇到问题---启动hive---Failed to Create Hive Metastore Database Tables
++ false++ exec /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hadoop/bin/hadoop jar /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/lib/hive-cli-1.1.0-cdh5.8.0.jar org.apache.hive.beeline.HiveSchemaTool -verbose -dbType mysql -initSchemaJava HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512M; support was removed in 8.0org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driverorg.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driverat org.apache.hive.beeline.HiveSchemaHelper.getConnectionToMetastore(HiveSchemaHelper.java:79)at org.apache.hive.beeline.HiveSchemaTool.getConnectionToMetastore(HiveSchemaTool.java:113)at org.apache.hive.beeline.HiveSchemaTool.testConnectionToMetastore(HiveSchemaTool.java:159)at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:257)at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:243)at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:473)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.hadoop.util.RunJar.run(RunJar.java:221)at org.apache.hadoop.util.RunJar.main(RunJar.java:136)Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:264)at org.apache.hive.beeline.HiveSchemaHelper.getConnectionToMetastore(HiveSchemaHelper.java:70)... 11 more*** schemaTool failed ***
这是hive的lib包中缺少mysql的驱动导致的。我们之前已经把mysql驱动包mysql-connector-java-*-bin.jar放到主节点cm0的/opt中,现在复制一份到/opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/lib(这里CDH-5.8.0-1.cdh5.8.0.p0.42要跟自己的版本对应)
使用命令如下
cd /opt/mysql-connector-java-5.1.40cp mysql-connector-java-5.1.40-bin.jar /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/lib把mysql-connector-java-5.1.40-bin.jar放到/opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/lib中。 cd /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/libls|more确认已经放进去了。
然后点击右下角的重试。
可能遇到的问题---启动 Oozie, Impala---Create Oozie Database Tables 失败
Error: Could not connect to the database: java.lang.ClassNotFoundException: com.mysql.jdbc.DriverStack trace for the error was (for debug purposes):--------------------------------------java.lang.Exception: Could not connect to the database: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat org.apache.oozie.tools.OozieDBCLI.validateConnection(OozieDBCLI.java:905)at org.apache.oozie.tools.OozieDBCLI.createDB(OozieDBCLI.java:185)at org.apache.oozie.tools.OozieDBCLI.run(OozieDBCLI.java:129)at org.apache.oozie.tools.OozieDBCLI.main(OozieDBCLI.java:80)Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:264)at org.apache.oozie.tools.OozieDBCLI.createConnection(OozieDBCLI.java:894)at org.apache.oozie.tools.OozieDBCLI.validateConnection(OozieDBCLI.java:901)... 3 more--------------------------------------
+ '[' 0 = 1 ']'+ '[' CLOUDERA_MYSQL_CONNECTOR_JAR '!=' '' ']'+ eval 'JAR_LOCATION=$CLOUDERA_MYSQL_CONNECTOR_JAR'++ JAR_LOCATION=/usr/share/java/mysql-connector-java.jar+ echo 'Copying JDBC jar from /usr/share/java/mysql-connector-java.jar to /var/lib/oozie'+ cp /usr/share/java/mysql-connector-java.jar /var/lib/oozie/cp: cannot stat `/usr/share/java/mysql-connector-java.jar': No such file or directory+ OOZIECPPATH=
跟hive启动的问题一样,缺少驱动。
Oozie的lib包中缺少mysql的驱动导致的。我们之前已经把mysql驱动包mysql-connector-java-*-bin.jar放到主节点cm0的/opt中,现在复制一份到/opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/Oozie/lib(这里CDH-5.8.0-1.cdh5.8.0.p0.42要跟自己的版本对应)
再复制一份到/var/lib/oozie/
使用命令如下把mysql-connector-java-5.1.40-bin.jar放到/opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/oozie/lib中。
cd /opt/mysql-connector-java-5.1.40
cp mysql-connector-java-5.1.40-bin.jar /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/oozie/lib
cp mysql-connector-java-5.1.40-bin.jar /var/lib/oozie
cd /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/oozie/lib
ls|more
确认已经放进去了。
cd /var/lib/oozie
ls|more
点击右下角重试。
安装完成
恭喜您,安装完成。
点击完成后会进入监控界面。如果有红色的话,还是需要我们去解决的。。。
具体排查的情况可以参考文章或者自己查资料。
hadoop基础----hadoop实战(九)-----hadoop管理工具---CDH的错误排查(持续更新)
全部解决后就全绿了。
备份安装配置完好的系统
到这里我们的安装就算完成了。为了以后的修复方便,我们可以对分别对linux系统进行备份。虚拟机的就很方便,直接复制压缩虚拟机文件即可。