一. 服務器准備
我這里是本地虛擬機搭建,共四台服務器主機,cdp01是管理節點,cdp01,02和03是數據節點.mysql是數據庫節點.也可以把mysql節點放在集群內部,由於我這里搭建了c5和c7兩個版本的集群,為了不重復搭建mysql就單獨搭了一個mysql服務器,后面准備研究以下如何用docker來搭建集群.畢竟筆記本資源有限.
服務器配置分別如下:
主節點cdp01:
192.168.127.121
這里雖然克隆之后增加了磁盤空間到100g,但是有50g空間是未分配的,在另一篇文章里進行根目錄擴容說明.
從節點cdp02,cdp03:
192.168.127.122
192.168.127.123
mariaDB服務器(單節點):
192.168.127.188
二. 預配置
由於我是從初始化好的虛擬機中克隆的cdp服務器,有一些配置是提前配置好的,比如靜態ip和網絡配置等.以下操作在此基礎之上進行記錄.
本次搭建過程是可以連接外網的環境,一般公司環境沒有外網需自行配置公司內部yum源倉庫
我這里配置的是網易的yum倉庫,可以下載網易或者阿里雲的鏡像文件進行配置
這里可以先准備以下后面會用到的一些腳本和安裝集群需要用到的安裝包.放一台機器即可,我這里是放在cdp01的/soft目錄下.
cdp01主機上創建一個文件夾用於存放腳本和安裝包,上傳安裝包和腳本.
mkdir /soft
1. 配置ip和hostname
配置ip
# 這里修改自己的網卡配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改好ip后,保存退出.重啟網絡服務
systemctl restart network
重啟好之后可以用xshell遠程連接進行后續操作.
配置主機名
hostnamectl set-hostname cdp01
hostnamectl set-hostname cdp02
hostnamectl set-hostname cdp03
然后修改hosts文件
vim /etc/hosts
分發hosts文件,在myshell文件夾下執行
./batch_scp.sh node.list /etc/hosts /etc/
2. 安裝jdk(3台)
2.1 解壓tar包
# 1. 創建文件夾
mkdir /usr/java
# 2. 解壓tar包至1中創建的文件夾
tar -zxvf /soft/jdk-8u141-linux-x64.tar.gz -C /usr/java/
2.2 配置環境變量
# 1. 添加環境變量
vim /etc/profile
# 2. 在文件末尾添加以下內容
export JAVA_HOME=/usr/java/jdk1.8.0_141/
export PATH=$JAVA_HOME/bin:$PATH
# 3. 生效配置文件
source /etc/profile
驗證結果如下:
2.3 更換jar包,避免在后面配置kerberos認證時報錯(不配置kerberos可以忽略此步驟)
在/soft目錄下執行
cp local_policy.jar US_export_policy.jar /usr/java/jdk1.8.0_141/jre/lib/security/
注意:安裝完java之后,要替換/usr/java/jdk1.8.0_131/jre/lib/security目錄下的local_policy.jar和US_export_policy.jar,主要是解決再后面安裝kerberos的時候報如下的錯誤:
GSSException: Failure unspecified at GSS-API level (Mechanism level: Encryption type AES256
CTS mode with HMAC SHA1-96 is not supported/enabled)
2.4 分發文件夾,並配置環境變量
cdp01上執行分發命令
scp /usr/java root@cdp02:/usr/
按照提示輸入yes和root用戶密碼,可以看到拷貝過程如下
cdp02,cdp03配置環境變量,並生效配置
./batch_scp.sh node.list /etc/profile /etc/
# 生效配置文件
source /etc/profile
3. 關閉selinux(3台)
selinux是一種安全子系統,它能控制程序值訪問特定的文件,使用selinux可能會導致安裝失敗,這里將所有節點的selinux關閉即可.
vim /etc/selinux/config
SELINUX=disabled
保存退出
改完后分發配置文件
4. 關閉防火牆(3台)
先檢查以下防火牆狀態
systemctl status firewalld
關閉防火牆
systemctl stop firewalld
# 並關閉防火牆開機自啟
systemctl disable firewalld
5. 調整linux系統參數
5.1 關閉交換空間
這里設置swappiness=1,最大限度的使用物理內存,盡量不使用交換空間
echo 1 > /proc/sys/vm/swappiness
echo "vm.swappiness=1" >> /etc/sysctl.conf
echo "echo 1 > /proc/sys/vm/swappiness" >> /etc/rc.d/rc.local
cat /proc/sys/vm/swappiness
如果是現有集群需要關閉交換空間,則按以下步驟操作:
-
echo 0 > /proc/sys/vm/swappiness
-
查看交換分區信息swapon -s
-
關閉交換空間swapoff 第二步中查詢的交換分區
注意:在centos6中swappiness=0表示盡量不使用交換分區,centos7中swappiness=0表示禁用交換分區,如果完全禁用交換分區,可能會引起內存溢出的問題,在centos7中可以將該值設置為1
5.2 禁用透明大頁面
透明大頁面可能會帶來cpu占用率過高的問題。將這個參數設置為never,為了保證重啟生效,要把命令寫到/etc/rc.d/rc.local中。
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.d/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
5.3 修改LINUX最大文件數句柄(LINUX默認是1024)
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
6. 配置時間同步
在所有安裝CDH集群的設備中需要統一設置時間同步服務,這里選擇將三台主機中的其中一台主機作為NTP時間同步服務器,對nta001進行ntp服務器配置,其他服務器來同步這台服務器的時鍾
6.1 安裝ntp服務
yum install ntp -y
6.2 配置主服務器(cdp01)
vim /etc/ntp.conf
#刪除默認配置並添加以下內容:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
6.3 配置從服務器(cdp02,cdp03)
vim /etc/ntp.conf
# 刪除默認配置並添加以下內容
server cdp01 iburst
6.4 開啟時間同步服務,設置開機啟動(3台)
service ntpd start或者systemctl start ntpd.service
chkconfig ntpd on或者systemctl enable ntpd.service
# 查看服務狀態
systemctl status ntpd.service
6.5 驗證時間同步(3台)
查看時間同步狀態
ntpq -p
cdp01:
cdp02:
cdp03:
7. 安裝http服務(3台)
安裝httpd服務
yum install httpd -y
開啟httpd服務
systemctl start httpd.service
開機自動啟動httpd服務
chkconfig httpd on
三. mysql安裝和建庫
1. 安裝mysql
rpm安裝包方式安裝
tar -zxvf MySQL-5.7.23-1.el7.x86_64.rpm-bundle.tar -C /opt/software/mysql/
cd /opt/software/mysql/
chmod u+x *.rpm
# 安裝Mysql-shared-compat替換系統自帶的mysql-libs
rpm -qa | grep -I mysql
rpm -ivh MySQL-shared-compat-5.7.23-1.el7.x86_64.rpm
yum remove mysql-libs
rpm -ivh MySQL-server-compat-5.7.23-1.el7.x86_64.rpm
rpm -ivh MySQL-client-compat-5.7.23-1.el7.x86_64.rpm
安裝完要進行基礎配置,改密碼,設置遠程登陸等等...
我這里是在192.168.127.188服務器上提前安裝好了mariadb, 這里就不作詳細說明了, 安裝教程網上很多, 另外一般企業中配置mysql主主同步, 提升MySQL可用性
2. 拷貝驅動
# 創建文件夾:(3台)
mkdir -p /usr/share/java
# 拷貝驅動jar包(cdp01)
cp /soft/mysql-connector-java-5.1.38.jar /usr/share/java/
cd /soft/myshell
./batch_scp.sh node.list /usr/share/java /usr/share/
# 創建軟連接(3台)
cd /usr/share/java
ln -s mysql-connector-java-5.1.38.jar mysql-connector-java.jar
注意:如果不是創建軟連接,用mv命令改名去掉版本號的方式要記得給驅動包添加可執行權限。
3. 創建搭建集群需要的用戶和數據庫
create database cdp7metastore default character set utf8;
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive@2021';
GRANT ALL PRIVILEGES ON cdp7metastore.* TO 'hive'@'%';
create database cdp7cm default character set utf8;
CREATE USER 'cm'@'%' IDENTIFIED BY 'cm@2021';
GRANT ALL PRIVILEGES ON cdp7cm.* TO 'cm'@'%';
create database cdp7am default character set utf8;
CREATE USER 'am'@'%' IDENTIFIED BY 'am@2021';
GRANT ALL PRIVILEGES ON cdp7am.* TO 'am'@'%';
create database cdp7rm default character set utf8;
CREATE USER 'rm'@'%' IDENTIFIED BY 'rm@2021';
GRANT ALL PRIVILEGES ON cdp7rm.* TO 'rm'@'%';
create database cdp7hue default character set utf8;
CREATE USER 'hue'@'%' IDENTIFIED BY 'hue@2021';
GRANT ALL PRIVILEGES ON cdp7hue.* TO 'hue'@'%';
create database cdp7oozie default character set utf8;
CREATE USER 'oozie'@'%' IDENTIFIED BY 'oozie@2021';
GRANT ALL PRIVILEGES ON cdp7oozie.* TO 'oozie'@'%';
create database cdp7sentry default character set utf8;
CREATE USER 'sentry'@'%' IDENTIFIED BY 'sentry@2021';
GRANT ALL PRIVILEGES ON cdp7sentry.* TO 'sentry'@'%';
create database cdp7nas default character set utf8;
CREATE USER 'nas'@'%' IDENTIFIED BY 'nas@2021';
GRANT ALL PRIVILEGES ON cdp7nas.* TO 'nas'@'%';
create database cdp7nms default character set utf8;
CREATE USER 'nms'@'%' IDENTIFIED BY 'nms@2021';
GRANT ALL PRIVILEGES ON cdp7nms.* TO 'nms'@'%';
flush privileges;
創建好數據庫后,賦完權限要記得刷新權限
四. 安裝CM
1. 配置本地yum源(cdp01)
下載所需的安裝包,配置本地的yum源,這樣在后面安裝集群時就不用去互聯網下載,可以節省很多時間,步驟如下:
1.1 下載所需的軟件包
1.2 將下載的安裝包移動到/var/www/html/cm7.1.4/
mkdir -p /var/www/html/cm7.1.4
cp /soft/cloudera-* /soft/allkeys.asc /var/www/html/cm7.1.4/
1.3 安裝createrepo
yum install createrepo
1.4 創建repo
cd /var/www/html/cm7.1.4
createrepo .
1.5 配置本地yum源
cd /etc/yum.repos.d
vim cm.repo
輸入以下內容:
[cm]
name=cm,Version 7.1.4
baseurl=http://192.168.127.121/cm7.1.4/
enable=1
gpgcheck=0
然后保存退出。
執行以下命令:
yum clean all
yum makecache
yum list |grep cloudera
可以看到以下內容:
1.5 驗證配置結果
瀏覽器訪問 http://192.168.127.121/cm7.1.4 , 可以看到以下界面
1.6 相同的方式配置cdh的本地yum源
瀏覽器訪問 http://192.168.127.121/cdh7.1.4 , 可以看到以下界面
1.7 分發到其他節點
在cdp01上配置好本地yum倉庫之后,將repo文件分發到其他節點
# 1. 切換到分發腳本的目錄
cd /soft/myshell/
# 2. 分發cm.repo
./batch_scp.sh node.list /etc/yum.repos.d/cm.repo /etc/yum.repos.d/
# 3. 分發cdh.repo
./batch_scp.sh node.list /etc/yum.repos.d/cdh.repo /etc/yum.repos.d/
分發后看其他節點能否訪問,看到以下界面說明們問題了:
2. 安裝cm server(cdp01)
在cdp01上安裝cloudera-scm-server.service
yum install cloudera-manager-server -y
# 安裝完后可以查看服務狀態
systemctl status cloudera-scm-server
3. 初始化mysql
配置好cm之后,進行初始化cm元數據庫
cd /opt/cloudera/cm/schema/
# 我這里直接用root用戶進行數據庫初始化,也可以用前面創建的cm用戶
./scm_prepare_database.sh mysql -h 192.168.127.188 cdp7cm root root
注意:
在c7中,不需要提前創建cm數據庫,我這里提前創建之后在初始化時報錯了,說數據庫已存在,根據提示刪掉對應數據庫后初始化成功.
初始化數據庫時需要注意,本次mysql不在集群主機內部,如果是在本機的mysql,則可以不用指定-h參數,默認就是localhost,后面的--scm-host參數是指定cmserver所在的主機
執行上面命令后,如果出現以下內容,即說明初始化成功
進行到這一步之后,我這里拍了快照,因為c7沒有免費版本,只有60天試用版的,為了以后試用過期后能迅速搭建cdp集群,所以拍攝了快照,重新搭建時,恢復快照,刪除數據庫,並重新初始化cm數據庫即可
五. 安裝CDH
1. 啟動cmserver,查看日志
啟動cm server
systemctl start cloudera-scm-server
systemctl status cloudera-scm-server
查看cm server日志
tail -100f /var/log/cloudera-scm-server/cloudera-scm-server.log
看到以下內容說明cm server啟動成功:
2. 登陸cm界面
cm server啟動成功后就可以訪問cm界面了,地址是 http://cdp01:7180
輸入初始賬號密碼 admin/admin 即可登陸.
登陸后選擇試用版
3. 安裝agent
進入集群安裝歡迎界面,提示安裝kerberos,我們后面自己進行手動搭建,所以這里直接下一步
設置集群名稱,執行下一步
搜索主機,選中主機,執行下一步
選擇自定義存儲庫和parcel版本
在選擇parcel存儲庫時,可將默認的庫刪掉,並填上我們自己的庫,保存退出后,執行下一步
選擇手動管理jdk,執行下一步
輸入root用戶密碼,這里需要注意集群中的所有主機必須保證root用戶密碼都是一樣的,填好后,執行下一步
自動安裝 cm agent服務,安裝完成后執行下一步
可以點擊詳細信息查看agent安裝過程
agent安裝完成
4. 分發激活parcel安裝包
下面是下載,分發和激活parcel的過程,時間會有點長,可以去日志中看看是不是用的本地的倉庫進行下載的.
在cm server日志中可以看到是在我們配置的倉庫下載parcel包
完成激活后如下如所示:
檢查主機狀況
5. 安裝服務
選擇自定義安裝
我這里選擇了以下這些組件
設置數據庫
我這里就安裝一些常用組件以供自己在后面進行開發學習使用.
安裝過程在界面點一點就好了不做詳細說明,下面是我安裝好服務之后的集群狀態.
組件服務如下圖:
角色分配如下圖:
組件版本如下圖:
搭建完之后發現50g磁盤有點不夠用,建議可以分100g給/root目錄.至此集群安裝就以完成,后面再補充集群高可用配置,和集成kerberos認證的過程.