0.集群規划
說明:因為CDH能夠方便的動態加入刪除主機,動態改變主機上的服務,所以后面再對各機器上跑得服務進行分配。
共三台機器
操作系統: centos6.5
機器名:work01、work02、work03
work03執行Cloudera Manager
1.關閉防火牆 和 SELinux
說明:假設不關閉。集群間通信可能會出問題,造成服務不能正常啟動。
生產環境假設要做為在線服務還是須要。
1.1 關閉防火牆:
service iptables stop (暫時關閉)
chkconfig iptables off(重新啟動后生效)
1.2 關閉SELINUX:
setenforce 0 (暫時生效)(這種方法我沒有執行成功)
改動 /etc/selinux/config 下的 SELINUX=disabled (重新啟動后永久生效 )該方法測試有效。
查看selinux狀態:/usr/sbin/sestatus -v
注意:三台機器都須要進行同樣操作
2. FQDN 改動主機名
說明:a. 三台機器都須要進行同樣操作
b./etc/sysconfig/network 配置相應的主機名
c./etc/hosts 三台機器內容同樣,來實現三台機器相互能夠通過主機名訪問
d. 假設機器較多能夠通過配置DNSserver來解析主機名
1)改動/etc/sysconfig/network文件
NETWORKING=yes
HOSTNAME=work01
2)改動/etc/hosts文件
192.168.1.185 work01 work01
192.168.1.141 work02 work02
192.168.1.198 work03 work03
3)重新啟動網絡服務后生效:service network restart
測試中重新啟動網絡服務會斷網,並且不會自己主動連接。須要點擊一下連接圖標才干再次連接,請慎重操作
3. 集群間機器無passwordssh登錄
說明:
a. 機器之間會通過ssh拷貝一些文件,發送一些服務啟動命令,建立集群間的無passwordssh登錄,不用你每次啟動服務都輸入一大堆password了。
b. 貌似Cloudera Manager已經管理登錄password了。這一步可能能夠跳過,感興趣的能夠試試。
c. ssh無password登錄原理是生成一對公鑰和密鑰,把公鑰給別人。別人就可有無password訪問自己了。比方A把生成的公鑰給B那B就能夠無password訪問A了。
d.生成的公鑰為id_rsa.pub,將要訪問的機器公鑰保存在authorized_keys文件里
e.為了保存多台機器的公鑰,以追加的方式加入到authorized_keys中
1)work01機器上切換root帳號
su
2)生成root帳號在work01上的密鑰和公鑰
ssh-keygen -t rsa
一路回車下去生成公鑰id_rsa.pub和密鑰id_rsa
3)生成root帳號在work02、work03上的密鑰和公鑰
4)將work02和work03上的公鑰文件復制到work01上
[root@work02 ~]#scp ~/.ssh/id_rsa.pub root@work01:~/.ssh/work02.pub
[root@work03 ~]# scp ~/.ssh/id_rsa.pub root@work01:~/.ssh/work03.pub
拷貝時注意區分文件名稱
5)將work01、work02和work03三台機器的公鑰都增加work01的authorized_keys文件里
catid_rsa.pub >>authorized_keys
cat work02.pub >>authorized_keys
catwork03.pub >>authorized_keys
6)將work01上的authorized_keys文件復制到work02、work03上
[root@work01 ~]# scp ~/.sshauthorized_keys root@work02:~/.ssh/
[root@work01 ~]# scp ~/.sshauthorized_keys root@work03:~/.ssh/
注意:無password登錄僅僅對生成公鑰的帳號有效。注意這里產生公鑰的帳號要與之后須要遠程啟動服務的帳號一致
4.yum源配置
說明:系統自帶的yum源在國外。安裝軟件時會非常慢,配置國內的yun源,能夠提高安裝速度1)進入yum源配置文件夾
cd /etc/yum.repos.d
2)備份系統自帶的yum源
mv CentOS-Base.repo CentOS-Base.repo.bk
3)下載163的yum源:
wget http://mirrors.163.com/.help/CentOS-Base-163.repo
mv CentOS6-Base-163.repo CentOS-Base.repo
3)更新完yum源后,運行下邊命令更新yum配置,使操作馬上生效
yum makecache
yum clean all
5. 下載CDH parcels安裝包
說明:a. centos 6.x應用的CDH版本號為CDH-xxxx-el6.parcel,centos 5.x應用的CDH版本號為CDH-xxxx-el5.parcel
b. Cloudera Manager 會自己主動下載該文件,因為網速問題下載過程非常慢,可能持續數個小時。並且一旦出錯會從頭下載,提前下載能夠加快安裝速度。配置方法第7步介紹
下載鏈接:http://archive.cloudera.com/cdh5/parcels/latest/
6. 安裝 Cloudera Manager
說明:
a. Cloudera Manager的安裝文件會自己主動下載所須要的rpm文件。可是因為這些文件的yum源在國外所以安裝過程非常慢,因此這里通過手動下載這些rpm文件來提高下載速度。
b. 須要先執行Cloudera Manager的安裝文件得到須要的rpm文件的地址
6.1下載cloudera Manager 安裝文件
chmod u+x cloudera-manager-installer.bin
./cloudera-manager-installer.bin
6.3 得到須要安裝的rmp文件的下載地址
1)進入 yum 源文件夾
cd /etc/yum.repos.d
2)查看cloudera-manager yum 源文件是否已經下載下來
多了一個 cloudera-manager.repo 文件
3)得到rpm下載地址
cat cloudera-manager.repo
當中rpm下載地址為:baseurl=http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5/
6.4 關閉Cloudera Manager安裝向導
1)關閉 cloudera-manager-installer.bin
2)殺掉 Cloudera Manager安裝向導 啟動的yum進程
ps aux|grep yum(得到cm安裝向導啟動的yum的進程號)
kill xxxx (按進程號殺掉對應進程)
6.5 手動下載對應的rpm文件(一共7個文件)
Name
Last modified
Size
Description
-
11-Jun-2014 18:09
3.7M
cloudera-manager-daemons-5.0.2-1.cm502.p0.297.el6.x86_64.rpm
11-Jun-2014 18:09
315M
11-Jun-2014 18:09
8.0K
cloudera-manager-server-db-2-5.0.2-1.cm502.p0.297.el6.x86_64.rpm
11-Jun-2014 18:09
9.6K
11-Jun-2014 18:09
669K
11-Jun-2014 18:09
68M
11-Jun-2014 18:09
131M
6.6 手動安裝下載的 rpm文件yum localinstall --nogpgcheck *.rpm
6.7 再次執行Cloudera Manager安裝文件
執行中出現了兩個錯誤,各自是:
1)問題描寫敘述:fatal erro
解決方法:rm -rf /usr/share/cmf/
2)問題描寫敘述:Installation failed. Failed to start Embedded Service and Configuration Database,See vim /var/log/cloudera-manager-installer/5.start-embedded-db.log for details.
bash: /usr/share/cmf/bin/initialize_embedded_db.sh: No such file or directory
解決方法:重新啟動安裝向導錯誤沒有復現
7. 配置CDH parcels包
說明:
a. 使用Cloudera Manager安裝CDH 也有兩種方式,一種是使用rpm包,還有一種是使用parcels包,本測試使用parcels包
b. Cloudera Manager 會自己主動下載須要的parcels包,可是由於連接的是國外網站速度會非常慢
c. 配置第5步下載的CDH parcels文件能夠使Cloudera Manager直接讀取本地的parcels文件
7.1 將前面下載的CDH parcels文件放到 /opt/cloudera/parcel-repo 文件夾下
7.2 生成相應的sha文件
1)在第5步下載的 manifest.json 文件里依照版本號“CDH-5.1.0-1.cdh5.1.0.p0.53-el6.parcel”找到相應的 hash值
"hash": "67fc4c86b260eeba15c339f1ec6be3b59b4ebe30"
2)hash值保存在sha文件里
echo '67fc4c86b260eeba15c339f1ec6be3b59b4ebe30'>CDH-5.1.0-1.cdh5.1.0.p0.53-el6.parcel.sha
8. 啟動Cloudera Manager
安裝中出現例如以下問題,詳細解決方案見 “問題列表” 問題1:
python -c 'import socket; import sys; s = socket.socket(socket.AF_INET); s.settimeout(5.0); s.connect(("localhost", int(7182))); s.close();'
9. 加入服務
參考文檔:
說明:盡量把全部的參考文檔都列了出來,假設有遺漏歡迎提醒。Cloudera Manager 和CDH 4 終極安裝http://www.tuicool.com/articles/AnuiUra
ClouderaManager和CDH4安裝:http://wenku.baidu.com/link?
CDH套件半手動安裝流程http://www.douban.com/note/352772895/
使用yum安裝CDH Hadoop集群(cdh5 禁用ipv6、hostname設置、設置yum源、時鍾同步): http://blog.javachen.com/2013/04/06/install-cloudera-cdh-by-yum/
查看 SELinux狀態及關閉SELinux:http://bguncle.blog.51cto.com/3184079/957315
CentOS6.5中改動yum源:http://www.cnblogs.com/liuling/p/2014-4-14-001.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/
國內經常使用NTPserver地址及IP
http://www.douban.com/note/171309770/
改動配置文件:
[root@work03 ~]# 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服務
client同步時間(work02,work03):
ntpdate work01
說明:NTP服務啟動須要大約五分鍾時間,服務啟動之前,若client同步時間,則會出現錯誤“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'
[root@work03 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 the Host Monitor failed.
service --status-all| grep clo
機器上查看scm-agent狀態:cloudera-scm-agent dead but pid file exists
解決:重新啟動服務
service cloudera-scm-agent restartservice 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 a Java 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 的配置。應該不算是真正的解決