今天介紹一下:在linux系統下,如何通過CDH搭建集羣.
1.1Cloudera Manager簡介
Cloudera Manager是一個擁有集羣自動化安裝、中心化管理、集羣監控、報警功能的一個工具(軟件),使得安裝集羣從幾天的時間縮短在幾個小時內,
運維人員從數十人降低到幾人以內,極大的提高集羣管理的效率。
Cloudera Manager有四大功能:
(1)管理:對集羣進行管理,如添加、刪除節點等操作。
(2)監控:監控集羣的健康情況,對設置的各種指標和系統運行情況進行全面監控。
(3)診斷:對集羣出現的問題進行診斷,對出現的問題給出建議解決方案。
(4)集成:對hadoop的多組件進行整合。
1.2 CDH簡介
•CDH全稱 Cloudera's Distribution, including Apache Hadoop
• 是Hadoop衆多分支中的一種,由Cloudera維護,基於穩定版本的Apache Hadoop構建
• 提供了Hadoop的核心
– 可擴展存儲
– 分佈式計算
• 基於Web的用戶界面
1.3 系統環境
1)操作環境:linux系統,CentOS 6.5 x64
2)所需軟件:ClouderaManager版本:5.7.5
下載地址:http://archive.cloudera.com/cm5/cm/5/
CDH版本:5.7.5
3)安裝方式:
官方共給出了3種安裝方式:
第一種:要求所有機器都能連網,但是由於連接的是外網~~你們懂得,問題很多,成功安裝記錄很低。
第二種:需要下載很多包。
第三種:離線安裝 該方法對系統侵入性最小,最大優點可實現全離線安裝,而且重裝非常方便。後期的集羣統一包升級也非常好。
基於以上原因,我們選擇第三種安裝方式。
1.4 用戶配置
Linux系統對於用戶的權限管控是很嚴格的。管理員root用戶具有最大的權限,爲了保障系統穩定性和減少誤操作而導致系統奔潰的問題,root用戶一般不作爲常規的用戶。
因此對於cdh平臺的搭建,我們需要單獨創建用戶,可以方便權限的管控。
在這裏我們創建用戶:hmaster密碼:matercom168
1.5網絡配置
1)修改主機名:
假定我們發現我們的機器的主機名不是我們想要的,通過對"/etc/sysconfig/network"文件修改其中"HOSTNAME"後面的值,改成我們規劃的名稱。
輸入命令:# vi /etc/sysconfig/network 將主機名修改爲:gp-master
從節點的名字:從go-node01開始類推。
通過service network restart使之生效。
2)修改ip地址
使用 ifconfig命令查看本機的ip地址,如果和理想的有出入,就要重新設置本機的ip地址
使用 vi /etc/sysconfig/network-scripts/ifcfg-eth0 命令對ip地址進行修改
3)在/etc/hosts文件裏配置集羣裏的所有節點的ip地址和主機名
輸入命令:# vi /etc/hosts 配置好集羣裏的所有節點的ip地址和主機名
注意:本機的也要寫進去!
192.168.137.128 gp-master
192.168.137.129 gp-node01
1.6 配置ssh免密登錄
通過ssh免密登錄,我們在集羣的各個節點之間進行操作不必頻繁的輸入密碼,會很大程度的提供開發的效率。
首先,通過ssh-keygen -t rsa生成無密碼的密鑰對,期間連續按3次回車,結果如下:
將公鑰添加到認證文件中,cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
並設置authorized_keys的訪問權限:# chmod 600 ~/.ssh/authorized_keys
將集羣裏其他節點的公鑰追加到主節點,主節點在使用scp命令同步到每一個節點上。
在主節點上使用命令ssh gp-node02,無需輸入密碼成功進入名稱節點。
使用ifconfig命令查看當前ip,顯示如下:
說明免密登錄配置成功。
1.7 配置java環境變量
1)安裝jdk
在官網上下載好jdk之後,通過軟件,FileZilla將壓縮包拖放到usr/local/java目錄下,如果沒有java目錄,就使用 mkdir java命令在usr/local目錄下創建java
使用命令tar -zxvf jdk7u79linuxx64.tar.gz解壓
2)配置環境變量主要有兩種方式:
一種是通過vi /etc/profile,這種方式是對所有用戶生效,並且具有最高的優先級
另一種是通過vi .bash_profile,這種方式是隻對當前用戶(我們這裏的用戶是hmaster)
執行以下命令:
在這裏我採用的是第一種方式:
在原配置文件添加:
# set java environment
export JAVA_HOME=/usr/local/java/jdk1.7.0_79
export JRE_HOME=/usr/local/java/jdk1.7.0_79/jre
export PATH=$PATH:/usr/local/java/jdk1.7.0_79/bin
3)使配置生效並進行驗證
更改完之後,使用source /etc/profile保存配置
之後輸入 java -version查看當前版本,出現如下證明:環境變量配置成功.
1.8 關閉防火牆
防火牆不關掉的話在之後的過程中會出現一些莫名其妙的問題,因此我們提前將防火牆關閉以絕後患。
首先使用service iptables stop臨時關閉防火牆,這種方式重啓後防火牆會生效
接下來使用 chkconfig iptables off命令永久關閉防火牆
以上兩個命令執行完畢後使用查看防火牆狀態service iptables status
顯示如下:證明防火牆已經關閉。
1.9安裝MySql
使用命令 # rpm -pa | grep mysql 查看本機是否安裝MySql,
如果已經安裝使用命令rpm -ev mysql文件名--nodeps刪除。
使用yum命令安裝mysql:yum install mysql
選中的版本爲我們所需要的。
使用 yum install mysql-server.x86_64安裝需要的mysql
使用chkconfig mysqld on設置爲開機啓動,service mysqld start啓動MySql服務
按照如下截圖所示的命令mysqladmin -u root password 'mastercom168'
設置密碼,我設置的是mastercom168
之後輸入用戶名和密碼 mysql -uroot -pmastercom168
,進入到MySql服務,MySql安裝完成。
接下來創建我們所需要的數據庫
#hive 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用戶在主節點擁有所有數據庫的訪問權限
grant all privileges on *.* to 'root'@'gp-master' identified by 'mastercom168' with grant option;
flush privileges;
1.10所有的節點配置時間同步服務
集羣中所有主機必須保持時間同步,如果時間差距過大,回引起各種問題。
在主節點和從節點輸入date,可以看到,我的集羣裏各個節點之間的時間是同步的。
我這裏就不用配置時間同步。
附:時間同步的配置方法:
如果各個主機上的時間不同步或者存在較大差異時,需要配置時間同步。
將gp-master節點作爲ntp服務器與外界對時中心同步時間,隨後對所有datanode節點提供時間同步服務。
所有datanode節點以master節點爲基礎同步時間。
所有節點安裝相關組件:yum install ntp。
完成後,配置開機啓動:chkconfig ntpd on
檢查是否設置成功:chkconfig --list ntpd
其中2-5爲on狀態就代表成功。
主節點配置
在配置之前,先使用ntpdate手動同步一下時間,免得本機與對時中心時間差距太大,使得ntp不能正常同步。這裏選用主節點作爲對時中心ntpdate -u 192.168.137.128。
ntp服務只有一個配置文件,/etc/ntp.conf,適當修改該文件即可。
這裏只給出有用的配置,其餘的配置都用#注掉,這裏就不在給出:
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
server gp-master #(主機名或ip)
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
配置文件完成,保存退出。
啓動服務,執行如下命令:service ntpd start
檢查是否成功,用ntpstat命令查看同步狀態,出現以下狀態代表啓動成功:
如果出現異常請稍等片刻。
配置ntp客戶端(所有datanode節點):同主節點。
ok保存退出。
請求服務器前,先使用ntpdate手動同步一下時間:
ntpdate -u gp-master(主節點ntp服務器)
這裏可能出現同步失敗的情況,請不要着急,一般是本地的ntp服務器還沒有正常啓動,一般需要等待5-10分鐘纔可以正常同步。
啓動服務:service ntpd start
如此,時間同步配置完成。
2、Cloudera Manager服務配置
有了上述的準備工作之後,接下來可以正式開始集羣的安裝。
以上的準備工作的細節必須注意!
哪一點沒有注意到都會導致之後的安裝失敗!
2.1安裝Cloudera Manager Server和Agent
主節點解壓安裝cloudera manager的目錄默認位置在/opt下,解壓:tar -zxvf cloudera-manager*.tar.gz
我們將解壓後的cm-5.7.5和cloudera目錄放到/opt目錄下。
2.2 爲Cloudera Manager建立數據庫
首先需要去MySql的官網下載JDBC驅動,http://dev.mysql.com/downloads/connector/j/,
解壓後,找到mysql-connector-java-5.1.45-bin.jar,
放到/opt/cm-5.7.5/share/cmf/lib/中。
在主節點初始化CM5的數據庫:
執行命令:/opt/cm-5.7.5/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -pmastercom168 --scm-host localhost scm scm scm
2.3 Agent配置
修改/opt/cm-5.7.5/etc/cloudera-scm-agent/config.ini中的server_host爲主節點的主機名。即gp-master
同步Agent到其他節點:
scp -r /opt/cm-5.7.5 root@gp-node02:/opt/
在所有節點創建cloudera-scm用戶:
useradd --system --home=/opt/cm-5.7.5/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
準備Parcels,用以安裝CDH5
2.4 配置Parcel
將CHD5相關的Parcel包放到主節點的/opt/cloudera/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使用命令:
mv CDH-5.7.5-1.cdh5.7.5.p0.3-el6.parcel.sha1 CDH-5.7.5-1.cdh5.7.5.p0.3-el6.parcel.sha
這點必須注意,否則,系統會重新下載CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel文件。
啓動相關腳本:主節點的Service和Agent,其餘節點的Agent.
主節點:通過/opt/cm-5.7.5/etc/init.d/cloudera-scm-server start啓動服務端。
所有節點:通過/opt/cm-5.7.5/etc/init.d/cloudera-scm-agent start啓動Agent服務。
我們啓動的其實是個service腳本,需要停止服務將以上的start參數改爲stop就可以了,重啓是restart。
輸入命令 lsof -i :7180檢測7180端口的狀態:
上面的結果說明,7180端口已經啓動,我們就可以通過界面監控集羣了
2.5 啓動及驗證
上面的主節點的service和所有節點的agent全部成功啓動之後,
就可以通過瀏覽器輸入主節點的ip:7180進入cloudera manager界面進行操作
如圖,輸入:192.168.137.128:7180進入界面
(service剛剛啓動,可能不能馬上進入界面,稍等一下即可)。
默認的賬戶名和密碼都是admin.
輸入 admin
admin
點擊登錄,完成登錄操作。
3、CDH集羣安裝
根據界面上的提示進行CDH集羣的安裝
3.1 爲CDH集羣安裝指定主機
在是的,我接受最終用戶許可條款和條件點擊一下,
點擊繼續進行下一步。
接下來要爲cdh羣集安裝指定主機。
注意要選擇當前管理的主機(點擊新主機旁邊的位置)!
將集羣裏所有的節點全部選上!!
如果有哪個應該出現的節點沒有出現,
就說明該節點的agent啓動出現了問題。
就去它的agent日誌文件下面排查問題。
agent日誌文件存放在:/opt/cm-5.7.5/log/cloudera-scm-agent目錄下
文件名是: cloudera-scm-agent.log
點擊使用Parcel,進行路徑的設置
這個路徑很關鍵,如果設置有問題的話就會進行在線安裝,不僅耗時,還會出現各種各樣的問題!
如果你將cm的安裝包放在了opt包下面,前面兩個的路徑就沿用默認的配置!
如果使用的是自定義路徑,就將opt替換爲實際的路徑!
選擇安裝版本,這裏我使用的是CDH5.7.5
剩下的使用默認的選項即可。
3.2 檢查主機的正確性
點擊繼續進行下一步,檢查主機的正確性
這裏,有問題的話要解決問題。
這裏驗證全部正確,卻提示了兩個警告。
這兩個警告如果不處理可能對我們的集羣產生影響。
第一個警告的處理方式,執行echo 0 > /proc/sys/vm/swappiness命令
將該環境變量臨時設置爲0
對於第二個警告:使用命令:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
並且修改文件 vi /etc/rc.local
在文件的末尾加上該命令:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
拖到該界面的下面,我們看到:這是Cloudera Manager下對應的各種軟件的版本
可以看到,我們關注的幾個軟件:
Hadoop是2.6.0,Spark是1.6.0
Hbase是1.2.0,Hive是1.1.0
都是我們熟悉的版本。
點擊完成。
3.3 集羣設置
接下來開始進行集羣的設置,選擇需要安裝的CDH5服務,這裏,我選擇安裝全部。即點擊
所有服務。
可以根據實際需要選擇自定義服務,選擇自己所需要的組件進行安裝。
建議不要像我這麼選,先只安裝核心組件,這樣會增加安裝成功機率,後面需要什麼在安裝什麼也是可以的.
3.4自定義角色分配
自定義各個組件的分配。確定某個組件安裝在集羣的哪個節點上。
這裏,全部根據默認配置搭配即可。
3.5數據庫檢測
這裏,就用到了文檔開始時安裝MySql時我們創建的兩個數據庫。
一個是amon,一個是hive
用戶名均爲root ,密碼均爲mastercom168。
輸入結束後,點擊測試連接檢驗數據庫。
如圖,兩個數據庫連接均提示Successful。這是,可以點擊繼續進行下一步。
3.6目錄設置
這一步,我們主要配置各個組件的一些重要屬性,及其數據的存儲目錄,總結如下:
HDFS的根目錄, 存在/hbase路徑下
DataNode數據目錄, 存在/dfs/dn目錄下
HDFS檢查點目錄, 存在/dfs/snn目錄下
NameNode數據目錄, 存在/dfs/nn目錄下
Hive倉庫目錄, 存在/usr/hive/warehouse
Hive Metastore服務器端口: 9083
Impala Daemon暫存目錄: /impala/impalad
HDFS數據目錄: /solr
NodeManager本地目錄: /yarn/nm
數據目錄: /var/lib/zookeeper
事務日誌目錄: /var/lib/zookeeper
3.7組件首次運行
集羣裏配置好的組件進行首次運行操作!
全部運行成功後點擊完成即可!
之後就可以通過界面管理集羣啦!
4、通過界面管理集羣
4.1 羣集
主要包括3個部分:Cluster 1
服務(集羣裏面安裝的各種組件)
Cloudera Management Service
點進某個板塊,點擊板塊右上角的操作,可以對集羣的某個組件進行操作:
主要包括,啓動,停止,重啓,等
在配置下,可以完成對一些服務,和關鍵目錄,屬性等的配置。
在狀態下,可以完成對某個組件狀態的監控。
還可以以圖表這種更直觀的形式顯示集羣的運行狀況。
4.2 主機
主機目錄下主要包括:所有主機,角色,主機模型,磁盤概述,Parcel等幾個模塊
我們可以直觀的瞭解到主機的各種信息以及主機的運行狀態。
4.3 診斷
診斷界面主要包括事件,日誌,服務器日誌等信息。
事件:可以通過指定的內容(組件)和關鍵詞來查看你想了解的信息
通過對日誌,和服務器日誌的查看和分析,可以更加直觀方便的定位問題並解決問題
4.4 審覈
主要記錄服務器開啓關閉,以及用戶的登錄信息
4.5 圖表
包括:圖表生成器,新儀表板,和管理儀表板
圖表生成器:通過輸入查詢來構建圖表,可以根據實際需要選擇各種類型的圖表。
新儀表板:
管理儀表板:包括創建儀表板和導入儀表板
5.6 管理
管理界面包括:設置,警報,用戶,安全,許可證,語言
對語言,用戶,安全等信息進行管理,並對集羣的關鍵性信息進行設置。