红联Linux门户
Linux帮助

Centos7 CM5和CDH5(5.9.0)离线安装

发布时间:2017-02-06 10:07:32来源:linux网站作者:Greling
概述
大数据时代,Hadoop是热门的Apache开源项目,公司大多基于其商业化从而满足自身的数据作业需求。CDH(Cloudera’s Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,整合Hadoop及一系列数据服务,关于CDH,官网给予的解释如下:
Critical Capabilities for Data Warehouse Database Management Systems
 
文件下载
1.Cloudera Manager
地址:http://archive.cloudera.com/cm5/cm/5/
这里下载的是5.9的版本,http://archive.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.9.0_x86_64.tar.gz
2.CDH安装包
地址:http://archive.cloudera.com/cdh5/parcels
本文基于CentOS7,下载的parcels包及manifest文件对应的版本为e17:
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
3.JDBC
http://download.softagency.net/MySQL/Downloads/Connector-J/
mysql-connector-java-5.1.39.tar.gz
note : JDBC目前已经有6.x,但与CDH 5.x存在不兼容,这里提供5.1.39下载包
 
环境搭建
内存,master至少6G,推荐8G以上(16G可保证无压力),slave至少4G 以下操作均需要(root)管理员权限
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以上版本的支持。 **0x1. 卸载自带的OpenJDK** 使用下述命令查询相关的java包
# rpm -qa | grep java
使用-e选项填入包名卸载
# rpm -e --nodeps packageName
**0x2. 安装Oracle java** Oracle的官网下载jdk的rpm安装包,并使用rpm -ivh packageName安装 **0x3. 配置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 
> createdatabase hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#activity monitor
> createdatabase amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#hue
> createdatabase hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#activity oozie (可选)
> createdatabase 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(可选,本文未做)
需要在所有的节点上执行,因为涉及到的端口太多了,临时关闭防火墙是为了安装起来更方便,安装完毕后可以根据需要设置防火墙策略,保证集群安全。
CentOS 7.x 关闭防火墙命令(早期版本为iptables,大家自行查找)
# systemctl stop firewalld.service #关闭防火墙
# systemctl disable firewalld.service #关闭开机自动启动
6.所有节点配置NTP服务
集群中所有主机必须保持时间同步,如果时间相差较大会引起问题
具体实现:master节点作为ntp服务器与外界对时中心同步时间,随后对所有datanode节点提供时间同步服务。 所有datanode节点以master节点为基础同步时间。 所有节点安装相关ntp组件
# yum install ntp
启动ntp,及设置开机启动
# service ntpd start
# chkconfig ntpd on
note:本文目前只启动Master节点,下述的ntp同步组从配置未测试,网上提示的配置如下: 主节点配置
# vi /etc/ntp.conf 
driftfile /var/lib/ntp/drift 
# Permit time synchronization with our time source, but do not 
# permit the source to query or modify the service on this system. 
restrict default kod nomodify notrap nopeer noquery 
restrict -6 default kod nomodify notrap nopeer noquery 
# Permit all access over the loopback interface. This could 
# be tightened as well, but to do so would effect some of 
# the administrative functions. 
restrict 127.0.0.1 
restrict -6 ::1 
# Hosts on local network are less restricted. 
restrict 192.168.39.31 mask 255.255.255.0 nomodify notrap 
# Use public servers from the pool.ntp.org project. 
# Please consider joining the pool (http://www.pool.ntp.org/join.html). 
server 0.centos.pool.ntp.org iburst 
server 1.centos.pool.ntp.org iburst 
server 2.centos.pool.ntp.org iburst
配置文件修改完毕后,通过# service ntpd restart重启ntp服务。检查是否成功,用ntpstat命令查看同步状态,出现以下状态代表启动成功: synchronisedto NTP server () at stratum 2time correct towithin74 mspolling server every 128 s 如果出现异常请等待几分钟,一般等待5-10分钟才能同步。 在其他节点,直接运行
# ntpdate -u master 
 
Cloudera Manager安装与集群配置
1.主节点CM安装
解压:tar xzvf cloudera-manager*.tar.gz将解压后的cm-5.9和cloudera目录放到/opt目录下。建立数据库:找到前面下载的mysql-connector-java-5.1.39.tar.gz,解压后将mysql-connector-java-5.1.39-bin.jar放到/opt/cm-5.9/share/cmf/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
**0x1. 准备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
**0x2. 启动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连接上,但其他主机连接不上,考虑:主机防火墙是否正常关闭;两台主机是否在同一个局域网
Centos7 CM5和CDH5(5.9.0)离线安装
pic1 . 进入页
Centos7 CM5和CDH5(5.9.0)离线安装
pic2. CDH版本(CDH Express免费, Enterprise收费)
Centos7 CM5和CDH5(5.9.0)离线安装
 
note:以下图借用CM 5.7安装图
当各Agent节点正常启动后,可以在当前管理的主机列表中看到对应的节点。选择要安装的节点,点继续。
下一步,出现parcel自检测包名,如果本地Parcel包配置无误,选目标版本(例如CM5.7.1),直接点继续就可以了(若没有出现对应版本,则重启CM server和agent)。
Centos7 CM5和CDH5(5.9.0)离线安装
pic3. parcel包版本检测
继续,如果配置本地Parcel包无误,那么下图中的已下载,应该是瞬间就完成了,然后就是耐心等待分配过程就行了,这个过程的速度就取决于节点之间的传输速度。
Centos7 CM5和CDH5(5.9.0)离线安装
当前受管:假如在安装的时候出现问题,如网络连接中断,机器死机,继续安装的时候可能会出现查询不到机器,并且根据ip搜索机器的时候,出现“当前受管”的状态为“是”,安装失败的机器不能再选择了。
Centos7 CM5和CDH5(5.9.0)离线安装
Centos7 CM5和CDH5(5.9.0)离线安装
至此,所有节点部署完成。
 
下一步主机检查,遇到以下问题:
Centos7 CM5和CDH5(5.9.0)离线安装
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
执行完毕,重启后,警告依然,暂时不处理
继续之后,进入到安装服务页面
Centos7 CM5和CDH5(5.9.0)离线安装
note:从这里开始,所有的服务,既可以通过下述自助来安装一系列服务;也可以手动在CM管理页面一个一个添加
之前安装时选择一次性安装一系列服务,由于没有新建hue数据库导致hue服务安装不上,所以后面选择一个一个安装,在前期搭建环境时这样更好,起码出现问题可以锁定是哪个服务。
分步安装服务步骤为:
点击页面上Cloudera MANAGER,回到主节点页面
Centos7 CM5和CDH5(5.9.0)离线安装
出现cluster1群集1,点击下拉,选择“添加服务”
Centos7 CM5和CDH5(5.9.0)离线安装
Centos7 CM5和CDH5(5.9.0)离线安装
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)看一下集群的状况!
Centos7 CM5和CDH5(5.9.0)离线安装
绿色:良好
黄色:运行不良
红色:存在问题
 
查看日志
CM虽然配置麻烦,但日志齐全,每个操作,都能找到相应的运行日志,日志对于配合、调试和查看任务进度都有很大的帮助
群集日志入口为
Centos7 CM5和CDH5(5.9.0)离线安装
各服务节点也有日志入口,支持日志筛选
分为stdout(所有日志), stderr(错误日志), 在细节上支持分级别(INFO, TRACE, DEBUG等)筛选
 
Q&A
ps.这部分有截取网上的解决方案,也有自己遇到的问题
1.在部署完成以后,会出现大量问题,其中有大量警告,是由于var/log/*的权限问题造成的。
在master上,运行chmod -R 777对应的文件夹修改权限即可。
2.出现oozie和hive不能成功启动
一般是因为缺少jdbc,复制到相应位置即可,位置请。或者是由于mysql数据库中的表造成的,可能是表已经存在了
3.service monitor和host monitor都无法启动
一般也是由于var/log/*的权限问题造成的
4.service monitor和host monitor正常启动,但是无法获取到图表数据
注销admin重新进入,或者等一下
5.hdfs不能正常启动
可能是因为/dfs的权限原因,提高/目录的权限
6.hdfs和yarn的端口不再是9000和10020,默认的是8020和8021
7.如果使用Windows远程调试,请保证host文件(C:/Windows/System32/drivers/hosts)和集群上的host文件内容一致。
8.主机崩溃怎么办?
一般来说崩溃了,直接重启就好。不过一定记得要再次启动cm的agent和server服务
9.通过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
10.放置好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之后解决了这个错误
11.启动hdfs后,报警:群集中有704个副本不足的块,百分比副本不足的块:100%。临界阈值:40%
解决方案:通过命令更改已经上传的文件的副本数(使用hdfs用户)
# su hdfs hadoop fs -setrep -R 2 /
12.利用HUE执行max , count, or any complex query, 任务accepted了,但是maps或者reduces进度都是0 (Hadoop yarn job is getting stucked at map 0% and reduce 0%)
对每个工作节点都应该设置足够的内存用于job,可配置的是
NOTE:可通过直接vim编辑相应xml,增加或修改配置。另外,这些配置在CM页面上有对应的UI(每个服务节点都有独立的配置UI,存储分配在“类别 -> 资源管理”,图形界面操作后,变化会体现在xml中,重启CM及根据各个提示重启各节点服务就可。
0x01. yarn-site.xml (UI操作:YARN -> 资源管理)
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2200</value> #备注:扩大以M为单位
<description>Amount of physical memory, in MB, that can be allocated for containers.</description>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>500</value> #扩大
</property>
已测试在16G内存机器上,一个可行的配置是:
yarn.app.mapreduce.am.resource.mb 1G
yarn.nodemanager.resource.memory-mb 8G
yarn.scheduler.minimum-allocation-mb 1G
0x02. mapred-site.xml (可选,若0x01生效,此步不必修改。UI操作:Gateway -> 资源管理)
<property>
<name>mapreduce.map.memory.mb</name>
<value>256</value> #扩大
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>256</value>  #扩大
</property>
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>400</value>  #扩大
<source>mapred-site.xml</source>
公司一个可行的配置是:
mapreduce.map.memory.mb 1G
mapreduce.reduce.memory.mb 1G
yarn.app.mapreduce.am.resource.mb 1G
13.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
Hello,Hadoop!
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28181.html