1. 程式人生 > >CDH集群搭建部署

CDH集群搭建部署

pat getc pytho 路徑 重試 找到 數據庫初始 pool 操作系統


1. 硬件準備

????使用了五臺機器,其中兩臺8c16g,三臺4c8g。一臺4c8g用於搭建cmServer和NFS服務端,另外4臺作為cloudera-manager agent部署CDH集群。

ip 主要服務/角色 hostname(hosts配置與此一致) 機器規格
10.2.223.237 cmServer NFS server v-xstest-849-171208-cdh-1.hx 4c8g200g
10.2.223.239 Namenode,resouceManager,Hbase Master等 v-xstest-855-171208-cdh2-1.novalocal 8c16g200g
10.2.223.242 SecondaryNamenode,hive,hue等 v-xstest-856-171208-cdh2-2.novalocal 8c16g200g
10.2.223.224 Datanode,regionServer,nodeManager等 v-xstest-850-171208-cdh-2.novalocal 4c8g200g
10.2.223.197 Datanode,regionServer,nodeManager等 v-xstest-851-171208-cdh-3.novalocal 4c8g200g

2. NFS搭建

2.1 NFS簡介

????NFS 就是 Network FileSystem 的縮寫,最早之前是由sun 這家公司所發展出來的。 它最大的功能就是可以透過網絡,讓不同的機器、不同的操作系統、可以彼此分享個別的檔案 (share files)。所以,你也可以簡單的將他看做是一個文件服務器 (file server) 呢!這個 NFS 服務器可以讓你的 PC 來將網絡遠程的 NFS 服務器分享的目錄,掛載到本地端的機器當中, 在本地端的機器看起來,那個遠程主機的目錄就好像是自己的一個磁盤分區槽一樣 (partition)!使用上面相當的便利!

2.2 安裝NFS

  • 查看系統是否已經安裝NFS

    rpm -qa | grep nfs
    rpm -qa | grep rpcbind
  • yum安裝NFS

    yum -y install nfs-utils rpcbind

2.3 NFS服務端配置

  • 在NFS服務端上創建共享目錄/opt/share並設置權限
mkdir -p /opt/share
chmod 666 /opt/share
  • 編輯/etc/exports文件
vim /etc/exports
/opt/share *(rw,no_root_squash,no_all_squash,sync)

配置生效命令:
exportfs -r
  • 參數說明:
參數值    內容說明
rw  ro    該目錄分享的權限是可擦寫 (read-write) 或只讀 (read-only),但最終能不能讀寫,還是與文件系統的 rwx 及身份有關。

sync  async    sync 代表數據會同步寫入到內存與硬盤中,async 則代表數據會先暫存於內存當中,而非直接寫入硬盤!

no_root_squash  root_squash    客戶端使用 NFS 文件系統的賬號若為 root 時,系統該如何判斷這個賬號的身份?預設的情況下,客戶端 root 的身份會由 root_squash 的設定壓縮成 nfsnobody, 如此對服務器的系統會較有保障。但如果你想要開放客戶端使用 root 身份來操作服務器的文件系統,那麽這裏就得要開 no_root_squash 才行!

all_squash    不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名用戶,通常也就是 nobody(nfsnobody) 啦!

anonuid  anongid    anon 意指 anonymous (匿名者) 前面關於 *_squash 提到的匿名用戶的 UID 設定值,通常為 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在於你的 /etc/passwd 當中! anonuid 指的是 UID 而 anongid 則是群組的 GID 啰。
  • 啟動服務
service rpcbind start
service nfs start

2.4 NFS客戶端配置

  • 安裝以及啟動同上
  • 客戶端設置
mkdir -p /opt/share
showmount -e 10.2.223.237
mount -t nfs 10.2.223.237:/opt/share /opt/share -o proto=tcp -o nolock

3. SSH免密登錄

3.1 實現方法

????要實現多臺機器相互之間免密登錄,只需要將每臺機器ssh-keygen生成的公鑰(id_rsa.pub)寫到一個文件authorized_keys,然後將這個文件復制到每臺機器的~/.ssh/authorized_keys,這樣就可以互通了。

3.2 具體步驟

hosts文件編輯,註意一定要保持與每臺機器hostname一致,將hosts文件寫到/opt/share/ssh,便於同步
每臺機器執行 ssh-keygen -t rsa  -f ~/.ssh/id_rsa,連續回車兩次
將每臺機器的id\_rsa.pub寫到/opt/share/ssh/authorized\_keys
每臺機器執行/opt/share/ssh/sync\_config.sh,保持hosts,authorized\_keys一致
sync\_config.sh:
#!/bin/bash
rm -f /etc/hosts
cp /opt/share/ssh/hosts /etc/hosts
rm -f /root/.ssh/authorized_keys
cp /opt/share/ssh/authorized_keys /root/.ssh/authorized_keys

4. 安裝Cloudera Manager Server和Agent

????使用cm5.4.1 el6版本,el5會有python版本問題,el6內置的python2.6.

4.1 資源下載

cm安裝包:http://archive.cloudera.com/cm5/cm/5/cloudera-manager-el6-cm5.4.1_x86_64.tar.gz 
cm資源包(parcel):http://archive.cloudera.com/cdh5/parcels/5.4.1/CDH-5.4.1-1.cdh5.4.1.p0.6-el6.parcel
其他:http://archive.cloudera.com/cdh5/parcels/5.4.1/CDH-5.4.1-1.cdh5.4.1.p0.6-el6.parcel.sha1
http://archive.cloudera.com/cdh5/parcels/5.4.1/manifest.json
另外需要準備mysql-jdbc jar包,這個從maven倉庫找一個就行,我用的是:mysql-connector-java-5.1.34.jar

將上面下載資源上傳到NFS目錄/opt/share/cdh,mysql-connector-java-5.1.34.jar放到/opt/share

4.2 安裝

  • 解壓:所有機器
mkdir -p /opt/cloudera-manager
tar xvzf share/cloudera-manager*.tar.gz -C /opt/cloudera-manager
  • 添加用戶:所有機器
useradd --system --home=/opt/cloudera-manager/cm-5.4.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
  • 修改cloudera-scm-agent config.ini:所有機器
vim /opt/cloudera-manager/cm-5.4.1/etc/cloudera-scm-agent/config.ini
修改server.host=10.2.223.237  #即cloudera manager Server地址
  • 數據庫初始化:僅需要 cloudera manager server 執行
cp /opt/share/mysql-connector-java-5.1.34.jar /opt/cloudera-manager/cm-5.4.1/share/cmf/lib
 /opt/cloudera-manager/cm-5.4.1/share/cmf/schema/scm_prepare_database.sh mysql cm_new -h 10.2.222.25 -ubigdata -p‘bigdata123‘  --scm-host 10.2.223.237 bigdata bigdata123 --force
 註釋:cm_new  數據庫名稱,自己填寫  -h -u -p連接數據庫配置,如果沒有mysql需要自己搭建 ,--scm-host 後面bigdata bigdata123這兩個是需要連接的數據庫配置,而不是網上的scm  scm scm
 註2:這個命令執行主要是創建數據庫,並且在/opt/cloudera-manager/cm-5.4.1/etc/cloudera-scm-server/db.properties生成數據庫配置,如果配置成功就OK了,可以忽略其他報錯
  • 創建parcel-repo文件夾:cloudera manager server,註意文件夾名字不要寫錯,這個與後面CM配置頁面裏面設置對應,也可以修改,建議默認值保持一致
mkdir -p /opt/cloudera/parcel-repo
cp /opt/share/cdh/CDH-5.4.1-1.cdh5.4.1.p0.6-el6.parcel.sha1 /opt/cloudera/parcel-repo/CDH-5.4.1-1.cdh5.4.1.p0.6-el6.parcel.sha #註意修改名稱sha1  sha
cp /opt/share/cdh/manifest.json /opt/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm -R /opt/cloudera/parcel-repo/
  • 創建parcels文件夾:cloudera manager agent
mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels

4.3 啟動服務

  • Manager Server:/opt/cloudera-manager/cm-5.4.1/etc/init.d/cloudera-scm-server start
  • Agent : /opt/cloudera-manager/cm-5.4.1/etc/init.d/cloudera-scm-agent start

5. CDH配置安裝

????登錄配置頁面10.2.223.237:7180 默認賬號秘密: admin admin
由於本人安裝時候沒有一個個頁面截圖,具體大家第一次進入之後就可以看到,傻瓜式操作。

5.1 導航安裝

  • 登錄進入以後,選擇免費版,進入為CDH集群指定安裝主機頁面後,如果配置安裝正確,所有agent機器都會出現在當前管理的主機,如果沒有,則啟動錯誤或者config.ini配置錯誤。檢查啟動日誌,修改錯誤後,刪除4.2中創建的數據庫並且重新執行數據庫初始化,重啟服務
  • 進入群集安裝頁面,會讓你選擇CDH版本,勾選使用parcel建議 以及CDH-5.4.1-1.cdh5.4.1.p0.6
  • 進入群集設置,選擇需要安裝的服務,建議自定義服務,安裝你需要的相關服務即可
  • 接下來是集群分配各節點角色:這塊最好不要按照默認配置的來,相關的服務最好可以合理分配一下,比如我的兩臺8c16g就用來安裝Namenode ,resourceManger,hbase master,sendcondary namenode,hive以及hue等。同時,自己手動分配的時候,也會對集群相關服務更了解,後面安裝出錯的時候更容易找到日誌定位問題
  • 配置hive/oozie/active monitor數據庫:需要提前創建好
  • 安裝服務:各個服務按順序安裝,中間出錯的時候請在對應的機器上找到相關的日誌,服務的日誌都是在/opt/cloudera-manager/cm-5.4.1/run/cloudera-scm-agent/process/,在裏面找該服務相關的文件夾,進入之後就可以找到日誌文件了。修復問題後,點擊重試,會從最近失敗的服務開始重新安裝,直到所以安裝完成就行了。
  • 如果沒有安裝結束就退出,沒有關系,http://10.2.223.237:7180/cmf/hardware/hosts 這個是主機管理頁面,可以看每臺機器上還有哪些機器沒有啟動服務,手動啟動也可以的

5.2 服務配置修改

  • 修改集群顯示名稱:默認Cluster 1,直接修改初始化數據庫腳本的數據庫名.clusters表,修改display_name
  • 其他服務配置:比如hdfs,hbase等,直接在群集選項中選擇該服務,進入以後點擊配置就可以了

6. 相關錯誤以及心得

6.1 常見錯誤

  • scm_prepare_database.sh執行報錯
之前我也是參考網上的執行命令,但是沒人解釋最後三個scm scm  scm是什麽意思,具體在4.2中我已經強調了,只要後面數據庫創建成功並且對應的db.properties文件配置沒錯就行了
  • 配置hive/oozie數據庫出錯
要提前創建數據庫,並且安裝服務的機器上在/opt/cloudera-manager/cm-5.4.1/share/cmf/lib有mysql-connector jar包
  • 僅完成1個步驟。首個失敗:主機bigdata-cdh-client(id=2)上的客戶端配置(id=1)已使用1退出,而預期值為0
在安裝服務界面,執行失敗時,點擊查看詳細信息,會給出這樣類似的錯誤信息。查看/opt/cloudera-manager/cm-5.4.1/run/cloudera-scm-agent/process目錄下相關日誌。
發現上面這個錯誤信息是由於JAVA_HOME問題,啟動腳本中,JAVA_HOME並不是根據環境變量來獲取,而是在它列舉的幾個目錄下尋找,所以只要把你的java路徑ln -s過去就行,比如我的  ln -s /opt/jdk/jdk1.7-7u80/ /usr/java/jdk1.7
  • hive metastore server啟動失敗 Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH
將mysql-connectorxxx.jar拷貝到/opt/cloudera/parcels/CDH-5.4.1-1.cdh5.4.1.p0.6/lib/hive/lib下,只需要拷貝hive metastore server這臺就行了
  • urlopen error [Errno -2] Name or service not known> - agent197

    我之前為了識別方便,修改了hosts和機器的hostname,但是在我們的DNS服務器中仍無法修改,可以通過nslookup  ip 查看比如nslookup 10.2.223.237,發現這個裏面的name仍然是修改hostname之前的。
    所以建議不要輕易修改hostname,在配置的hosts中也要保持與hostname一致
  • 安裝向導頁面創建hive metastore數據庫表出錯:org.apache.hive.beeline.HiveSchemaHelper.getConnectionToMetastore(HiveSchemaHelper.java:79

cp /opt/share/mysql-connector-java-5.1.34.jar  /opt/cloudera/parcels/CDH-5.4.1-1.cdh5.4.1.p0.6/lib/hadoop/lib)
  • oozie創建數據庫表失敗,沒有com.mysql.jdbc.driver
cp /opt/share/mysql-connector-java-5.1.34.jar  /opt/cloudera/parcels/CDH-5.4.1-1.cdh5.4.1.p0.6/lib/oozie/libtools
  • oozie服務啟動失敗:stdout.log中也是沒有com.mysql.jdbc.driver
首先,刪除oozie數據庫並重新創建  
然後cp /opt/share/mysql-connector-java-5.1.34.jar  /opt/cloudera/parcels/CDH-5.4.1-1.cdh5.4.1.p0.6/lib/hadoop/lib

6.2 建議&心得

  • 請一定先搭建好NFS,而不是通過大量的scp節省人力。
  • cm是一個幫助你安裝hadoop生態的管理工具,類似ambari,但是需要了解並修改每個服務的基本配置
  • 在安裝服務過程中一定要找日誌,只有日誌才會告訴你具體的問題

CDH集群搭建部署