系统环境
- 4台联想R510服务器,其中master节点4核心、8GB,其它节点双核心、4GB。
- 网卡:100M。
- 共有硬盘6TB。
- 网络环境内网。
- Centos6.5 x64(安装系统时尽量把开发包安装齐全,另master节点需要Mysql可以在安装系统时勾选)。
准备工作
卸载系统自带OPEN-JDK(所有节点)
安装好的Centos系统有时会自动安装OpenJdk,用命令java -version查看:
1 |
java version "1.6.0" |
2 |
OpenJDK Runtime Environment (build 1.6.0-b09) |
3 |
OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode) |
如有上述显示,说明系统里已经有OpenJdk,执行以下命令查看系统中有哪些OpenJdk相关包:
1 |
rpm -qa | grep java |
其中有如下包必须卸载,根据系统版本不同,各个包版本号会有所差异: java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64 java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 java-1.6.0-openjdk-devel-1.6.0.0-1.66.1.13.0.el6.x86_64 执行以下命令,卸载:
1 |
rpm -e --nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64 |
2 |
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 |
3 |
rpm -e --nodeps java-1.6.0-openjdk-devel-1.6.0.0-1.66.1.13.0.el6.x86_64 |
安装JDK(所有节点)
从官方网站上下载rpm包,本次使用版本1.7.0_55-b13(CDH5可能支持1.7之前的版本,具体情况未经测试),执行命令:
1 |
rpm -ivh jdk-7u55-linux-x64.rpm |
由于是rpm包并不需要我们来配置环境变量,我们只需要配置一个全局的JAVA_HOME变量即可,执行命令:
1 |
echo "JAVA_HOME=/usr/java/latest/" >> /etc/environment |
执行命令,查看Jdk是否安装正确
1 |
java -version |
2 |
javac -version |
修改主机名
修改/etc/sysconfig/network文件:
1 |
NETWORKING= yes |
2 |
HOSTNAME=master.hadoop |
3 |
NETWORKING_IPV6=no |
4 |
GATEWAY=192.168.64.1 |
其中HOSTNAME与主机名一致。主机名如果跟系统安装时不一致请执行hostname命令让其立即生效,否则会影响各节点互相访问。修改/etc/hosts文件,添加:
1 |
192.168.1.101 master.hadoop |
2 |
192.168.1.102 datanode1 |
3 |
192.168.1.103 datanode2 |
4 |
192.168.1.104 datanode3 |
执行命令:
1 |
service network restart |
打通SSH(所有节点)
这里master节点和其他datanode节点会略有区别。 首先说有节点均执行如下命令,遇到提示一路回车即可:
1 |
ssh -keygen -t rsa |
然后在主节点执行以下命令:
1 |
cat ~/. ssh /id_rsa.pub >> ~/. ssh /authorized_keys |
scp文件到所有datenode节点:
1 |
scp ~/. ssh /authorized_keys [email protected]:~/. ssh / |
然后输入密码即可,以后再到其他机器就不需要密码额。
关闭防火墙(所有节点)
防火墙会引起hadoop相关组件通讯的各种异常。 防火墙:
1 |
service iptables stop (临时关闭) |
2 |
chkconfig iptables off (重启后生效) |
SELINUX:
1 |
setenforce 0 (临时生效) |
修改/etc/selinux/config 下的 SELINUX=disabled (重启后生效)。
安装NTP服务(所有节点)
集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。 具体思路如下:
- master节点作为ntp服务器与外界对时中心同步时间,随后对所有datanode节点提供时间同步服务。
- 所有datanode节点以master节点为基础同步时间。
所有节点安装相关组件:ntp与ntpdate。按顺序安装即可,完成后,配置开机启动:
1 |
chkconfig ntpd on |
检查是否设置成功:
1 |
chkconfig --list ntpd |
其中2-5为on状态就代表成功。
配置内网NTP服务器(master节点)
在配置之前,先使用ntpdate手动同步一下时间,免得本机与对时中心时间差距太大,使得ntpd不能正常同步。这里选用65.55.56.206作为对时中心。
1 |
ntdate -u 65.55.56.206 |
ntp服务只有一个配置文件,配置好了就OK。 这里只给出有用的配置,不需要的配置都用#注掉,这里就不在给出:
1 |
driftfile /var/lib/ntp/drift |
2 |
restrict 127.0.0.1 |
3 |
restrict -6 ::1 |
4 |
restrict default nomodify notrap |
5 |
server 65.55.56.206 prefer |
6 |
includefile /etc/ntp/crypto/pw |
7 |
keys /etc/ntp/keys |
配置文件完成,保存退出,启动服务,执行如下命令:
1 |
service ntpd start |
2 |
chkconfig ntpd on (设置开机启动) |
检查是否成功,用ntpstart命令查看同步状态,出现以下状态代表启动成功:
1 |
synchronised to NTP server () at stratum 2 |
2 |
time correct to within 74 ms |
3 |
polling server every 128 s |
如果出现异常请等待几分钟,一般等待5-10分钟才能同步。
配置ntp客户端(所有datanode节点)
1 |
driftfile /var/lib/ntp/drift |
2 |
restrict 127.0.0.1 |
3 |
restrict -6 ::1 |
4 |
restrict default kod nomodify notrap nopeer noquery |
5 |
restrict -6 default kod nomodify notrap nopeer noquery |
6 |
server 192.168.1.101 |
7 |
includefile /etc/ntp/crypto/pw |
8 |
keys /etc/ntp/keys |
ok保存退出,请求服务器前,请先使用ntpdate手动同步一下时间:
1 |
ntdate -u 192.168.1.101 (内网ntp服务器) |
这里可能出现同步失败的情况,请不要着急,一般是本地的ntp服务器还没有正常启动,一般需要等待5-10分钟才可以正常同步。启动服务:
1 |
service ntpd start |
2 |
chkconfig ntpd on |
因为是连接内网,这次启动等待的时间会比master节点快一些,但是也需要耐心等待一会儿。
Mysql配置(master节点)
只需要配置master节点的Mysql即可。(这里不再介绍如何安装Mysql) 将mysql设置为开机启动:
1 |
chkconfig mysqld on |
本次安装需要创建如下数据库(不包括Cloudera Manager的数据库,Cloudera Manager数据库有相关脚本创建,后面会有说明)
1 |
--hive数据库 |
2 |
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci |
3 |
--集群监控数据库 |
4 |
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci |
5 |
--hue数据库 |
6 |
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci |
以上数据库,可能会根据安装组件的不同略有差别。 给用户授权(这里密码设为hadoop)
1 |
grant all on *.* to [email protected] "%" Identified by "hadoop" ; |
正式开工
安装Cloudera Manager 5(cm5)
下载地址http://archive-primary.cloudera.com/cm5/cm/5/,根据自己的系统选择相应的版本,本次安装选用的是cloudera-manager-el6-cm5.0.0_x86_64.tar.gz。下载完成后只上传到master节点即可。然后解压到/opt目录下,不能解压到其他地方,因为cdh5的源会默认在/opt/cloudera/parcel-repo寻找,怎么制作cdh5的本地源文件会在之后介绍。给所有节点添加cloudera-scm用户:
1 |
useradd --system --home=/opt/cm-5.0.0/run/cloudera-scm-server --no-createhome --shell=/bin/ false --comment "Cloudera SCM User" cloudera-scm |
修改/opt/cm-5.0.0/etc/cloudera-scm-agent/config.ini 下面的serer_host
1 |
server_host=master.hadoop |
为Cloudera Manager 5建立数据库:
1 |
/opt/cm-5.0.0/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -phadoop --scm-host localhost scm scm scm |
格式是:scm_prepare_database.sh 数据库类型 数据库 服务器 用户名 密码 –scm-host Cloudera_Manager_Server所在的机器,后面那三个不知道代表什么,直接照抄官网的了。 因为我们用的是Mysql数据库,所以我们需要下载Mysql的JDBC驱动,本次从官网上下载最新稳定版:mysql-connector-java-5.1.30.tar.gz,解压之后找到mysql-connector-java-5.1.30-bin.jar放到/opt/cm-5.0.0/share/cmf/lib/目录下。 开启Cloudera Manager 5 Server端:
1 |
/opt/cm-5.0.0/etc/init.d/cloudera-scm-server start |
注意server首次启动不要立即关闭或重启,因为首次启动会自动创建相关表以及数据,如果因为特殊原因中途退出,请先删除所有表以及数据之后再次启动,否则将会出现启动不成功的情况。 开启Cloudera Manager 5 Agents端。 先scp /opt/cm-5.0.0到所有datanode节点上,然后在每台机器上开启Agents端:
1 |
scp -r /opt/cm-5.0.0 [email protected]:/opt/cm-5.0.0 |
等待拷贝成功,在所有datanode节点上启动:(注意必须以管理员权限启动)
1 |
sudo /opt/cm-5.0.0/etc/init.d/cloudera-scm-agent start |
浏览器启动Cloudera Manager 5 控制台(默认端口号是7180),启动成功就会看到登陆页面。
安装CDH5
先下载到本地http://archive-primary.cloudera.com/cdh5/parcels/5.0.0/,这里需要下载两样东西,首先是与自己系统版本相对应的parcel包,然后是manifest.json文件。下载完成后将这两个文件放到master节点的/opt/cloudera/parcel-repo下(目录在安装Cloudera Manager 5时已经生成),注意目录一个字都不能错,接下来打开manifest.json文件,里面是json格式的配置,我们需要的就是与我们系统版本相对应的hash码,因为我们用的是Centos6.5,所以找到如下位置:
在这个大括号的最下面找到“hash”所对应的值。
将“hash”的值复制下来,然后创建一个文件,文件名与你的parel包名一致,并加上.sha后缀:
这样你的目录下将有这3个文件,将“hash”的值复制到新建的sha文件中,并保存,好了,我们的本地源制作完成了。这样基本大功告成了,再之后的操作就是控制台按照步骤安装即可。
打开http://192.168.1.101:7180,登陆控制台,默认账户和密码都是admin,安装时选择免费版,之后由于cm5对中文的支持很强大,按照提示安装即可,如果系统配置有什么问题在安装过程中会有提示,根据提示给系统安装组件就可以了。
如果在安装时选择了安装Hive,可能会遇到安装失败的问题,查看一下日志发现时安装Hive时需要安装JDBC驱动,所以同样我们将Mysql的驱动包拷贝到/opt/cloudera/parcels/CDH-5.0.0-1.cdh5.0.0.p0.47/lib/hive/lib/目录下,之后再继续安装就不会遇到问题了。
参考文献:http://www.cnblogs.com/thinkCoding/p/3567408.html http://www.byywee.com/page/M0/S877/877056.html
问题列表:
问题 1 PTR localhost:
描述:
DNS反向解析错误,不能正确解析Cloudera Manager Server主机名
日志:
Detecting Cloudera Manager Server...
Detecting Cloudera Manager Server...
BEGIN host -t PTR 192.168.1.198
198.1.168.192.in-addr.arpa domain name pointer localhost.
END (0)
using localhost as scm server hostname
BEGIN which python
/usr/bin/python
END (0)
BEGIN python -c ‘import socket; import sys; s = socket.socket(socket.AF_INET); s.settimeout(5.0); s.connect((sys.argv[1], int(sys.argv[2]))); s.close();‘ localhost 7182
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused
END (1)
could not contact scm server at localhost:7182, giving up
waiting for rollback request
不优雅的解决方案:
将连不上的机器 /usr/bin/host 文件删掉
BEGIN host -t PTR 192.168.1.198
/tmp/scm_prepare_node.8OX5y7is/scm_prepare_node.sh: line 100: /usr/bin/host: 权限不够
END (126)
BEGIN which python
/usr/bin/python
END (0)
BEGIN python -c ‘import socket; import sys; s = socket.socket(socket.AF_INET); s.settimeout(5.0); s.connect((sys.argv[1], int(sys.argv[2]))); s.close();‘ 192.168.1.198 7182
END (0)
BEGIN which wget
/usr/bin/wget
END (0)
BEGIN wget -qO- -T 1 -t 1 http://169.254.169.254/latest/meta-data/public-hostname && /bin/echo
END (4)
说明:
不明白cloudera的初衷,这里已经得到 Cloudera Manager Server的ip了,却还要把ip解析成主机名来连接
由于DNS反向解析没有配置好,根据Cloudera Manager Server 的ip解析主机名却得到了localhost,造成之后的连接错误
这里的解决方案是直接把/usr/bin/host删掉,这样Cloudera Manager就会直接使用 ip进行连接,就没有错了
参考:
cloudera manager 4.8 添加设备DNS反向解析有关问题
http://www.reader8.cn/jiaocheng/20140419/2307406.html
问题 2 NTP:
问题 2.1
问题描述:
Bad Health --Clock Offset
The host‘s NTP service did not respond to a request for the clock offset.
解决:
配置NTP服务
步骤参考:
CentOS配置NTP Server:
http://www.hailiangchen.com/centos-ntp/
国内常用NTP服务器地址及IP
http://www.douban.com/note/171309770/
修改配置文件:
[[email protected] ~]# vim /etc/ntp.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server s1a.time.edu.cn prefer
server s1b.time.edu.cn
server s1c.time.edu.cn
restrict 172.16.1.0 mask 255.255.255.0 nomodify <===放行局域网来源
启动ntp
#service ntpd restart <===启动ntp服务
客户端同步时间(work02,work03):
ntpdate work01
说明:NTP服务启动需要大约五分钟时间,服务启动之前,若客户端同步时间,则会出现错误“no server suitable for synchronization found”
定时同步时间:
在work02和 work03上配置crontab定时同步时间
crontab -e
00 12 * * * root /usr/sbin/ntpdate 192.168.56.121 >> /root/ntpdate.log 2>&1
问题 2.2
描述:
Clock Offset
Ensure that the host‘s hostname is configured properly. Ensure that port 7182 is accessible on the Cloudera Manager Server (check firewall rules). Ensure that ports 9000 and 9001 are free on the host being added. Check agent logs in /var/log/cloudera-scm-agent/ on the host being added (some of the logs can be found in the installation details).
问题定位:
在对应host(work02、work03)上运行 ‘ntpdc -c loopinfo‘
[[email protected] work]# ntpdc -c loopinfo
ntpdc: read: Connection refused
解决:
开启ntp服务:
三台机器都开机启动 ntp服务
chkconfig ntpd on
问题 3 heartbeat:
错误信息:
Installation failed. Failed to receive heartbeat from agent.
解决:关闭防火墙
问题 4 Unknow Health:
Unknow Health
重启后:Request to theHost Monitor failed.
service --status-all| grep clo
机器上查看scm-agent状态:cloudera-scm-agent dead but pid file exists
解决:重启服务
service cloudera-scm-agent restart
service cloudera-scm-server restart
问题 5 canonial name hostname consistent:
Bad Health
The hostname and canonical name for this host are not consistent when checked from aJava process.
canonical name:
4092 Monitor-HostMonitor throttling_logger WARNING (29 skipped) hostname work02 differs from the canonical name work02.xinzhitang.com
解决:修改hosts 使FQDN和 hostname相同
ps:虽然解决了但是不明白为什么主机名和主机别名要一样
/etc/hosts
192.168.1.185 work01 work01
192.168.1.141 work02 work02
192.168.1.198 work03 work03
问题 6 Concerning Health:
Concerning Health Issue
-- Network Interface Speed --
描述:The host has 2 network interface(s) that appear to be operating at less than full speed. Warning threshold: any.
详细:
This is a host health test that checks for network interfaces that appear to be operating at less than full speed.
A failure of this health test may indicate that network interface(s) may be configured incorrectly and may be causing performance problems. Use the ethtool command to check and configure the host‘s network interfaces to use the fastest available link speed and duplex mode.
解决:
本次测试修改了 Cloudera Manager 的配置,应该不算是真正的解决