歷時(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 -version
或whereis 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ù),再次初始化。
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),則安裝成功。
再點(diǎn)擊繼續(xù)。
正常情況下,這里不用主動(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)端口。
點(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ù)模式,不勾選。
一般情況下,檢查完之后只會(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ù)。
點(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ù)。
等待分配,安裝。
至此,集群配置安裝成功!
到這一步時(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