- 概述
- 文件下载
- 环境搭建
- 安装Cloudera Manger
- 日志查看
- Q&A
概述
大数据时代,Hadoop是热门的Apache开源项目,公司大多基于其商业化从而满足自身的数据作业需求。CDH(Cloudera’s Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,整合Hadoop及一系列数据服务,关于CDH,官网给予的解释如下:
Critical Capabilities for Data Warehouse Database Management Systems
官网提供安装包、部署手册以及API说明
安装过程参考:
http://blog.csdn.net/jdplus/article/details/45920733
http://blog.csdn.net/a921122/article/details/51939692
基于其上,进行适当的修改和完善
文件下载
- Cloudera Manager 地址:http://archive.cloudera.com/cm5/cm/5/
这里下载的是5.13.1的版本,http://archive.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.13.1_x86_64.tar.gz - CDH安装包
地址:http://archive.cloudera.com/cdh5/parcels
本文基于CentOS7,下载的parcels包及manifest文件对应的版本为e17:
CDH-5.13.1-1.cdh5.9.0.p0.23-el7.parcel
CDH-5.13.1-1.cdh5.9.0.p0.23-el7.parcel.sha1
manifest.json - JDBC
http://download.softagency.net/MySQL/Downloads/Connector-J/
mysql-connector-java-5.1.39.tar.gznote : JDBC目前已经有6.x,但与CDH 5.x存在不兼容,这里提供5.1.39下载包
环境搭建
1. 网络配置(所有节点)
修改主机名:vim /etc/sysconfig/network
HOSTNAME=master
设置网络为启动后自动连接,相关的设置文件为vim /etc/sysconfig/network-scripts/ifcfg-ethXX/
ONBOOT=yes
修改IP与主机名的对应关系:vim /etc/hosts
192.168.39.31 master
192.168.39.20 node1
192.168.39.23 node2
2. 设置SSH无密码访问(所有节点)
执行一下命令,一路回车,生成无密码的密钥对。
# ssh-keygen -t rsa
将公钥添加到认证文件中, 并设置authorized_keys的访问权限
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# chmod 600 ~/.ssh/authorized_keys
通过scp命令将各节点的认证文件拷贝到所有其他节点使得各节点能够相互访问。
3. 安装Oracle Java(所有节点)
Linux可能自带OpenJDK,但运行CDH5需要使用Oracle的JDK,需要Java 7以上版本的支持。
1. 卸载自带的OpenJDK 使用下述命令查询相关的java包
# rpm -qa | grep java
使用-e选项填入包名卸载
# rpm -e --nodeps packageName
2. 安装Oracle java Oracle的官网下载jdk的rpm安装包,并使用rpm -ivh packageName安装
3. 配置java环境变量 修改环境变量,vim /etc/environment(和/etc/profile区别,大家可自行去网上查找) 添加如下(使用rpm安装的java在/usr/java/jdk1.8XXXX)
export JAVA_HOME=/usr/java/jdk1.8XXXX
执行命令使环境变量生效
# source /etc/environment
4. 安装配置MySQL(主节点)
安装mysql
# yum -y install mysql mysql-server mysql-devel
启动mysqld
# service mysqld start
开机启动
# chkconfig mysqld on
设置root用户密码
# mysql -u root -p xxxxxx
进入mysql命令行,创建以下数据库:
#hive
> create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#activity monitor
> create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#hue
> create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#activity oozie (可选)
> create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
授权root用户在主节点拥有所有数据库的访问权限
> grant all privileges on *.* to'root'@'master' identified by'xxxx'with grant option;
> flush privileges;
>
5. 关闭防火墙和SELinux
关闭防火墙
1.关闭集群所有服务器的防火墙
[root@ip-172-31-6-148~]# chkconfig iptables off
[root@ip-172-31-6-148~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@ip-172-31-6-148 ~]#
2.检查集群所有服务器防火墙是否关闭
[root@ip-172-31-6-148~]# service iptables status
iptables: Firewall is not running.
[root@ip-172-31-6-148~]#
禁用SELinux
1.在集群所有节点执行如下命令
[root@ip-172-31-6-148~]# setenforce 0
2.修改集群所有节点配置文件/etc/selinux/config
[root@ip-172-31-6-148~]# vim /etc/selinux/config
# This file controls the state ofSELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policyis enforced.
# permissive - SELinux printswarnings instead of enforcing.
# disabled - No SELinux policy isloaded.
SELINUX=disabled
# SELINUXTYPE= can take one of thesetwo values:
# targeted - Targeted processes areprotected,
# mls - Multi Level Securityprotection.
SELINUXTYPE=targeted
3.验证是否禁用成功
[root@ip-172-31-6-148~]# sestatus -v
SELinux status: disabled
[root@ip-172-31-6-148~]#
6. 配置时钟同步
如果企业有自己的NTP Server则可以集群中所有节点可配置企业NTP Server,如果没有自己的NTP服务器则在集群中选用一台服务器作为NTP Server,其它服务器与其保持同步,配置如下:
1.在集群所有节点安装NTP服务
[root@ip-172-31-6-148~]# yum -y install ntp
2.选择集群一台服务器作为NTP Server,配置如下
[root@ip-172-31-6-148~]# vim /etc/ntp.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0 #local clock
fudge 127.127.1.0 stratum 10
3.集群其它节点与其同步,配置如下:
[ip-172-31-5-190 ~]# vim /etc/ntp.conf
# Use public servers from thepool.ntp.org project.
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 172.31.6.148
4.完成以上配置后,在集群所有节点执行如下命令
[root@ip-172-31-6-148~]# chkconfig --add ntpd
[root@ip-172-31-6-148~]# chkconfig ntpd on
[root@ip-172-31-6-148~]# service ntpd restart
Shutting down ntpd: [ OK ]
Starting ntpd: [ OK ]
[root@ip-172-31-6-148~]#
5.验证所有节点NTP是否同步
[root@ip-172-31-5-190~]# ntpq -p
remote refid st t when pollreach delay offset jitter
==============================================================================
*ip-172-31-6-148210.23.25.77 2 u 448 1024 377 0.255 3.245 7.859
[root@ip-172-31-5-190~]#
Cloudera Manager安装与集群配置
1. 主节点CM安装
解压:tar xzvf cloudera-manager*.tar.gz将解压后的cm-5.13.1和cloudera目录放到/opt目录下。 建立数据库:找到前面下载的mysql-connector-java-5.1.39.tar.gz,解压后将mysql-connector-java-5.1.39-bin.jar放到每台服务器/opt/cm-5.13.1/share/cmf/lib/和/opt/cloudera/parcels/CDH-5.13.1-1.cdh5.13.1.p0.2/lib/hive/lib/中。 初始化数据库:
# /opt/cm-5.9/share/cmf/schema/scm_prepare_database.sh mysql cm -hnode1 -uroot -p123456 --scm-host node1 scm scm scm
note:在这里后面的参数分别是:数据库类型 数据库名称 数据库主机名 数据库用户名 密码 --scm-host cmserver主机名 scm scm scm
2. Agent配置
修改/opt/cm-5.9/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名。 同步Agent到其他所有节点: scp -r /opt/cm-5.9 root@node2:/opt/ 在所有节点创建cloudera-scm用户
# useradd --system --home=/opt/cm-5.7.1/run/cloudera-scm-server/ --no -create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
3. 安装CDH5
1. 准备Parcels 将CHD5相关的Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中(parcel-repo需要手动创建)。
相关的文件如下:
CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha1
manifest.json
最后执行命令,重命名.sha文件
# mv CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha1 CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha
2. 启动CM
# /opt/cm-5.7.1/etc/init.d/cloudera-scm-server start
# /opt/cm-5.7.1/etc/init.d/cloudera-scm-agent start
其余命令还有stop(停止), status(状态), restart(重启)
4. CDH集群配置
Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置。
打开浏览器,访问master:7180/cmf/login
由于CM Server的启动需要花点时间,这里可能要等待一会才能访问成果,可能需要3-5分钟,默认的用户名和密码均为admin
check:本机可以先curl -i master:7180/cmf/login测试,有返回结果后,在浏览器端,输入ip:7180/cmf/login进行配置
note: 此处注意,若本机可curl连接上,但其他主机连接不上,考虑:主机防火墙是否正常关闭;两台主机是否在同一个局域网
pic1 . 进入页 pic2. CDH版本(CDH Express免费, Enterprise收费)note:以下图借用CM 5.7安装图
当各Agent节点正常启动后,可以在当前管理的主机列表中看到对应的节点。选择要安装的节点,点继续。
下一步,出现parcel自检测包名,如果本地Parcel包配置无误,选目标版本(例如CM5.7.1),直接点继续就可以了(若没有出现对应版本,则重启CM server和agent)。
pic3. parcel包版本检测
继续,如果配置本地Parcel包无误,那么下图中的已下载,应该是瞬间就完成了,然后就是耐心等待分配过程就行了,这个过程的速度就取决于节点之间的传输速度。
当前受管:假如在安装的时候出现问题,如网络连接中断,机器死机,继续安装的时候可能会出现查询不到机器,并且根据ip搜索机器的时候,出现“当前受管”的状态为“是”,安装失败的机器不能再选择了。
至此,所有节点部署完成
下一步主机检查,遇到以下问题:
Cloudera 建议将 /proc/sys/vm/swappiness 设置为 10。当前设置为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf 以在重启后保存该设置。
# echo 10 > /proc/sys/vm/swappiness
第二个警告,提示执行命令:
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
执行完毕,重启后,警告依然,暂时不处理。
继续之后,进入到安装服务页面
note:从这里开始,所有的服务,既可以通过下述自助来安装一系列服务;也可以手动在CM管理页面一个一个添加
之前安装时选择一次性安装一系列服务,由于没有新建hue数据库导致hue服务安装不上,所以后面选择一个一个安装,在前期搭建环境时这样更好,起码出现问题可以锁定是哪个服务。
分步安装服务步骤为:
点击页面上Cloudera MANAGER,回到主节点页面
出现cluster1群集1,点击下拉,选择“添加服务”
HDFS,HIVE, HUE,Oozie, YARN, ZOOKEEPER是核心Hadoop的几个服务,分别安装,由于这些节点存在依赖关系,需注意先后顺序(当然,安装时CM会警告),顺序是:
Zookeeper, hdfs, yarn, hive, oozie, hue
注意:在安装hive, hue和oozie时,要将mysql驱动jar拷贝到相应位置
# cp /opt/cm-5.9/share/cmf/lib/mysql-connector-java-*-bin.jar /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hive/lib/
# cp /opt/cm-5.9/share/cmf/lib/mysql-connector-java-*-bin.jar /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23 /lib/hue/lib/
# cp /opt/cm-5.9 /share/cmf/lib/mysql-connector-java-*-bin.jar /var/lib/oozie/
按需安装完服务后,可在集群界面(即Cloudera MANAGER)看一下集群的状况 [图片上传失败...(image-73a4ff-1513586472070)]
绿色:良好
黄色:运行不良
红色:存在问题
查看日志
CM虽然配置麻烦,但日志齐全,每个操作,都能找到相应的运行日志,日志对于配合、调试和查看任务进度都有很大的帮助
群集日志入口为
各服务节点也有日志入口,支持日志筛选
分为stdout(所有日志), stderr(错误日志), 在细节上支持分级别(INFO, TRACE, DEBUG等)筛选
Q&A
ps. 这部分有截取网上的解决方案,也有自己遇到的问题
在部署完成以后,会出现大量问题,其中有大量警告,是由于var/log/*的权限问题造成的。
在master上,运行chmod -R 777对应的文件夹修改权限即可。出现oozie和hive不能成功启动
一般是因为缺少jdbc,复制到相应位置即可,位置请。或者是由于mysql数据库中的表造成的,可能是表已经存在了service monitor和host monitor都无法启动
一般也是由于var/log/*的权限问题造成的service monitor和host monitor正常启动,但是无法获取到图表数据
注销admin重新进入,或者等一下hdfs不能正常启动
可能是因为/dfs的权限原因,提高/目录的权限hdfs和yarn的端口不再是9000和10020,默认的是8020和8021
如果使用Windows远程调试,请保证host文件(C:/Windows/System32/drivers/hosts)和集群上的host文件内容一致。
主机崩溃怎么办?
一般来说崩溃了,直接重启就好。不过一定记得要再次启动cm的agent和server服务通过CM启动Hive报错 org.apache.hadoop.hive. metastore.HiveMetaException: Failed to load driver
这种情况,是缺少jdbc驱动,添加jdbc驱动到相应的lib下面。hive的lib路径是/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hive/lib放置好lib之后,启动hive,接着出现java.sql.SQLException:Column name pattern can not be NULL or empty.
原因是,一开始使用的jdbc lib是6.x的最新版本,但5.x和6.x在连接时针对某些默认值的检测值不同,将CM内用到的所有jdbc lib修改为5.x之后解决了这个错误启动hdfs后,报警:群集中有704个副本不足的块,百分比副本不足的块:100%。临界阈值:40%
解决方案:通过命令更改已经上传的文件的副本数(使用hdfs用户)
12.python连接hive时, Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: no
安装3个库
cyrus-sasl-plain
cyrus-sasl-devel
cyrus-sasl-gssapi