CDH集羣搭建部署


1. 硬件準備

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

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)!使用上面至關的便利!node

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,這樣就能夠互通了。python

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.mysql

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/sharesql

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
因爲本人安裝時候沒有一個個頁面截圖,具體你們第一次進入以後就能夠看到,傻瓜式操做。shell

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,可是須要了解並修改每一個服務的基本配置
  • 在安裝服務過程當中必定要找日誌,只有日誌纔會告訴你具體的問題
相關文章
相關標籤/搜索