離線(xiàn)部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服務(wù)

歷時(shí)一天半,著實(shí)廢了不少功夫。
整個(gè)搭建過(guò)程,是參考這篇文章大神的部署文檔。

一、系統(tǒng)環(huán)境配置

前提是/etc/hostname已經(jīng)修改過(guò)了。并且要注意,hostname中不允許有下劃線(xiàn)_,一律用-代替。

1.修改映射關(guān)系

修改所有節(jié)點(diǎn)/etc/hosts文件并添加所有節(jié)點(diǎn)的映射關(guān)系

[root@see-data-pre-slave-1 local]# vim /etc/hosts

查看修改后的/etc/hosts文件內(nèi)容

[root@see-data-pre-slave-1 local]# cat /etc/hosts
#127.0.0.1  localhost  localhost.localdomain  see-data-pre-slave-1
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.1  see-data-pre-master-01
192.168.0.2  see-data-pre-slave-1

2.配置免密的sudo用戶(hù)

[root@see-data-pre-slave-1 local]# useradd hadoop
[root@see-data-pre-slave-1 local]# passwd hadoop

用戶(hù)名:hadoop,密碼:hadoop
root用戶(hù)下visudo,添加hadoop ALL=(ALL) NOPASSWD: ALL

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
hadoop  ALL=(ALL)       NOPASSWD: ALL

所有節(jié)點(diǎn)都需要這樣配置

3.配置節(jié)點(diǎn)間免密ssh(hadoop用戶(hù))

hadoop用戶(hù)下

ssh-keygen -t rsa

猛按回車(chē)。
~/.ssh/下會(huì)生成公鑰id_rsa.pub和私鑰id_rsa文件。然后將各節(jié)點(diǎn)的公鑰互相追加。
公鑰追加時(shí),ssh-copy-id也好,手動(dòng)創(chuàng)建也好,都可以。
但要確保節(jié)點(diǎn)對(duì)應(yīng)用戶(hù)下的authorized_keys文件,有對(duì)應(yīng)的讀權(quán)限。比較常見(jiàn)的作法就是chmod 400 authorized_keys。不然有可能會(huì)在都配置好的情況下,ssh時(shí)要么需要密碼驗(yàn)證。要么會(huì)報(bào)Permission denied (publickey,gssapi-keyex,gssapi-with-mic).的error。
同時(shí)也要注意sshd_config的配置方法。

$ vim /etc/ssh/sshd_config

記得放開(kāi)PasswordAuthentication no > yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication no
#PermitEmptyPasswords no
PasswordAuthentication yes

如果要修改ssh默認(rèn)的端口配置,則需要vim /etc/ssh/ssh_config,將port變更為你想要的端口。

   Port 37500
#   Protocol 2
#   Cipher 3des

之后重啟sshd服務(wù)。
全部完成后,開(kāi)一個(gè)窗口測(cè)試下能否免密登錄

$ ssh hadoop@see-data-pre-slave-1

4.關(guān)閉防火墻

$ systemctl stop firewalld.service

5.關(guān)閉SELINUX

這里我選擇永久關(guān)閉

$ vi /etc/selinux/config

SELINUX=enforcing 改為 SELINUX=disabled
設(shè)置需要重啟后才能生效。

6.配置jdk

下載Linux環(huán)境下的jdk1.8,上傳至/opt并解壓。

$ cd /opt
$ tar zxvf jdk-8u144-linux-x64.tar.gz
$ mv jdk1.8.0_144/ /lib/jvm

配置環(huán)境變量

$ vi /etc/profile

在其中添加

#jdk
export JAVA_HOME=/lib/jvm/jdk1.8.0_144
export JRE_HOME=${JAVA_HOME}/jre   
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib   
export PATH=${JAVA_HOME}/bin:$PATH 

保存后使環(huán)境變量生效

$ source /etc/profile

通過(guò)java -versionwhereis java驗(yàn)證。
這里如果沒(méi)用生效的話(huà)。我是選擇設(shè)置軟鏈接的方式,直接指向我解壓的文件夾

$ ln -sf /lib/jvm/jdk1.8.0_144/jre/bin/java /bin/java
$ ln -sf /lib/jvm/jdk1.8.0_144/bin/javac /bin/javac

7.設(shè)置NTP

所有節(jié)點(diǎn)安裝NTP

$ yum install ntp

設(shè)置同步

$ ntpdate -d master-01

然后重啟服務(wù)

$ service ntpd restart

這里需要注意,如果是騰訊云的云服務(wù)器,需要vim /etc/ntp.conf來(lái)使用騰訊云的服務(wù)。

sudo vim /etc/ntp.conf
 
# Use public servers from the pool.ntp.org project.
 
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
 
server ntpupdate.tencentyun.com
 
#server 0.centos.pool.ntp.org iburst
 
#server 1.centos.pool.ntp.org iburst
 
#server 2.centos.pool.ntp.org iburst
 
#server 3.centos.pool.ntp.org iburst

8.安裝httpd服務(wù)

$ yum install httpd

啟動(dòng)

$ service httpd start

9.主節(jié)點(diǎn)(master)安裝配置mysql

mysql 依賴(lài)libaio庫(kù)

$ yum install libaio

下載mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz,上傳至/opt,解壓重命名至/usr/local/mysql

$ cd /opt
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
$ tar -zxvf /opt/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
$ mv /usr/local/mysql-5.7.19-linux-glibc2.12-x86_64/ /usr/local/mysql

新建用戶(hù)組和用戶(hù)

$ groupadd mysql
$ useradd mysql -g mysql

創(chuàng)建目錄并授權(quán)

$ cd /usr/local/mysql/ 
$ mkdir data mysql-files
$ chmod 750 mysql-files
$ chown -R mysql .
$ chgrp -R mysql .

初始化mysql

$ bin/mysqld --initialize --user=mysql

注意mysql臨時(shí)密碼。root@localhost生成臨時(shí)密碼o89<flb-t2oD,也就是root@localhost:后的字符串。
授予讀寫(xiě)權(quán)限

$ chown -R root .
$ chown -R mysql data mysql-files

添加到mysql啟動(dòng)腳本到系統(tǒng)服務(wù)

$ cp support-files/mysql.server /etc/init.d/mysql.server

給日志目錄授予讀寫(xiě)權(quán)限

$ mkdir /var/log/mariadb
$ touch /var/log/mariadb/mariadb.log
$ chown -R mysql:mysql /var/log/mariadb

修改/etc/my.cnf

$ vi /etc/my.cnf

修改 [mysqld]組下的 socket 路徑,注釋掉/var/lib/mysql/mysql.sock,加一行為tmp/mysql.sock

[mysqld]
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/tmp/mysql.sock

啟動(dòng)mysql服務(wù)

$ service mysql.server start

登錄mysql

$ /usr/local/mysql/bin/mysql -uroot -p
Enter password: 

這里的密碼就是之前提到的,臨時(shí)密碼o89<flb-t2oD。

登陸成功后,設(shè)置MySQL密碼

mysql> ALTER USER   'root'@'localhost' identified by '你想設(shè)置的密碼';
mysql> flush privileges;

開(kāi)啟遠(yuǎn)程登錄

mysql> grant all privileges on *.*  to  'root'@'%'  identified by '你想設(shè)置的密碼'  with grant option;
mysql> flush privileges;
mysql> exit;

安裝mysql時(shí),我遇到過(guò)bin/mysqld: error while loading shared libraries: libnuma.so.1的error。
解決辦法是yum -y install numactl(centos情況下)

10.下載依賴(lài)包

$ yum -y install chkconfig
$ yum -y install bind-utils
$ yum -y install psmisc
$ yum -y install libxslt
$ yum -y install zlib
$ yum -y install sqlite
$ yum -y install cyrus-sasl-plain
$ yum -y install cyrus-sasl-gssapi
$ yum -y install fuse
$ yum -y install portmap
$ yum -y install fuse-libs
$ yum -y install redhat-lsb

二、cloudera manager Server & Agent 安裝

1.在所有節(jié)點(diǎn),創(chuàng)建/opt/cloudera-manager

把下載好的cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz安裝包上傳至 master節(jié)點(diǎn)/opt/目錄。
所有節(jié)點(diǎn)解壓安裝Cloudera Manager Server & Agent。

$ cd /opt
$ tar xvzf cloudera-manager*.tar.gz -C /opt/cloudera-manager

2.在所有節(jié)點(diǎn),創(chuàng)建用戶(hù)cloudera-scm

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

3.配置cm agent

修改所有節(jié)點(diǎn)agent server_host

$ vim /opt/cloudera-manager/cm-5.12.1/etc/cloudera-scm-agent/config.ini

將server_host 修改成 master節(jié)點(diǎn)

# Hostname of the CM server.
server_host=192.168.0.1

# Port that the CM server is listening on.
server_port=7182

4.配置cm server的數(shù)據(jù)庫(kù)

在master節(jié)點(diǎn)初始化cm5的數(shù)據(jù)庫(kù)。
下載mysql驅(qū)動(dòng)包

$ cd /opt/cloudera-manager/cm-5.12.1/share/cmf/lib
$ wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

啟動(dòng)mysql服務(wù)

$ service mysql.server start
$ cd /opt/cloudera-manager/cm-5.12.1/share/cmf/schema/

$ ./scm_prepare_database.sh mysql cm -h 192.168.0.1 -uroot -pseemysql2018 --scm-host 192.168.0.1 scm scm scm

如果看到如下信息,說(shuō)明成功

[main] DbCommandExecutor              INFO  Successfully connected to database.
All done, your SCM database is configured correctly!

在這里遇到的坑就是,找不到$JAVA_HOME

./scm_prepare_database.sh: line 379: /lib/jvm/bin/java: No such file or directory

如果之前配置了軟鏈接,或環(huán)境變量生效的話(huà),不會(huì)出現(xiàn)這個(gè)錯(cuò)誤。
最壞的辦法就是去修改對(duì)應(yīng)的配置shell,找到j(luò)ava8下的目錄列表,把你解壓好的java絕對(duì)路徑加進(jìn)去。
在初始化失敗后,再次啟動(dòng)時(shí),會(huì)報(bào)cm庫(kù)已存在的error。解決辦法就是在mysql中刪掉對(duì)應(yīng)的庫(kù),再次初始化。


master配置的mysql

5.創(chuàng)建 parcel 目錄

master節(jié)點(diǎn)創(chuàng)建目錄/opt/cloudera/parcel-repo
將下載好的文件

CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel
CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha
manifest.json

cp到該目錄下

$ mkdir -p /opt/cloudera/parcel-repo
$ chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
$ cd /opt/cloudera/parcel-repo

重命名,CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 否則,系統(tǒng)會(huì)重新下載 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel

$ mv CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha

slave 節(jié)點(diǎn)創(chuàng)建目錄/opt/cloudera/parcels

$ mkdir -p /opt/cloudera/parcels
$ chown cloudera-scm:cloudera-scm /opt/cloudera/parcels

6.啟動(dòng)cm manager & agent服務(wù)

master節(jié)點(diǎn)

$ /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-server start

這里如果啟動(dòng)失敗的話(huà)。就sudo執(zhí)行
slave節(jié)點(diǎn)

$ /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-agent start

如果http://master:7180(用戶(hù)名/密碼,admin/admin)可以訪(fǎng)問(wèn),則安裝成功。

登錄頁(yè)
不選最后一個(gè)就行。現(xiàn)在默認(rèn)會(huì)有60天的試用期,到期之后就會(huì)轉(zhuǎn)到免費(fèi)版,不影響集群使用。

再點(diǎn)擊繼續(xù)。

如果agent服務(wù)啟動(dòng)正常就可以在當(dāng)前管理的主機(jī)中,看到對(duì)應(yīng)的節(jié)點(diǎn)。

正常情況下,這里不用主動(dòng)搜索新主機(jī)。如果當(dāng)前管理的主機(jī)中沒(méi)有缺少節(jié)點(diǎn),則需要檢查對(duì)應(yīng)節(jié)點(diǎn)的agent服務(wù)是否正常啟動(dòng)。
ssh端口需修改成服務(wù)器sshd_config中指定的默認(rèn)端口。

選中節(jié)點(diǎn),點(diǎn)擊繼續(xù)

選中離線(xiàn)下載的cdh對(duì)應(yīng)版本

點(diǎn)擊繼續(xù),如果配置本地 Parcel 包無(wú)誤,那么下圖中的已下載,應(yīng)該是瞬間就完成了,然后就是耐心等待分配過(guò)程就行了。
在這里,如果選擇主動(dòng)掃描添加新節(jié)點(diǎn),在沒(méi)有配置好本地yum的情況下,會(huì)出現(xiàn)各種各樣意外的bug。
比如IOError: [Errno 20] Not a directory: u'/opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel/meta/parcel.json'
cloudemanager安裝時(shí)出現(xiàn)ProtocolError: <ProtocolError for 127.0.0.1/RPC2: 401 Unauthorized>
cdh Timed out waiting for worker process collecting filesystem usage to complete。這個(gè)部分我沒(méi)有找到很好的解決辦法。困擾了至少2個(gè)小時(shí)。直到我選擇在當(dāng)前管理主機(jī)中安裝,問(wèn)題就解決了。

等待完成

中間出現(xiàn)的,選擇是否安裝oracle java se 開(kāi)發(fā)工具包(JDK)步驟,勾選安裝。
集群安裝,是否啟用單用戶(hù)模式,不勾選。

點(diǎn)擊繼續(xù),檢查主機(jī)正確性

一般情況下,檢查完之后只會(huì)出圖中這兩個(gè)error。第一個(gè)不清楚是什么。第二個(gè)是說(shuō)已啟用透明大頁(yè)壓縮,可能會(huì)導(dǎo)致性能問(wèn)題。解決辦法就是如下如下三個(gè)命令。

$ echo 0 > /proc/sys/vm/swappiness
$ echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled

然后將這兩個(gè)命令添加到/etc/rc.local中。
重新運(yùn)行檢查主機(jī)正確性。完成后點(diǎn)擊繼續(xù)。

根據(jù)實(shí)際需求選擇

點(diǎn)擊繼續(xù)。
角色分配頁(yè),分配好對(duì)應(yīng)的角色后,
點(diǎn)擊繼續(xù)。
配置數(shù)據(jù)庫(kù),這里使用之前master節(jié)點(diǎn)安裝的mysql數(shù)據(jù)庫(kù)。
配置項(xiàng)共有hive/hue/ozzie,可根據(jù)實(shí)際需要建對(duì)應(yīng)的庫(kù)及賬號(hào)。
對(duì)應(yīng)配置確定之后,右下方會(huì)有一個(gè)測(cè)試連接按鈕。全部測(cè)試通過(guò)后,才可以點(diǎn)擊繼續(xù)。
在這里,我遇到的一個(gè)JDBC driver cannot be found. Unable to find the JDBC database jar on host的error。解決辦法是mysql-connector-java.jar 復(fù)制為/usr/share/java/mysql-connector-java.jar,文件名必須一致。
點(diǎn)擊繼續(xù)。
目錄文件的配置頁(yè),基本上保持默認(rèn)即可。
點(diǎn)擊繼續(xù)。
等待分配,安裝。

主頁(yè)

至此,集群配置安裝成功!
到這一步時(shí),我還遇到一個(gè)錯(cuò)誤Cloudera NFS Gateway Error : Cannot connect to port 111。出現(xiàn)這種問(wèn)題的原因可能是 rpcbind 停止了服務(wù)。
解決辦法

$ systemctl status rpcbind.service
$ systemctl start rpcbind.service
$ systemctl stop rpcbind.service
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容