cdh 架構圖
環境準備
根據官方文檔選定linux系統版本所支持的CDH 版本 cloudera-manager-6.0.1
查看當前機器的信息
查看linux版本,例如:
cat /etc/redhat-release
centos Linux release 7.5.1804
查看機器型號
dmesg | grep -i virtual,例如查詢到是kvm 虛擬機
查看cpu和內存使用情況Top
磁盤使用率 df -h
機器分配
根據機器配置情況,支持安裝CDH6.0 集群
創建yum源
下載yum源
wget https://archive.cloudera.com/cm6/6.0.0/redhat7/yum/cloudera-manager.repo -P /etc/yum.repos.d/
如下圖,可以選擇指定版本的yum源
導入GPG key
rpm --import https://archive.cloudera.com/cm6/6.0.0/redhat7/yum/RPM-GPG-KEY-cloudera
修改yum 緩存配置
vim /etc/yum.conf
設置keepcache=1,表示rpm 包在本地長期保存,這樣的好處是一個節點下載好了后,其他節點可以從此節點上拷貝,不用重復下載。
修改hosts
修改每臺機器的hostname
cat /etc/hostname查看hostname
hostname master臨時修改hostname
vim /etc/hostname永久修改hostname
修改所有機器的host(所有機器執行)
所有機器的hostname中都需要設置到每臺機器的host中
如果一臺機器的ip 有多個host ,host 需放到一行,否則后面搭建集群前的環境校驗會異常。如
192.168.52.52master name1 name2 name3
關閉防火墻
systemctl status firewalld查看防火墻狀態
systemctl stop firewalld關閉防火墻(所有機器執行)
systemctl disable firewalld禁止開機啟動防火墻(所有機器執行)
配置ssh 免密登錄
a. 生成秘鑰:ssh-keygen -t rsa
b. 復制公鑰到遠程機:ssh-keygen -t rsa
注意:
某些集群組件中的主節點需要遠程維護數據節點的狀態,因此需要遠程免密登錄。比如,啟動 Hadoop 集群的start-all.sh ,過程中會ssh 到datanode 啟動相應的服務。由于有的機器上可能不只是安裝數據(計算)角色,可能也會存在master 服務調用角色,因此為避免麻煩集群機器之間都設置成免密登錄(對于主機少的情況可以這樣做,至于主機多的情況需要根據需求進行免密配置)。
在所有主機上以此執行a—>b 步驟
安裝NTP時間同步器(所有機器執行)
yum install -y ntp
修改配置文件
vim /etc/ntp.conf
將此處的server 設置主節點的地址
例如:
server master iburst
注意:
實際操作時,設置成server master iburst 后CM minitor service monitor 一直提示NTP無法連接遠程服務器,好吧索性不改了,就使用默認的0.centos.pool.ntp.org
安裝nfs網絡文件系統
Nfs文件系統相當于機器之間的共享目錄,避免機器之間通過scp 轉移文件繁瑣。
比如,后續會用到的MySQL-connector-JAVA.jar 共享文件就可以放在這里。
服務端:(任意一臺機器)
安裝nfs
yum -y install nfs-utils rpcbind
創建共享目錄,并且授權:
mkdir /opt/share
chmod -R 666 /opt/share
修改配置:
/opt/share *(rw,no_root_squash,no_all_squash,sync)
exportfs -r 使配置生效
啟動服務:
systemctl start nfs
systemctl start rpcbind
客戶端
安裝nfs:
yum -y install nfs-utils rpcbind
創建掛載點:
mkdir /opt/share
掛載:
showmount -e master//查看nfs文件系統服務端的掛路徑
mount -t nfs master:/opt/share /opt/share -o proto=tcp -o nolock(掛載)
安裝jdk(所有機器執行)
CDH 安裝過程中檢測系統環境時默認會讀取/usr/java下的jdk路徑,也可以通過CDM 在主機下配置
mkdir -p /usr/java
jdk-8u141-linux-x64.rpm上傳
rpm -ivh jdk-8u141-linux-x64.rpm安裝
vim /etc/profile設置環境變量
source /etc/profile
修改swapiness 和huge page(所有機器執行)
huge page
Hadoop是個高密集型內存運算系統,Cloudera官方關閉THP
參考文檔:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
swAppiness
swappiness的值的大小對如何使用swap分區是有著很大的聯系的。swappiness=0的時候表示最大限度使用物理內存,然后才是 swap空間,swappiness=100的時候表示積極的使用swap分區,并且把內存上的數據及時的搬運到swap空間里面。兩個極端,對于ubuntu的默認設置,這個值等于60,建議修改為10
cat /proc/sys/vm/swappiness查看swapiness
sysctl vm.swappiness=10臨時設置
vim /etc/sysctl.conf永久修改,重啟后生效
vm.swappiness=10
安裝mysql(一般主節點或非集群節點上安裝)
安裝mysql
Cloudera-Manager安裝cdh時,通默認使用內嵌的PostgreSQL數據庫,更多應用場景下使用的是mysql
rpm -qa|grep mysql
yum install mysql
systemctl start mysql啟動
systemctl enable mysql設為開機啟動
創建scm、hive、hue、oozie、monitor數據庫(集群搭建前期只要創建cloudera manager基礎數據庫scm就行,也可后期根據需要安裝的插件再創建對應的元數據庫)
CREATE DATABASE `scm` /*!40100 DEFAULT CHARACTER SET utf8 */
CREATE DATABASE `hue` /*!40100 DEFAULT CHARACTER SET utf8 */
CREATE DATABASE `oozie` /*!40100 DEFAULT CHARACTER SET utf8 */
CREATE DATABASE `monitor` /*!40100 DEFAULT CHARACTER SET utf8 */
CREATE DATABASE `hive` /*!40100 DEFAULT CHARACTER SET utf8 */
下載mysql-connector-java.jar并拷貝到/usr/share/java 目錄(所有機器上執行)
創建用戶
create user scm@"%" identified by "scm"創建scm用戶
grant all on *.* to scm@"scm" identified by "scm"授權
flush privileges刷新權限
systemctl restart mysql重啟
安裝CM
主節點
yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
(當前機器上已經安裝,所以顯示的是installed)
===================== 等待安裝 ====================
其他節點
安裝完成后將
/var/cache/yum/x86_64/7/cloudera-manager/packages 下的緩存的daemons 和agent rpm 包拷貝到其他節點 /var/cache/yum/x86_64/7/cloudera-manager/packages
執行安裝(除主節點外所有機器)
yum install cloudera-manager-daemons cloudera-manager-agent
配置CM Server(除主節點外所有機器)
vim /etc/cloudera-scm-agent/config.ini
修改此處的server_host為CMmaster 地址
初始化CM配置
數據庫和CM在一臺機器上
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm scm
數據庫和CM不在一臺機器上
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h dbhost --scm-host master scm scm scm
(后面scm分別是數據庫名 用戶名 密碼)
初始化成功后如下圖(借網上截圖)
啟動CM server和CM agent
cloudera-scm-server
systemctl start cloudera-scm-server
查看啟動日志
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
CM 服務使用的是jetty 部署,看到日志正常jetty server 啟動成功表示server服務啟動ok
cloudera-scm-agent(注意主節點上也安裝了agent 所以也需要啟動)
systemctl start cloudera-scm-agent
服務啟動OK后可以登錄管理后臺賬戶/密碼:admin/admin
安裝CDH
安裝 進入CM 后臺后開始安裝集群
這里會檢測到每個agent 機器
此處CM server 會下載CDH parcel 包,并且分發到其他agent 節點并解壓安裝(借別人圖示例,實際上搭建的是3個節點)
注意:
將離線的parcels包、sha和torrent文件拷貝到parcel-repo 路徑下,重啟server
搭建集群
選擇安裝的服務,這里選擇自定義
分配角色
給組件分配對應的元數據庫
確認服務配置
啟動
角色分布概覽
問題
由于后臺進程是由supervisor 管理,當手動kill掉進程后,supervisor 會將其重啟。
例如,CDH 集群和CM 都停止服務后,9000 端口仍然會被占用,是因為supervisor 管理的進程沒有被kill,systemctl status supervisord
環境搭建結束
至此,CDH 集群搭建完成。集群中不只是hadoop 集群,還包含其他組件集群,例如hbase集群、spark 集群和其他客戶端組件,包括hive/impala/hue 等。
通過CM 管理的集群,CM service讓我們可以更加直觀的了解到個各個主機的運行狀況,以及各個組件的健康狀態,管理起來更加方便。
整個CDH 集群涉及到的內容知識很多且復雜,環境搭建好了接下來就是慢慢求索,不斷整個業務,不斷學習知識體系,不斷進步吧。






