1. 程式人生 > >CDH5.7/5.8離線安裝-使用CM5,基於CentOS 6.7

CDH5.7/5.8離線安裝-使用CM5,基於CentOS 6.7

截至到2016年5月30日,在網上都沒有找到離線安裝CDH5.6的文章,最新的就是5.6,經過各種試驗,總算裝好了,記錄如下。

一、基礎環境
1.作業系統:Centos6.5 Minimal版本
2.CDH 5.7/5.8
3.Cloudra Manager版本5.7/5.8
4.JDK版本:5.7用的JDK7,5.8用的JDK8
5.使用VirtualBox 5搭建3個虛擬機器
6.硬體:筆記本 i5第6代,16G記憶體,256G固態硬碟
7.所有操作都是用root使用者,且各個虛擬機器root使用者密碼都設定成一樣的

二、主機基礎配置
各種基礎配置在網上已經到處都是了,沒有什麼特殊的。
主要環節如下:
1、每臺機器配置hosts

2、關閉防火牆和selinux

3、ssh無密碼登入
注意,master機器也要免登入自己,否則,安裝過程中,啟動Yarn服務這一步會失敗,而且在日誌中還找不到任何錯誤。

4、安裝JDK
1)解除安裝自帶java
rpm -qa |grep java
yum remove java*(刪除自帶的java)
2)安裝jdk(每個節點rpm安裝)
rpm -ivh jdk1.7.0_67.rpm

!!!重點!!!
JAVA安裝後,CDH需要一個/usr/java/default的軟連結,否則安裝CM的過程中,會出現找不到JAVA_HOME的錯誤。
進入/usr/java目錄:ln -s /opt/java/jdk1.7.0_67 default。

之後,修改/etc/profile:

export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

啟動:source /etc/profile

5、ntp時間同步
1)安裝NTP(每個節點): yum install ntp
2)配置NTP
master配置:

vi /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 10
restrict 192.168.56.0 255.255.255.0 nomodify notrap

chkconfig ntpd on
service ntpd start

slave配置:

vi /etc/ntp.conf
server master

service ntpd start
chkconfig ntpd on

3)檢視同步效果 命令:ntpstat
每臺機器上都看看,應該看到類似下面的提示:
synchronised to NTP server (192.168.56.105) at stratum 12

yum localinstall --nogpgcheck *.rpm

在使用mysql作為資料庫時,則不需要下載和安裝 cloudera-manager-server-db-xxx.rpm,此包為postgresql資料庫的安裝包.

2、slave節點安裝
只需安裝cloudera-manager-agent.rpm和cloudera-manager-daemons.rpm
(使用yum localinstall安裝)

chmod u+x cloudera-manager-installer.bin
./cloudera-manager-installer.bin

然後一直下一步,accept等,直到執行完成。
注意:有可能需要先把/etc/cloudera-scm-server/db.properties檔案刪除掉。否則安裝程式會報告不相容。

安裝過程的日誌,預設記錄到:/var/log/cloudera-manager-installer/。
如果出現問題,首先到這個目錄下查看出現問題的環節對應的日誌檔案。
(0.check-selinux.log 1.install-repo-pkg.log 2.install-oracle-j2sdk1.7.log 3.remove-cloudera-manager-repository.log)

實際上,這個檔案是用於線上安裝的,因為我們提前下載並安裝了CM的RPM包,所以這個指令碼可以迅速完成安裝過程。

注意:在安裝5.8這個版本時,執行.bin後,一直停在安裝jdk7的環節,看“2.install-oracle-j2sdk1.7.log”,發現是連線下載JDK時超時,而且下載的是cloudera網上的jdk7。沒辦法,只好這麼做:
1、安裝httpd:yum -y install httpd
2、編輯hosts檔案,把cm安裝用的“archive.cloudera.com”解析成本機地址(為了騙他,免得真去cloudera上去下載jdk)
3、建立目錄:/var/www/html/cm5/redhat/6/x86_64/cm/5/RPMS/x86_64/
4、把提前下載的oracle-j2sdk1.7-1.7.0-update67-1.x86_64.rpm放進去(記得把1.7.0-update67改為1.7.0+update67)
5、cd /var/www/html/cm5/redhat/6/x86_64/cm
6、wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/RPM-GPG-KEY-cloudera (先把hosts檔案恢復了再執行)
7、啟動httpd:apachectl start
再開始安裝,這時候cm會從本機下載jdk並安裝。但是你仍然可以使用之前已經安裝的jdk8。
8、安裝結束後,記得把hosts檔案恢復回去,否則下面裝CDH的時候會跑到本機去下載相關包。

四、安裝CDH 5.7或5.8
1、下載CDH軟體包:
http://archive.cloudera.com/cdh5/parcels/5.7/
下載el6的兩個parcel檔案(6就是centos6),和manifest.json
把parcel.sha1更名為 parcel.sha,否則安裝時又會下載一遍

剛剛master節點上安裝完成了CM,會在/opt目錄下生成cloudera資料夾,將剛才下載的三個檔案移動到/opt/cloudera/parcel-repo目錄下面。

注意點:
1. 在搜尋叢集主機畫面,輸入ip範圍進行搜尋:192.168.56.[105-107]。master也要選上。如果不選master,那麼這個機器僅僅是CM的主機而不屬於hadoop叢集了,諸如NameNode、Hbase的HMaster等主控服務都會被安裝到slave1上。
2. 提前把 /opt/cloudera 目錄下的目錄和檔案修改許可權:chown -R cloudera-scm.cloudera-scm *(因為CDH5.8需要這個使用者進行安裝)。
3. “提供ssh登入憑據”頁面,選擇root,並且接受相同的密碼。
指定主機的 SSH 登入方式
一種通過root使用者,密碼需要一致,剛開始安裝建議使用root。
也可以使用非root使用者,但是需要保證sudo無密碼訪問。
實現方法如下:
(給hdfs使用者設定無密碼sudo許可權)

chmod u+w /etc/sudoers
hdfs ALL=(root)NOPASSWD:ALL
chmod u-w /etc/sudoers
測試:sudo ifconfig

期間,可能會出現錯誤,有的錯誤是因為虛擬機器記憶體不夠導致的,可以多重試幾次就過了。

另一個錯誤:
安裝完畢後集群HDFS報警:
群集中有 9 個 副本不足的塊 塊。群集中共有 11 個塊。百分比 副本不足的塊: 81.82%。 臨界閾值:40.00%
產生的原因是因為叢集中DataNode節點只有2個,而安裝過程中採用的都是預設配置,dfs.replication 設定的為3,所以導致次報警。解決辦法:配置dfs.replication值為2並執行以下命令:

su hdfs
hadoop fs -setrep 2 /

如果出現“正在獲取安裝鎖”卡住不動了,刪掉鎖檔案:
rm -rf /tmp/.scm_prepare_node.lock

需要知道的

啟動服務:service cloudera-scm-server restart
啟動Agent:service cloudera-scm-agent restart
服務出了問題,記得首先去看相應的日誌:/var/log/cloudera*,這些目錄裡面記錄著各種日誌。

CDH安裝後的各種配置檔案、目錄位置等資訊:
1、相關目錄

/var/log/cloudera-scm-installer : 安裝日誌目錄。
/var/log/* : 相關日誌檔案(相關服務的及CM的)。
/usr/share/cmf/ : 程式安裝目錄。
/usr/lib64/cmf/ : Agent程式程式碼。
/var/lib/cloudera-scm-server-db/data : 內嵌資料庫目錄。
/usr/bin/postgres : 內嵌資料庫程式。
/etc/cloudera-scm-agent/ : agent的配置目錄。
/etc/cloudera-scm-server/ : server的配置目錄。
/opt/cloudera/parcels/ : Hadoop相關服務安裝目錄。
/opt/cloudera/parcel-repo/ : 下載的服務軟體包資料,資料格式為parcels。
/opt/cloudera/parcel-cache/ : 下載的服務軟體包快取資料。
/etc/hadoop/* : 客戶端配置檔案目錄。

2、配置檔案
配置檔案放置於/var/run/cloudera-scm-agent/process/目錄下。
如:/var/run/cloudera-scm-agent/process/193-hdfs-NAMENODE/core-site.xml。這些配置檔案是通過Cloudera Manager啟動相應服務(如HDFS)時生成的,內容從資料庫中獲得(即通過介面配置的引數)。
在CM介面上更改配置是不會立即反映到配置檔案中,這些資訊會儲存於資料庫中,等下次重啟服務時才會生成配置檔案。且每次啟動時都會產生新的配置檔案。

五、安裝後驗證
1、驗證MR程式

# 新增使用者和組
groupadd cdh-dev
useradd -g cdh-dev cdh-dev
lid cdh-dev

# hadoop建立相應的使用者
sudo -u hdfs hdfs dfs -mkdir /user/cdh-dev
sudo -u hdfs hdfs dfs -chown cdh-dev:cdh-dev /user/cdh-dev

# 執行wordcount程式
su - cdh-dev
echo "Hello world Bye world" > file0
echo "Hello hadoop Goodbye hadoop" > file1
hdfs dfs -mkdir -p /user/cdh-dev/wordcount/input
hdfs dfs -put file* /user/cdh-dev/wordcount/input
hadoop jar /opt/cloudera/parcels/CDH/jars/hadoop-examples.jar wordcount wordcount/input wordcount/output
hdfs dfs -getmerge wordcount/output output.txt
cat output.txt

2、驗證Hive

su - cdh-dev
echo "Alex, Cloudera" > hive-data
echo "fd, jinz" >> hive-data
hdfs dfs -mkdir -p hive/table-data-files
hdfs dfs -put hive-data hive/table-data-files
vi hive-data.sql
------------------------------------------
create external table test(
name string,
company string
)
row format delimited
 fields terminated by ','
 stored as textfile
 location '/user/cdh-dev/hive/table-data-files'
------------------------------------------
hive -f hive-data.sql
hive -e "select * from test"
hive -e "drop table test"

3、驗證HBase
建立表

create 'record', {NAME => 'user'}
put 'record', 'Alex', 'user:company', 'Cloudera'
# 驗證一下: get 'record', 'Alex'

# 用vi建立檔案 hbase_on_hive.hql
create external table hbase_on_hive(
name string,
company string
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties ( "hbase.columns.mapping" = ":key, user:company" )
tblproperties ( "hbase.table.name" = "record" );

hive -f hbase_on_hive.hql
hive -e "select * from hbase_on_hive" -- 無資料
hive -e "insert overwrite table hbase_on_hive select * from test"
hive -e "select * from hbase_on_hive" -- 可以看到資料已經進去了