CDH5.1.3集羣搭建
環境:
CentOS-6.10-x86_64-bin-DVD1.iso
VMware-workstation-full-14.1.3-9474260.exe
jdk-7u80-linux-x64.tar.gz
CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel
CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1
manifest.json
mysql-connector-java-5.1.37.jar
centos全部節點密碼cdh
操作用戶:root
cdh5.1.3.12下載地址:http://archive.cloudera.com/cdh5/parcels/5.1.3.12/
(一)VM橋接
1. 虛擬機修改配置
2. 修改eth0網卡配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
TYPE="Ethernet"
ONBOOT="yes"
NM_CONTROLLED="yes"
HWADDR="00:0C:29:CA:BE:0D"
UUID="0721e783-4aba-4122-b21b-068137182e1f"
BOOTPROTO="static"
IPADDR="192.168.43.226"
NETMASK="255.255.255.0"
GATEWAY="192.168.43.1"
DNS1="8.8.8.8"
IPV6INIT="no"
USERCTL="no"
ONBOOT 開機啓動,NM_CONTROLLED實時生效。記住,不要在某個值後面加 # 註釋 ,會導致該項失效。如
BOOTPROTO="static" # dhcp
因加了# dhcp
而讓這一項失效。IPADDR,NETMASK,GATEWAY根據你自己電腦設置。
修改ifcfg-eth0完成後,需要service network restart
3. 增加ip映射
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.228 cdh01
192.168.43.227 cdh02
192.168.43.226 cdh03
注意:修改 /etc/hosts,此處一定要注意,不要按照網上有的說明,將127.0.0.1那一行裏的localhost.localdomain
改成主機名稱,在安裝Cloudera Agent的時候會識別不出名稱和IP。像上面那樣新增ip和主機名就好了,原來的內容不做修改。
4. 修改主機名
vim /etc/sysconfig/network
NETWORKING=yes
#HOSTNAME=localhost.localdomain
HOSTNAME=cdh02
以上四個步驟完成後,重啓。
進一步瞭解:https://www.cnblogs.com/weizaiyes/p/9911200.html
常見錯誤:
1.虛擬機橋接機無法ping到自己主機
windows10的防火牆開啓ping功能
【入站規則】-【文件和打印機共享(回顯請求 - ICMPv4-In)】
詳情:https://jingyan.baidu.com/article/36d6ed1f671a8f1bcf4883c0.html
2.CentOS系統配置.ssh遇到port 22-No route to host問題的解決方法
可能是/etc/hosts沒配置後
詳情:https://blog.csdn.net/oba_gaga/article/details/80684051
(二)安裝Oracle的Java
CentOS,自帶OpenJdk,不過運行CDH5需要使用Oracle的Jdk,需要Java 7的支持。
卸載自帶的OpenJdk,使用rpm -qa | grep java
查詢java相關的包,使用rpm -e --nodeps 包名
卸載之。
將jdk解壓tar -zxvf jdk*
到/usr/local/jdk/目錄下,並配置vim /etc/profile
export JAVA_HOME=/usr/local/jdk/jdk1.7.0_80
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
保存後需要,source /etc/profile
讓配置生效
(三)配置SSH免密登錄
所有節點生成authorized_keys
ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
遠程彙集到master機器
scp ~/.ssh/authorized_keys root@cdh01:~/.ssh/authorized_keys_02
其中authorized_keys_02
,爲你想保存在master目錄的名稱,一般以你的節點機機器命名,好區分。
master彙集各節點的authorized_keys到自己的authorized_keys
cat authorized_keys_02 >> authorized_keys_02
cat authorized_keys_02 >> authorized_keys_03
master遠程拷貝覆蓋各節點的authorized_keys
scp ~/.ssh/authorized_keys root@cdh02:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys root@cdh03:~/.ssh/authorized_keys
(四) 關閉防火牆和SELinux
注意: 需要在所有的節點上執行,因爲涉及到的端口太多了,臨時關閉防火牆是爲了安裝起來更方便,安裝完畢後可以根據需要設置防火牆策略,保證集羣安全。
關閉防火牆:
service iptables stop (臨時關閉)
chkconfig iptables off (重啓後生效)
關閉SELINUX(實際安裝過程中發現沒有關閉也是可以的,不知道會不會有問題,還需進一步進行驗證):
setenforce 0 (臨時生效)
修改 vim /etc/selinux/config 下的 SELINUX=disabled (重啓後永久生效)
(五)安裝配置MySql(主節點)
注意:如果安裝了MariaDB數據庫,要卸載掉 。
檢查是否安裝了mariadb rpm -qa | grep mariadb-server
卸載數據庫 yum -y remove mari*
刪除數據庫文件: rm -rf /var/lib/mysql/*
通過yum install mysql-server
安裝mysql服務器。chkconfig mysqld on
設置開機啓動,並service mysqld start
啓動mysql服務,並根據提示設置root的初試密碼:mysqladmin -u root password 'xxxx'
。
查看數據庫版本 mysql -V
mysql -uroot -pxxxx
進入mysql命令行,創建以下數據庫:
# hive
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
# activity monitor
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
設置root授權訪問以上所有的數據庫:
#授權root用戶在主節點擁有所有數據庫的訪問權限(n1,和 xxxx 要替換成你自己的主機名和數據庫密碼)
grant all privileges on *.* to 'root'@'n1' identified by 'xxxx' with grant option;
# 刷新授權
flush privileges;
(六)所有節點配置NTP服務
集羣中所有主機必須保持時間同步,如果時間相差較大會引起各種問題。 具體思路如下:
master節點作爲ntp服務器與外界對時中心同步時間,隨後對所有datanode節點提供時間同步服務。
所有datanode節點以master節點爲基礎同步時間。
安裝ntp
查看是否安裝了ntp:rpm -qa|grep ntp
安裝ntp: yum install ntp
設定東八時區
Linux裏面用Asia/Shanghai表示東八區,等價於Windows中的 北京、重慶、香港特別行政區,烏魯木齊的時區設置
rm -rf /etc/localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
主節點ntp配置
配置之前先關了服務 service ntpd status
修改配置文件 vim /etc/ntp.conf
內容修改如下:
同步阿里時間 ntpdate ntp1.aliyun.com
啓動ntp /etc/init.d/ntpd start
開機啓動 chkconfig ntpd on
查看同步狀態 ntpstat
節點ntp配置
先安裝ntp(如何安裝上面介紹了),然後關了ntp服務,再進行配置
service ntpd stop # 關閉ntpd
vim /etc/ntp.conf # server 0.centos.pool.ntp.org iburst 四條都註釋,修改成 server cdh01
ntpdate cdh01 # cdh01爲主節點名稱,需要ntpd是關閉狀態,所以需要先關閉ntpd服務
echo '*/10 * * * * /usr/sbin/ntpdate cdh01 &>/dev/null' >> /var/spool/cron/root
該命令是做一個每10分鐘同步一次時間服務器的任務,其中cdh01是自己配置的時間服務器,&>/dev/null表示不打印日誌。`crontab -e` 命令可以看到已經寫進去了
/etc/init.d/ntpd start # 啓動
chkconfig ntpd on # 開機自啓動
ntpstat # 查看同步狀態
ntpstat
檢查是否成功,用ntpstat命令查看同步狀態,出現以下狀態代表啓動成功:
synchronised to NTP server (192.168.43.228) at stratum 4
time correct to within 512 ms
polling server every 64 s
若出現以下內容,嘗試稍等幾分鐘再重試ntpstat
unsynchronised
time server re-starting
polling server every 8 s
查看同步的狀態:ntpq -p # 可查看延遲多久
詳情瞭解:https://blog.51cto.com/13178102/2052175
https://yq.aliyun.com/articles/696814?spm=a2c4e.11155472.0.0.2071678axvF5xr
https://www.cnblogs.com/quchunhui/p/7658853.html
拍快照,在運行cdh之前,易於恢復到運行cdh之前的環境。
(七)安裝CDH
1. 安裝Cloudera Manager Server 和Agent
a. 主節點解壓安裝
cloudera manager的目錄默認位置在/opt下。解壓:tar xzvf cloudera-manager*.tar.gz
將解壓後的cm-5.1.3和cloudera目錄放到/opt目錄下。
附: cp -a cm-5.1.3 /opt/
# -a 拷貝所有。
b. 爲Cloudera Manager 5建立數據庫
首先需要去MySql的官網下載JDBC驅動,http://dev.mysql.com/downloads/connector/j/,解壓後,找到mysql-connector-java-5.1.33-bin.jar,放到/opt/cm-5.1.3/share/cmf/lib/中。
也可以使用maven命令下載jar
mvn dependency:get -DremoteRepositories=http://repo1.maven.org/maven2/ -DgroupId=mysql -DartifactId=mysql-connector-java -Dversion=5.1.37 #maven命令下載jar
c. 在主節點初始化CM5的數據庫
/opt/cm-5.1.3/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -pxxxx --scm-host localhost scm scm scm
d. Agent配置
修改/opt/cm-5.1.3/etc/cloudera-scm-agent/config.ini中的server_host爲主節點的主機名。
e. 同步Agent到其他節點
scp -r /opt/cm-5.1.3 root@cdh02:/opt/
f. 在所有節點創建cloudera-scm用戶
useradd --system --home=/opt/cm-5.1.3/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
g. 準備Parcels,用以安裝CDH5
將CHD5相關的Parcel包放到主節點的/opt/cloudera/parcel-repo/目錄中(parcel-repo需要手動創建)。
相關的文件如下:
- CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel
- CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1
- manifest.json
最後將CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1,重命名爲CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha,這點必須注意,否則,系統會重新下載CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel文件。
h. 相關啓動腳本
通過/opt/cm-5.1.3/etc/init.d/cloudera-scm-server start
啓動服務端。
通過/opt/cm-5.1.3/etc/init.d/cloudera-scm-agent start
啓動Agent服務。
我們啓動的其實是個service腳本,需要停止服務將以上的start參數改爲stop就可以了,重啓是restart。
注:先啓動server,再啓動agent
2. web界面安裝配置CDH5
訪問地址:http://cdh01:7180/cmf/login
這時可以通過瀏覽器訪問主節點的7180端口測試一下了(由於CM Server的啓動需要花點時間,這裏可能要等待一會才能訪問),默認的用戶名和密碼均爲admin:
可以看到,免費版本的CM5已經沒有原來50個節點數量的限制了。
各個Agent節點正常啓動後,可以在當前管理的主機列表中看到對應的節點。選擇要安裝的節點,點繼續。
接下來,出現以下包名,說明本地Parcel包配置無誤,直接點繼續就可以了。
注:一定要選對版本,默認是CDH-5.16.3-1CDH5.16.2p0.8
點擊,繼續,如果配置本地Parcel包無誤,那麼下圖中的已下載,應該是瞬間就完成了,然後就是耐心等待分配過程就行了,大約10多分鐘吧,取決於內網網速。
接下來是服務器檢查,可能會遇到以下問題:
Cloudera 建議將 /proc/sys/vm/swappiness 設置爲 0。當前設置爲 60。使用 sysctl 命令在運行時更改該設置並編輯 /etc/sysctl.conf 以在重啓後保存該設置。您可以繼續進行安裝,但可能會遇到問題,Cloudera Manager 報告您的主機由於交換運行狀況不佳。以下主機受到影響:
通過echo 0 > /proc/sys/vm/swappiness
即可解決。
接下來是選擇安裝服務:
服務配置,一般情況下保持默認就可以了(Cloudera Manager會根據機器的配置自動進行配置,如果需要特殊調整,自行進行設置就可以了):
接下來是數據庫的設置,檢查通過後就可以進行下一步的操作了:
下面是集羣設置的審查頁面,這裏都是保持默認配置的:
終於到安裝各個服務的地方了。注意,這裏安裝Hive的時候可能會報錯,因爲我們使用了MySql作爲hive的元數據存儲,hive默認沒有帶mysql的驅動,所以需要通過以下命令拷貝一個:
cp /opt/cm-5.1.3/share/cmf/lib/mysql-connector-java-5.1.37.jar /opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hive/lib/
一定先複製上面的mysql驅動,再繼續下一步,免得安裝失敗。
羣集設置,初始化各組件
服務的安裝過程大約半小時就可以完成:
相關網址:
查看集羣信息:http://cdh:8088/cluster/
查看各節點信息:http://cdh:50070/dfshealth.html#tab-overview
安裝後:各個組件可在/etc/查看到。日誌可以在/var/log/目錄查看
3. 常見錯誤:
- [03/Apr/2015 00:50:43 +0000] 8369 MainThread agent ERROR Failed to connect to previous supervisor.
kill -9 $(pgrep -f supervisord)然後重啓agent即可
ps ax | fgrep supervisord
- There are mismatched versions across the system, which will cause failures. See below for details
- 安裝cdh的時候,選擇hosts主機的時候,沒有出現主機,可能是你的/etc/hosts配置出問題了。
注意:修改 /etc/hosts,此處一定要注意,不要按照網上有的說明,將127.0.0.1那一行裏的`localhost.localdomain`改成主機名稱,在安裝Cloudera Agent的時候會識別不出名稱和IP。像上面那樣新增ip和主機名就好了,原來的內容不做修改。
- 主機使用 NONE CDH 版本進行報告
- CDH5.6安裝報“Inspector did not run sucessfully”錯誤
進入mysql命令行,創建數據庫
//hive
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
//activity monitor
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
如果需要安裝Oozie請創建
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
1). --hive 數據庫
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
2). --集羣監控數據庫
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
3). --hue 數據庫
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
4). --oozie 數據庫
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
-
安裝失敗,無法接受agent發出的檢測信號。
確保主機名稱正確
確保端口7182可在cloudera manager server上訪問(檢查防火牆規則)
確保正在添加的主機的端口9000和9001空閒
檢查在添加的主機上/var/log/cloudera-scm-agent/中的代理日誌(某些日誌可在安裝詳細信息中找到)
a.刪了agent.pid和agent目錄下run目錄內容
b.ps aux | grep super
c.kill -9 <processID>
d.ps aux | grep super
root 18949 0.0 0.1 223624 12996 ? Ss 11:16 0:00 /opt/cm-e.7.0/lib64/cmf/agent/build/env/bin/python /opt/cm-5.7.0/lib64/cmf/agent/build/env/bin/supervisord
root 23390 0.0 0.0 112656 972 pts/0 S+ 11:37 0:00 grep --color=auto super
e.kill 18949
f.service cloudera-scm-agent restart
- 中途安裝失敗,重新安裝
關閉所有服務
#主節點
[root@CDH-DEV1 opt]# /opt/cm-5.13.0/etc/init.d/cloudera-scm-server stop
#主節點及其他節點
[root@CDH-DEV1 opt]# /opt/cm-5.13.0/etc/init.d/cloudera-scm-agent stop
刪除agent uuid
rm -rf /opt/cm-5.13.0/lib/cloudera-scm-agent/*
刪除數據庫scm
重新配置數據庫
/opt/cm-5.13.0/share/cmf/schema/scm_prepare_database.sh mysql -hlocalhost -uroot -p scm scm
啓動Cloudera server和agent,按照之前步驟安裝即可
- could not contact scm server at localhost:7182, giving up
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
解決:mv /usr/bin/host /usr/bin/host.bak
- 副本不足的塊, NameNode 運行狀況
free -m free -g 查看內存使用
df -h查看磁盤空間
df -ia 查看inode使用情況
- 安裝過程失敗,重新安裝
刪除數據庫cm,刪除cm_guid,重啓試一下(本方法未嘗試是否可靠)
作者:陳集福
時間:2019.08.09
本文檔參考:https://www.cnblogs.com/jasondan/p/4011153.html