咱们在上篇文章中已经了解了CDH,为了后续的学习,咱们本章就来安装CDH5.8。CDH5.8是目前比较新的版本,自带hadoop2.0以上的hadoop,并且已经包含了不少组件,也是咱们接下来须要学习的hadoop生态圈中的组件。css
Cloudera Manager是为了简化hadoop及其组件的部署,可是因为包含的组件较多,对内存要求也比较大。因此咱们尽可能要保持主节点master和副节点足够的内存和磁盘空间,不然会出现一些没法预估的错误。html
官方推荐配置java
主节点 内存10G以上 磁盘30G node
副节点 内存4G以上 磁盘30G python
若是不知足条件的话能够适当减一些配置,但不保证能安装成功。mysql
咱们这里仍是用VM虚拟机建立三个虚拟机来部署。linux
由于条件限制个人虚拟机建立以下:web
PC机系统win10(这个随意,应该不影响)sql
PC机内存16G shell
虚拟机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。
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
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
资源连接
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
资源连接 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工具能够实现虚拟机和PC主机之间的复制粘贴,不然命令须要所有手打,会比较不方便。
安装vmware tools的详细步骤可参考:
hadoop基础-------虚拟机(三)-----VMware虚拟机下linux系统的与windows主机实现复制粘贴
以及
hadoop基础------虚拟机(四)-----VMware虚拟机下linux系统的图形界面和命令行文本界面的切换
为了虚拟机之间能相互ping通,咱们须要对虚拟机的网络根据PC的主机进行一下配置。若是是真机的话,也须要配置并测试是否能相互ping通。
由于咱们以前已经学习过了,你们能够按照下面这篇文章详细操做:
注意:由于虚拟机克隆产生的VM的网卡号通常都会自动增长,也就是原VM是eth0,克隆生成的就是eth1,eth2等。
因此命令中的网卡号要对应
因此DEVICE=ethX这里须要对应。
linux基础(十)----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
vi /etc/sysconfig/network
查看主机名命令
hostname
修改以下(重启后生效)
hosts文件主要是把ip和主机名映射起来。
vi /etc/hosts
三台虚拟机都在hosts文件中增长(根据本身的主机名和设置的ip):
192.168.30.168 cm0
192.168.30.171 cm1
192.168.30.170 cm2
修改以下:
由于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_cm一、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_cm一、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
集群中全部主机必须保持时间同步,若是时间相差较大会引发各类问题。 运行时会报运行情况不良具体思路以下:
master节点做为ntp服务器与外界对时中心同步时间,随后对全部slave节点提供时间同步服务。(若是不能上外网那须要保证全部salve节点与master时间同步)
全部slave节点以master节点为基础同步时间。
步骤以下
ntpstat
service ntpd start
通常CentOS系统自带ntp服务,若是没安装的话须要安装一下,若是能链接外网,最方便的安装方法是yum
yum install ntp
若是不能链接外网只能本身查一下离线安装了--下载rpm包安装一下便可。
chkconfig ntpd on
在配置前,先使用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验证须要抑制。
CentOS自带OpenJdk,不过运行CDH5须要使用Oracle的Java 7以上的jdk支持。
因此咱们须要把OpenJdk卸载,而后安装Oracle的java7以上的jdk。
查看最低须要支持的jdk版本连接:
使用
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卸载成功了。
咱们以前已经下载了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也相似操做安装便可。
注意,仅在server节点也就是master节点cm0安装mysql。
CentOS自带了mysql,可是版本较低是5.1的。
使用命令
rpm -qa | grep mysql
查看系统以前是否已安装MySQL。
查看组件须要须要的mysql版本连接
因此 咱们仍是须要把原mysql卸载,安装新的mysql5.6以上。
咱们仍是使用命令
rpm -e --nodeps 包名
卸载旧的mysql,咱们这里也就是使用
rpm -e --nodeps mysql-libs-5.1.66-2.el6_3.x86_64
命令来进行卸载。
rpm -qa | grep mysql 验证一次是否删除成功。
而后把咱们以前下载好的mysql安装文件MySQL-5.6.34-1.linux_glibc2.5.x86_64.rpm-bundle.tar用ssh工具上传到虚拟机中。
咱们仍是新建一个目录/usr/local/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是否安装正确等。
例如在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 -version
命令查询jdk的版本。只要不是自带的openJDK便可。
每一个机子中使用
service iptables status
查看防火墙状态
每一个机子中使用
getenforce
命令查看SElinux是否关闭
mysql -u root -p
使用123456登录成功后。
show databases;
看看是否新建须要用到的数据库
在主节点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。
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目录下。
咱们把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配置文件。
/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/
在每台机子中
使用命令
useradd --system --home=/opt/cm-5.8.2/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
主节点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都启动之后,就能够进行尝试访问了。
http://master:7180/cmf/login
我这里master是主节点cm0,也就是应该访问
http://192.168.30.168:7180/cmf/login
安装CM成功。
安装到此处,能够考虑备份节点,为未来的节点拓展作准备。
本地经过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服务识别。
能够在管理页面的属性标签下的包裹种类里修改。
等待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,则点击右下角的继续。
查看日志后发现缘由是
这个是由于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会没法启动,而且报错文件夹不存在,并确保访问权限。
集群会首次运行全部的组件,这过程当中可能会有一些错误,不要担忧,解决重试便可。下面会依次给出我遇到的状况供你们参考,基本上都是权限或者驱动问题。
正确首次启动后以下图(是否是很激动^^)
右下角继续,离成功安装一步之遥。
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)
仅完成 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看了详细的报错发现仍然是权限问题,解决方法跟以前同样,进入这个路径后更改下权限便可。
这种状况界面上没有详细的信息可是在日志中能够看到是超时了,这种状况下确保局域网网络好的状况下而且master服务器服务良好的状况下直接重试。
++ 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确认已经放进去了。
而后点击右下角的重试。
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系统进行备份。虚拟机的就很方便,直接复制压缩虚拟机文件便可。