1. 程式人生 > >手把手部署CDH(5.12.1)完全離線模式安裝超級詳細攻略

手把手部署CDH(5.12.1)完全離線模式安裝超級詳細攻略

前言

搭建小型BI大資料計算叢集,由於資源有限(你懂的)部署的模式為CDH官方建議的最低配版本,沒有配備HA,(我們還是相信惠普的伺服器 此處手動滑稽)。

CDH背景

CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop眾多分支中的一種,由Cloudera維護,基於穩定版本的Apache Hadoop構建,並集成了很多補丁,可直接用於生產環境。

系統環境

Master * 1: 128G + 16C + 1T

Slave * 9:64G + 16C + 1T

Cloudera Manager:5.12.1

CDH: 5.12.1

安裝說明

官方參考文件:

官方共給出了3種安裝方式:

方法一:必須要求所有機器都能連網,由於各種國外的網站被牆的厲害,嘗試了幾次各種超時錯誤,耽誤時間不說,一旦失敗,重灌非常痛苦。

方法二:下載很多包,不方便容易迷路。

方法三:對系統侵入性最小,可實現全離線安裝,而且重灌非常方便。後期的叢集統一包升級也非常好。(本篇採用該方法安裝)

相關包的下載地址

Cloudera Manager下載地址:

CDH-5.12.1-1.cdh5.12.1.p0.3-el6.parcel

CDH-5.12.1-1.cdh5.12.1.p0.3-el6.pacel.sha1

manifest.json

manifest.json下載方法如下圖所示

準備工作(系統環境準備)

建議:以下所有操作均在root下完成,否側,出現錯誤,10個有9個都是目錄許可權問題,根據log查錯即可。

1.網路配置(所有節點)

vi /etc/sysconfig/network修改hostname:

通過service network restart重啟網路服務生效

因為節點太多逐一修改需要很多時間,所以我們用scp推給其他節點,這樣既保證了效率,又保證了準確。(當然節點更多的時候我們可以通過shell指令碼來幫助我們完成這些工作)

2.打通SSH,設定ssh無密登陸(所有節點)

(1)進入到我的home目錄

 cd ~/.ssh 

(2)生成公鑰和私鑰:

ssh-keygen -t rsa 

然後敲(三個回車),就會生成兩個檔案id_rsa(私鑰)、id_rsa.pub(公鑰)

將公鑰拷貝到要免密登入的目標機器上(別忘了copy給本機一份噢)

ssh-copy-id dt013190

ssh-copy-id dt013191

...

ssh-copy-id dt013199

最後通過ssh ip 命令可以登入到其他服務節點及視為成功。(提示:退出使用 exit 命令)

3.安裝Java(所有節點)

通過閱讀官方文件我們可以發現如下資訊

所以首先解除安裝自帶的OpenJdk,有些linux會預設自帶較低版本的jdk如Centos。

使用命令rpm -qa | grep java查詢java相關的包,命令rpm -e --nodeps包名並解除安裝它們,如果什麼都沒有則沒有預設安裝的jdk,直接進行下一步即可。

去Oracle的官網下載jdk的rpm安裝包,並使用rpm -ivh 包名安裝之。

這裡不建議使用最新版本的jdk,因為oracle官網更新的jdk版本要高於CDH官方推薦的最高版本,會出現相容性警告。

這裡我們選擇小版本121的rpm安裝包進行安裝。

選擇rpm軟體包的安裝方式好處有二。

第一:rpm安裝的預設路徑即是CDH安裝時會去尋找jdk的路徑,否則在CM的安裝中會報錯。

(如果用tar包手動的方式安裝可以建立軟連線 進入/usr/java目錄[沒有就手動建立之]:ln -s你的jdk安裝目錄 /usr/java/default,運用此方法別忘記手動配置環境變數)

第二:rpm安裝會自動建立環境變數。

將我們下載好的軟體包上傳至其中一臺節點

使用rpm -ivh 包名 安裝之

由於是rpm包並不需要我們來配置環境變數,我們只需要配置一個全域性的JAVA_HOME變數即可

執行命令:echo "JAVA_HOME=/usr/java/latest/" >> /etc/environment

最後執行命令java -version出現如下畫面即安裝成功

最後,重複如上動作,給剩餘其他節點都安裝好jdk。

(溫馨提示:在安裝CDH的過程中每做完一步就檢測一次,任何一步出錯或者疏忽都有可能導致叢集安裝不成功,別問我是怎麼知道的 -.-)

4.關閉防火牆以及SELINUX

提示:在所有的節點上執行,因為涉及到的埠太多,臨時關閉防火牆是為了安裝起來更方便。安裝完畢後可以根據需要設定防火牆策略,保證叢集安全。

關閉防火牆(重啟生效)(所有節點)

chkconfig iptables off

關閉SELinux(重啟生效)(所有節點)

(SELinux主要作用就是最大限度地減小系統中服務程序可訪問的資源(最小許可權原則))

vi /etc/selinux/config   

SELINUX=disabled

重啟後使用如下命令檢查一下:sestatus -v

出現disable即為成功

5.設定使用者最大可開啟檔案數,程序數,記憶體佔用

使用命令:ulimit -a,檢視當前系統的配置的上限,unlimited為無上限,如圖

修改引數 (重啟生效)(所有節點)

vi /etc/security/limits.conf

(提示:*代表所有使用者,@表示對某個使用者組生效,直接寫使用者名錶示對某個使用者生效)

6.配置NTP時間同步服務

(提示:這一步暫時可以跳過,但是在叢集啟動以後,會提示時間不同步。叢集中所有主機必須保持時間同步,如果時間相差較大會引起各種問題。)

6.1 安裝NTP(每個節點):

yum install ntp

根據提示輸入Y後待到出現Complete!字樣則表示為成功 。

6.2 配置NTP

先將原有的ntp.conf配置檔案進行備份 cp /etc/ntp.conf /etc/ntp.conf.backup(所有節點)

修改ntp.conf檔案如下 

vi /etc/ntp.conf

master配置:

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

server 127.127.1.0

fudge 127.127.1.0 stratum 10

slave配置:

server master(此處為master節點的hostname)

執行命令(所有節點)

設定開機啟動:

chkconfig ntpd on

啟動ntp:

service ntpd start

檢查是否設定成功:chkconfig --list ntpd 其中2-5為on狀態就代表成功。

7.設定swap空間

(Cloudera建議將交換空間設定為0,過多的交換空間會引起GC耗時的激增,所以還是關閉的為好。)

執行命令 (所有節點)

echo "vm.swappiness = 0" >> /etc/sysctl.conf

8.關閉大頁面壓縮

執行命令 (所有節點)

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag

9.安裝mysql

9.1 建立系統需要用到的一些目錄

安裝檔案下載目錄:/opt/software/mysql

資料庫儲存位置:/data/mysql

日誌儲存位置:/data/log/mysql

9.2下載mysql

我選擇的是如下版本(具體不同版本的相容與支援可查詢官網,在此不再贅述)

上傳tar包到我們建好的安裝目錄下

解壓縮到/usr/local/ 目錄下

 tar -zxvf mysql-5.7.13-linux-glibc2.5-x86_64.tar.gz -C /usr/local/

然後改名 mv mysql-5.7.13XXXXXX mysql

9.3建立mysql使用者使用者組及目錄

# groupadd mysql

# useradd -r -s /sbin/nologin -g mysql mysql -d /usr/local/mysql

該使用者禁止shell登入,同時修改使用者目錄許可權

# cd /usr/local/mysql# chown -R mysql .# chgrp -R mysql .

# chown -R mysql:mysql /data/mysql/ 

# chown -R mysql:mysql /data/log/ 

9.4初始化MYSQL

# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

部分人的linux系統會出現如下錯誤

這是因為缺少安裝包libaio和libaio-devel導致的不用緊張yum來幫忙

# yum install libaio*

Complete!成功

再次執行初始化命令

出現上述即為成功,記得把初始化的密碼copy下來噢

然後再執行命令

./bin/mysql_ssl_rsa_setup  --datadir=/data/mysql

成功如下

9.5修改系統配置檔案

進入support-files目錄

執行命令:

# cp my-default.cnf /etc/my.cnf

# cp mysql.server /etc/init.d/mysql

修改以下內容:

# vi /etc/init.d/mysql

# vi /etc/my.cnf

修改內容修改為如下:

[client]

port = 3306

socket = /usr/local/mysql/mysql.sock

[mysql]

no-auto-rehash

default-character-set=utf8

[mysqld]

socket = /usr/local/mysql/mysql.sock

basedir = /usr/local/mysql

max_allowed_packet = 64M

datadir = /data/mysql

explicit_defaults_for_timestamp = true

skip-ssl

secure-file-priv = NULL

lower_case_table_names = 1

back_log = 300

max_connections = 3000

max_connect_errors = 100

table_open_cache = 4096

external-locking = FALSE

max_allowed_packet = 64M

sort_buffer_size = 32M

join_buffer_size = 32M

thread_cache_size = 16

query_cache_size = 128M

query_cache_limit = 4M

thread_stack = 512K

transaction_isolation = REPEATABLE-READ

tmp_table_size = 128M

max_heap_table_size = 128M

character-set-server=utf8

long_query_time = 6

slow_query_log_file = /data/log/mysql/slow.log

[mysqld_safe]

open-files-limit = 8192

log-error=/data/log/mysql/mysql_3306.err

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

9.6執行mysql

# ./bin/mysqld_safe --user=mysql &

# ./bin/mysql --user=root -p

輸入9.4步我們copy下來的密碼 回車

依次輸入以下命令:

mysql> set password=password('123123');--修改密碼

mysql> grant all privileges on *.* to [email protected]'%' identified by '123123';--允許遠端訪問

mysql> flush privileges;--重新整理授權表

建立CM用的資料庫:

--hive資料庫 

create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci ;

--叢集監控資料庫

create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci ;

--hue資料庫

create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

-- oozie資料庫

create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

至此mysql資料庫的安裝就算完成了,但是為了方便使用,接下來我們給它配置環境變數以及開機啟動。

9.7配置環境變數

# vi /etc/profile

新增:export PATH=/usr/local/mysql/bin:$PATH

或者:

執行命令

# source /etc/profile

9.8配置開機啟動

# chmod 755 /etc/init.d/mysql

# chkconfig --add mysql --將MySQL新增為受chkconfig管理的服務

# chkconfig --level 345 mysql on --在級別3和5上設定服務為”on”

至此mysql安裝完畢,我們的環境也基本配置完畢,接下來讓我們正式開工!

安裝Cloudera Manager Server和 Agent

將我們下載好的安裝包上傳至伺服器並解壓安裝

主節點解壓安裝

cloudera manager的目錄預設在/opt下,cdh5的源會預設在/opt/cloudera/parcel-repo尋找,所以不能解壓到其他地方,使用命令

tar xzvf cloudera-manager*.tar.gz

CM可以按照個人喜好安裝,我這裡都安裝在了/opt下以方便管理

移動檔案

# mv cloudera /opt/

# mv cm-5.12.1 /opt/

這裡開始我們的cm需要與mysql進行互動,所以首先需要去MySql的官網下載JDBC驅動,http://dev.mysql.com/downloads/connector/j/,解壓後找到mysql-connector-java-5.1.**-bin.jar,放到/opt/cm-5.12.1/share/cmf/lib/中,不多贅述。

在主節點初始化CM5的資料庫:

/opt/cm-5.12.1/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -p123123 --scm-host localhost scm scm scm

Agent配置

修改/opt/cm-5.12.1/etc/cloudera-scm-agent/config.ini中的server_host為主節點的主機名。

同步Agent到其他節點

scp...

在所有節點建立cloudera-scm使用者

useradd --system --home=/opt/cm-5.12.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

準備Parcels,用以安裝CDH5

將我們提前下載好的Parcels檔案上傳到主節點的/opt/cloudera/parcel-repo/目錄中(如果沒有parcel-repo需要手動建立,這裡不需要分發到所有節點)。

注意!!最後一定要將CDH-5.12.1-1.cdh5.12.1.p0.3-el6.parcel.sha1,重新命名為CDH-5.12.1-1.cdh5.12.1.p0.3-el6.parcel.sha,去掉末尾的1,否則系統會重新下載CDH-5.12.1-1.cdh5.12.1.p0.3-el6.parcel檔案,也就不是純離線安裝了。

相關啟動指令碼

通過/opt/cm-5.12.1/etc/init.d/cloudera-scm-server start啟動服務端。

通過/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent start啟動Agent服務(所有Agent節點)。

以上我們是通過指令碼來啟動的,所以需要停止服務的時候,只需要把以上的start引數改為stop就可以啦。

service服務啟動需要幾分鐘,取決於伺服器的效能,此時我們可以使用

netstat -apn|grep 7180

查詢埠被佔用後,就可以用瀏覽器開啟http://masterIP:7180/進行訪問了,登入使用者名稱與密碼分別為admin。

至此基本上CM的安裝己經完成,接下來就可以通過WEB介面進行安裝CDH了!

安裝CDH

勾選是後繼續

這裡我們選擇免費版本後繼續

繼續

各個Agent節點正常啟動後,可以在當前管理的主機列表中看到對應的節點。選擇要安裝的節點,這裡我選擇全部節點,繼續。

出現以下版本的包,說明本地Parcel包配置無誤,直接點繼續。

如果配置本地Parcel包無誤,那麼已下載是瞬間就完成的,因為不需要下載,然後耐心等待分配過程就行了,速度由內網網速決定。完成後點選繼續。

接下來是伺服器檢查,如果前面嚴格按照步驟一步步做下來這裡應該是不會出現任何問題的,全綠通過。點選完成。

接下來是選擇安裝服務,根據需要按需選擇就好,點選繼續

服務配置,一般情況下保持預設就可以了,也可以自己手動根據節點情況進行分配,點選繼續

接下來是資料庫的設定,部分系統會通過測試,有的則像我一樣

錯誤原因:

hue要存元資料庫,CM的服務端是用Java編寫的,而CM的客戶端是Python編寫的,這裡測試連線時是用Python去連線資料庫。

掏出準備好的安裝包 , rpm之

再次點選測試連線,成功,點選繼續

下面是叢集設定的審查頁面,保持預設就可以,因為後面還需要更多詳細的改動,不建議這裡完成,我們首要的任務是先將叢集建立起來。所以點選繼續。

開始安裝各個服務,安裝Hive的時候可能會報錯,因為我們使用了MySql作為hive的元資料儲存,hive預設並沒有帶mysql的驅動,拷貝一個就行了:

cp mysql-connector-java-5.1.46-bin.jar /opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/hive/lib/

這時hive通過了oozie會出現錯誤,錯誤原理與hive雷同,通過觀察日誌我們發現oozie會去一個預設路徑下copy mysql的驅動,所以cp一個驅動過去即可,記得驅動的名稱改成日誌中需要的格式,否則依舊稽核不通過,這點很重要。

全部綠色通過,然後點選繼續。

到此為止CDH叢集就算部署完畢了

部分linux系統會因為缺少hue的相關依賴而啟動不了hue的某些程序(這個東西最矯情)具體根據自己系統的情況去安裝即可。

作者:瘋中的哈士奇 連結:https://www.jianshu.com/p/f25b81772142 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。