歷時一天半,著實(shí)廢了不少功夫。
整個搭建過程,是參考這篇文章和大神的部署文檔。
一、系統(tǒng)環(huán)境配置
前提是/etc/hostname已經(jīng)修改過了。并且要注意,hostname中不允許有下劃線_,一律用-代替。
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用戶
[root@see-data-pre-slave-1 local]# useradd hadoop
[root@see-data-pre-slave-1 local]# passwd hadoop
用戶名:hadoop,密碼:hadoop
root用戶下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用戶)
hadoop用戶下
ssh-keygen -t rsa
猛按回車。
在~/.ssh/下會生成公鑰id_rsa.pub和私鑰id_rsa文件。然后將各節(jié)點(diǎn)的公鑰互相追加。
公鑰追加時,ssh-copy-id也好,手動創(chuàng)建也好,都可以。
但要確保節(jié)點(diǎn)對應(yīng)用戶下的authorized_keys文件,有對應(yīng)的讀權(quán)限。比較常見的作法就是chmod 400 authorized_keys。不然有可能會在都配置好的情況下,ssh時要么需要密碼驗(yàn)證。要么會報Permission denied (publickey,gssapi-keyex,gssapi-with-mic).的error。
同時也要注意sshd_config的配置方法。
$ vim /etc/ssh/sshd_config
記得放開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ù)。
全部完成后,開一個窗口測試下能否免密登錄
$ 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
通過java -version或whereis java驗(yàn)證。
這里如果沒用生效的話。我是選擇設(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來使用騰訊云的服務(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
啟動
$ service httpd start
9.主節(jié)點(diǎn)(master)安裝配置mysql
mysql 依賴libaio庫
$ 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
新建用戶組和用戶
$ 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臨時密碼。root@localhost生成臨時密碼o89<flb-t2oD,也就是root@localhost:后的字符串。
授予讀寫權(quán)限
$ chown -R root .
$ chown -R mysql data mysql-files
添加到mysql啟動腳本到系統(tǒng)服務(wù)
$ cp support-files/mysql.server /etc/init.d/mysql.server
給日志目錄授予讀寫權(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
啟動mysql服務(wù)
$ service mysql.server start
登錄mysql
$ /usr/local/mysql/bin/mysql -uroot -p
Enter password:
這里的密碼就是之前提到的,臨時密碼o89<flb-t2oD。
登陸成功后,設(shè)置MySQL密碼
mysql> ALTER USER 'root'@'localhost' identified by '你想設(shè)置的密碼';
mysql> flush privileges;
開啟遠(yuǎn)程登錄
mysql> grant all privileges on *.* to 'root'@'%' identified by '你想設(shè)置的密碼' with grant option;
mysql> flush privileges;
mysql> exit;
安裝mysql時,我遇到過bin/mysqld: error while loading shared libraries: libnuma.so.1的error。
解決辦法是yum -y install numactl(centos情況下)
10.下載依賴包
$ 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)建用戶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ù)庫
在master節(jié)點(diǎn)初始化cm5的數(shù)據(jù)庫。
下載mysql驅(qū)動包
$ 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
啟動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
如果看到如下信息,說明成功
[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)境變量生效的話,不會出現(xiàn)這個錯誤。
最壞的辦法就是去修改對應(yīng)的配置shell,找到j(luò)ava8下的目錄列表,把你解壓好的java絕對路徑加進(jìn)去。
在初始化失敗后,再次啟動時,會報cm庫已存在的error。解決辦法就是在mysql中刪掉對應(yīng)的庫,再次初始化。

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)會重新下載 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.啟動cm manager & agent服務(wù)
master節(jié)點(diǎn)
$ /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-server start
這里如果啟動失敗的話。就sudo執(zhí)行
slave節(jié)點(diǎn)
$ /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-agent start
如果http://master:7180(用戶名/密碼,admin/admin)可以訪問,則安裝成功。


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

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


點(diǎn)擊繼續(xù),如果配置本地 Parcel 包無誤,那么下圖中的已下載,應(yīng)該是瞬間就完成了,然后就是耐心等待分配過程就行了。
在這里,如果選擇主動掃描添加新節(jié)點(diǎn),在沒有配置好本地yum的情況下,會出現(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安裝時出現(xiàn)ProtocolError: <ProtocolError for 127.0.0.1/RPC2: 401 Unauthorized>,
cdh Timed out waiting for worker process collecting filesystem usage to complete。這個部分我沒有找到很好的解決辦法。困擾了至少2個小時。直到我選擇在當(dāng)前管理主機(jī)中安裝,問題就解決了。

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

一般情況下,檢查完之后只會出圖中這兩個error。第一個不清楚是什么。第二個是說已啟用透明大頁壓縮,可能會導(dǎo)致性能問題。解決辦法就是如下如下三個命令。
$ echo 0 > /proc/sys/vm/swappiness
$ echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled
然后將這兩個命令添加到/etc/rc.local中。
重新運(yùn)行檢查主機(jī)正確性。完成后點(diǎn)擊繼續(xù)。

點(diǎn)擊繼續(xù)。
角色分配頁,分配好對應(yīng)的角色后,
點(diǎn)擊繼續(xù)。
配置數(shù)據(jù)庫,這里使用之前master節(jié)點(diǎn)安裝的mysql數(shù)據(jù)庫。
配置項(xiàng)共有hive/hue/ozzie,可根據(jù)實(shí)際需要建對應(yīng)的庫及賬號。
對應(yīng)配置確定之后,右下方會有一個測試連接按鈕。全部測試通過后,才可以點(diǎn)擊繼續(xù)。
在這里,我遇到的一個
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ù)。
目錄文件的配置頁,基本上保持默認(rèn)即可。
點(diǎn)擊繼續(xù)。
等待分配,安裝。

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