Version: v0.1
Last Update: July/23/2021
Keywords:CDH,Hadoop,Big Data Platform,Hyper-V,Virtual Machine
Abstract:
因想要學習大數據各種相關組件和技術,而自家有臺臺式機可以折騰,購買所需配置的云服務器又太貴,故準備自行搭建CDH集群。因有Win10專業版,因此嘗鮮玩玩Hyper-V。整體思路如下:規劃好整個集群的數量、配置、角色,準備好所有軟件包;先配置一臺虛擬機A,盡可能將所有公共的配置設置好,再依次復制出其余虛擬機。
文內全部使用經過驗證的PowerShell和Shell腳本進行配置,注釋豐富便于理解整體操作邏輯(和復制粘貼)。使用VMWare/VirtualBox/KVM等基本流程均相似。
0. 背景
- 因想要學習大數據各種相關組件和技術,而自家有臺臺式機可以折騰,購買所需配置的云服務器又太貴,故準備自行搭建CDH集群。
- 最初準備使用Ubuntu+VKVM,但臺式機家人共享,雙系統切換也很麻煩,故考慮在Win10一個平臺解決所有問題。
- 因有Win10專業版,VMWare Workstation要收費,VirtualBox是Oracle家的不喜歡,因此嘗鮮玩玩Hyper-V。
- 以Win10專業版21H1+Hyper-V為例,若使用MacOS/Linux+VMWare/VirtualBox/KVM,則需依據實際情況參考操作。
- Hyper-V需要在BIOS中開啟CPU虛擬化,具體操作略。
- 安裝過程盡可能參考Cloudera官方文檔,其余參考文章也都備注了來源。
整體思路如下:
- 規劃好整個集群的數量、配置、角色,準備好所有軟件包。
- 因臺式機單機資源有限,同時開啟多臺虛擬機比較費,故先配置一臺虛擬機A,盡可能將所有公共的配置設置好,再復制出其余虛擬機。
- 需要有一臺虛擬機B,作為CM Server和CDH私有倉庫服務器,用于安裝其余虛擬機所用的所有服務。其余所有虛擬機C的設置在安裝CDH前都是一樣的。
- 因此操作流程為:
- 配置A
- 由A生成B,配置B為CM Server和CDH私有倉庫服務器
- 由A生成C,配置C為CM Agent
- 由C生成DEFG等
- 配置DB
- 安裝CDH
文中操作說明:
- 文中敘述的可選操作或命令,如果是斜體的 可選:xxx 或在命令塊注釋內,是我在自己搭建的實際操作中沒有執行的,否則是執行了的。
- 操作涉及到Hosts/Hostname/IP/路徑/文件命名/參數名/參數值等,均以集群規劃部分的描述為示范。若使用不同的配置項,可將本文下載下來,查找替換成自己的配置再看更舒服。
- 使用命令行操作,不使用界面。其實若PowerShell,鼠標操作可能更簡單。
- PowerShell命令行,默認需要以管理員身份運行終端,且僅在Terminal/PowerShell中驗證過。
- Shell操作,默認需要sudo或以root用戶執行。
- 如果使用yum等命令反應遲緩,可以自行配置國內proxy源加速訪問。
- 涉及到vi修改文件,含義如下:
- 修改一行 (modify: from xxx to xxx)
- 添加一行 (append: xxx)
- 注釋一行 (comment: # xxx),也可以刪除該行
特別感謝參考文章:
1. 集群規劃
需要準備的軟件和版本。
- CDH:6.3.2
- OS:CentOS 7,參考-Cloudera Enterprise 6.3.x Supported Operating Systems
- DB:MySQL 5.7,參考-Database Requirements
- JDK:Oracle 1.8,參考-Java Requirements
1.1 硬件與角色規劃
參考-CDH Cluster Hosts and Role Assignments
依據官方的"20 Worker Hosts with High Availability"角色搭配建議和最低硬件要求,整理圖表如下。
其中"4c2g"代表官方建議4核CPU,2GB內存。因磁盤空間一般不是問題,故沒有列出。
星號*表示該角色沒有計入實際搭建和操作中,只是規劃在表格中。
"Final Config"是依據實際最終搭建完成后的運行情況,倒推出的最低配置,僅供參考。
如果宿主機內存只有16~32GB,可以使用"10 Worker Hosts without High Availability"搭配,且將DataNode放在所有VM上,三臺VM即可滿足,但實用性可能不足,即無法快樂的跑Job。
Service | Role | master01 | master02 | master03 | utility01 | gateway01 | node001 | node002 | node003 | Total |
---|---|---|---|---|---|---|---|---|---|---|
HDFS | NameNode | 4c2g | ||||||||
SecondaryNN | 4c2g | |||||||||
*JournalNode | 1c1g | 1c1g | 1c1g | |||||||
*ZKFC | + | + | ||||||||
DataNode | 4c4g | 4c4g | 4c4g | |||||||
YARN | ResourceManager | 1c6g | *1c6g | |||||||
JobHistoryServer | 1c1g | |||||||||
NodeManager | 8c1g | 8c1g | 8c1g | |||||||
ZK | ZooKeeper | 4c1g | 4c1g | 4c1g | ||||||
Hive | HiveServer2 | 4c4g | ||||||||
Metastore Server | 4c4g | |||||||||
Hue | Server&LB | 1c4g | ||||||||
CM | All Services | 4c12g | ||||||||
Oozie | Server | 1c1g | ||||||||
DB | MySQL | 2c4g | ||||||||
*Kafka | *Kafka | 2c4g | 2c4g | 2c4g | ||||||
*Spark | *History Server | 1c1g | ||||||||
*HBase | *Master | 4c4g | ||||||||
*Thrift Server | 2c1g | |||||||||
*Region Server | 4c8g | 4c8g | 4c8g | |||||||
Max CPU Cores | 4 | 4 | 4 | 4 | 4 | 8 | 8 | 8 | 44 | |
Total Memory | 11 | 4 | 2 | 20 | 8 | 5 | 5 | 5 | 60 | |
Final Config | 4c16g | 4c8g | 4c4g | 4c16g | 4c8g | 4c8g | 4c8g | 4c8g | 16c64g |
1.2 各VM的FQDN與IP規劃
IP Addr | FQDN | short name |
---|---|---|
10.10.64.11 | master01.cdh.lionxcat.com | m01 |
10.10.64.12 | master02.cdh.lionxcat.com | m02 |
10.10.64.13 | master03.cdh.lionxcat.com | m03 |
10.10.64.51 | utility01.cdh.lionxcat.com | ut01 |
10.10.64.71 | gateway01.cdh.lionxcat.com | gw01 |
10.10.64.101 | node001.cdh.lionxcat.com | n001 |
10.10.64.102 | node002.cdh.lionxcat.com | n002 |
10.10.64.103 | node003.cdh.lionxcat.com | n003 |
10.10.64.250 | centos7.cdh.lionxcat.com | *c7 |
c7是模板機,不是CDH集群中的成員,用于復制出其余所有VM。
2. 宿主機環境準備
2.1 配置Terminal/PowerShell環境
- 安裝Terminal和插件的方法略。
如果對某個PowerShell命令不熟悉,可以使用:
Get-Help New-VM -Online
- 可選,配置好hosts,方便宿主機訪問VM。
# 用管理員權限修改 C:\Windows\System32\drivers\etc\hosts
ipconfig /flushdns
2.2 安裝Hyper-V
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
# 或者可以使用DISM安裝
# dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart
# 需要重啟電腦
Restart-Computer
2.3 配置VM網絡
# 創建一個名稱為cdh-wmswitch的內部虛擬路由器
New-VMSwitch -Name cdh-vmswitch -SwitchType Internal
# 查詢出剛創建的cdh-wmswitch的ifIndex為60,依據實際情況更改
Get-NetAdapter
# 設置cdh-wmswitch的IP地址,將上一步查出的InterfaceIndex帶入參數
New-NetIPAddress -IPAddress 10.10.64.1 -PrefixLength 24 -InterfaceIndex 60
# 設置cdh-wmswitch使用NAT獲得物理機的互聯網訪問,此操作只能使用命令行
New-NetNat -Name cdh-vmnat -InternalIPInterfaceAddressPrefix 10.10.64.0/24
2.4 創建CentOS VM
參考-Create a Virtual Machine with PowerShell
下載CentOS 7,可下個Everything版本留著玩。
以下假定文件路徑為“$InstallMedia”所示。
# Set VM Name, Switch Name, and Installation Media Path.
$VMName = 'c7'
$Switch = 'cdh-vmswitch'
$BasePath = 'D:\VirtualMachines\CDH-Cluster'
$InstallMedia = 'D:\CentOS-7-x86_64-Everything-2009.iso'
# 創建VM,可自行設置啟動內存大小
# 硬盤空間可以大些,因為會動態伸縮不會占用過多宿主機資源
# CentOS必須使用1代Hyper-VM
$VM = @{
Name = $VMName
MemoryStartupBytes = 4GB
SwitchName = $Switch
NewVHDPath = "$BasePath\$VMName\$VMName.vhdx"
NewVHDSizeBytes = 64GB
Path = $BasePath
Generation = 1
}
New-VM @VM
# 設置CPU數量,可選,默認1core
Set-VMProcessor $VMName -Count 2
# 默認情況下如上VM會配備好一個DVD并默認從DVD啟動,否則可以執行如下命令創建DVD:
# Add-VMScsiController -VMName $VMName
# Add-VMDvdDrive -VMName $VMName -ControllerNumber 1 -ControllerLocation 0 -Path $InstallMedia
# 加載CentOS7鏡像并設置啟動順序
$DVDDrive = Get-VMDvdDrive $VMName
Set-VMDvdDrive $VMName -Path $InstallMedia
# 默認情況下1代VM創建好后,啟動順序即如此,不用修改
# Set-VMBios $VMName -StartupOrder @("CD", "IDE", "LegacyNetworkAdapter", "Floppy")
2.5 安裝CentOS
2.5.1 安裝前
開啟VM,并安裝系統。
$VMName = 'c7'
Start-VM $VMName
# 連接上VM進行OS安裝
VMConnect localhost $VMName
2.5.2 安裝中
安裝注意事項:
- 可選,在選擇"Install CentOS7"前啟用強制GPT分區,方便今后掛載大于2TB磁盤和磁盤動態伸縮。
按TAB鍵,在最下方參數后面加上"inst.gpt",即改成:"vmlinuz ... quiet inst.gpt",回車。 - 可選,設置時區為Shanghai。
- 可選,Keyboard layout自行配置。
- 可選,添加簡體中文語言支持。
- SOFTWARE SELECTION選取Base Environment:Compute Node(計算節點)。
- 若手動磁盤分區,需添加一個容量為2M的"biosboot"分區放置GPT。
- 如果宿主機內存不夠大,最好為CentOS分配夠大的Swap分區,例如8GB以上,否則后面服務起不來一切白費。
- 可選,關閉KDUMP。
- 因為生成VM時配置好了虛擬路由器,可以在安裝時直接設置好IP,方便安裝完成后ssh上VM。
- 靜態(Manual)IPv4;
- 添加IP:10.10.64.250;
- 掩碼:255.255.255.0;
- 網關:10.10.64.1;
- DNS:223.5.5.5,8.8.8.8;
- 開機啟用(Automatic connect to ...)。
- 可選,設置好Hostname:centos7.cdh.lionxcat.com。
- 可選,創建新用戶時勾上"將此用戶設置為管理員",也可今后自行添加到sudoers/wheel組。
2.5.3 安裝后
使用VMConnect可以不用IP連接VM,但內置的終端超難用。使用自己喜歡的終端ssh登錄VM操作比較方便。
若安裝時不配置IP,安裝后可在Hyper-V中選中該VM,最下網絡Tab里找到Hyper-V自動提供的IP(v4或v6)地址。若安裝時配置了IP,則嘗試登錄VM并判斷網絡是否連通。以下假定在Win10中配置了hosts,若沒配置可用IP。
ssh root@c7
ifconfig
ping www.xxx.com
- 若安裝中沒有配置IP,則先登錄VM并設置IP。
# 在宿主機中執行
$VMName = 'c7'
Start-VM $VMName
VMConnect localhost $VMName
# 在c7中執行
ifconfig
vi /etc/sysconfig/network-scripts/ifcfg-eth0 # eth0是具體VM網卡
# modify: BOOTPROTO="static"
# modify: ONBOOT="yes"
# append: IPADDR=10.10.64.250 # 今后需要替換成各VM自己的IP地址
# append: NETMASK=255.255.255.0
# append: GATEWAY=10.10.64.1
# append: DNS1=223.5.5.5
# append: DNS2=8.8.8.8
systemctl restart network
ping www.xxx.com
- 可選,如果發現有ssh時登錄反應慢的情況,可修改關閉SSH使用DNS查詢。
vi /etc/ssh/sshd_config
# modify: from "#UseDNS yes" to "UseDNS no"
systemctl restart sshd
- 補充說明。
- 新裝的這臺VM(以下簡稱作c7),將作為基板系統,用于生成所有集群VM。
- 后續配置中,可隨時為VM做快照(Snapshot/Checkpoint),方便備份、恢復、復制VM。
- 高階玩法,可使用Ansible等批量配置,或制作好CDH安裝鏡像(參考Creating Virtual Images of Cluster Hosts和Creating a CDH Cluster Using a Cloudera Manager Template)。
3. 通用VM的OS環境準備
以下內容在c7上執行,是所有VM都需要的基礎配置。
3.1 關閉防火墻
systemctl stop firewalld
systemctl disable firewalld
# 驗證一下
systemctl status firewalld
3.2 關閉SELinux
vi /etc/selinux/config
# modify: from "SELINUX=enforcing" to "SELINUX=disabled"
setenforce 0
reboot
# 驗證一下
getenforce
3.3 系統配置參數
vi /etc/security/limits.d/20-nproc.conf # 具體文件名中數字可能不是20
# comment: # * soft nproc 4096
vi /etc/security/limits.conf
# append: * soft nproc 65536
參考-Optimizing Performance in CDH
# Disable the tuned Service
systemctl start tuned
tuned-adm off
# tuned-adm list
systemctl stop tuned
systemctl disable tuned
# Disabling Transparent Hugepages (THP)
vi /etc/rc.d/rc.local
# append:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# to ensure that this script will be executed during boot
chmod +x /etc/rc.d/rc.local
# 在啟動參數GRUB_CMDLINE_LINUX中添加"transparent_hugepage=never"
vi /etc/default/grub
# modify: GRUB_CMDLINE_LINUX="transparent_hugepage=never ...省略"
grub2-mkconfig -o /boot/grub2/grub.cfg
# Setting the vm.swappiness Linux Kernel Parameter
sysctl -w vm.swappiness=1
# to ensure that this script will be executed during boot
vim /etc/sysctl.conf
# append: vm.swappiness=1
最后最好驗證是否重啟后生效。若有沒生效的參數,檢查配置文件拼寫是否正確。
reboot
ssh root@c7
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
cat /proc/sys/vm/swappiness
3.4 配置hostname
hostnamectl set-hostname centos7.cdh.lionxcat.com
vi /etc/sysconfig/network
# append:
NETWORKING=YES
HOSTNAME=centos7.cdh.lionxcat.com
systemctl restart network
# 檢查一下
uname -a
hostname
# host -v -t A $(hostname)
3.5 配置hosts
vi /etc/hosts
# 注意:一定要把FQDN放在緊跟IP后
# append:
10.10.64.11 master01.cdh.lionxcat.com m01
10.10.64.12 master02.cdh.lionxcat.com m02
10.10.64.13 master03.cdh.lionxcat.com m03
10.10.64.51 utility01.cdh.lionxcat.com ut01
10.10.64.71 gateway01.cdh.lionxcat.com gw01
10.10.64.101 node001.cdh.lionxcat.com n001
10.10.64.102 node002.cdh.lionxcat.com n002
10.10.64.103 node003.cdh.lionxcat.com n003
10.10.64.250 centos7.cdh.lionxcat.com c7
3.6 配置網絡時間同步
CDH建議刪除chrony用ntpd代替,也可以配置CDH使用chrony。以下為ntpd用法,chrony可自行配置。
yum list installed chrony
# 如果有安裝chrony則刪除之,換成ntp
systemctl stop chronyd
yum remove -y chrony
yum install -y ntp
# 同步一次
ntpdate ntp.aliyun.com
# 啟動服務
systemctl start ntpd
systemctl enable ntpd
# 同步硬件CMOS時鐘
hwclock --systohc
4. CM安裝
4.1 創建ut01的VM
在通用VM配置完成后,將c7關機并復制一份命名為ut01,用于承載CDH私有倉庫(以及其他服務,參考角色規劃部分)。
# c7中執行
poweroff
- 采用復制VHD的方式,復制c7的磁盤,使用該磁盤文件生成ut01(Hyper-V會生成新MAC地址)。
# 在宿主機中執行
# VM基礎配置
$BasePath = 'D:\VirtualMachines\CDH-Cluster'
$Switch = 'cdh-vmswitch'
# 復制源
$SourceVM = 'c7'
$SourceVHD = "$BasePath\$SourceVM\$SourceVM.vhdx"
# 復制目的地
$DestVM = 'ut01'
$DestPath = "$BasePath\$DestVM"
$DestVHD = "$DestPath\$DestVM.vhdx"
# 刪除c7所有快照以自動合并磁盤文件
Remove-VMSnapshot $SourceVM
# 將文件拷貝到新目錄
New-Item $DestPath -ItemType Directory
Copy-Item $SourceVHD $DestVHD
# 使用復制后的文件創建新VM,注意自行設置啟動內存大小
$NewVM = @{
Name = $DestVM
MemoryStartupBytes = 16GB
SwitchName = $Switch
VHDPath = $DestVHD
Path = $BasePath
Generation = 1
}
New-VM @NewVM
# 可選,設置CPU
Set-VMProcessor $DestVM -Count 8
- 啟動并配置IP和Hostname。
# 宿主機上執行
$VMName = 'ut01'
Start-VM $VMName
VMConnect localhost $VMName
# ut01上執行
vi /etc/sysconfig/network-scripts/ifcfg-eth0 # eth0是具VM網卡
# append: IPADDR=10.10.64.51
hostnamectl set-hostname utility01.cdh.lionxcat.com
vi /etc/sysconfig/network
# modify: HOSTNAME=utility01.cdh.lionxcat.com
systemctl restart network
# 外網是否可達
ping www.xxx.com
# 內網c7是否可達,需要先啟動c7
ping c7
4.2 開啟NTP時間同步服務
可選:如果非生產環境,所以VM都與公網同步也可以,只不過今后需要關掉CM的煩人的警告。
將ut01作為授時服務器,其余VM均與ut01同步時間。
以下內容在ut01上操作,配置ut01成為授時服務器。
vi /etc/ntp.conf
# 開放本機時間同步服務給指定網段
# append:
# restrict 10.100.64.0 mask 255.255.255.0 nomodify notrap
#
# 可選:更換時間服務器
# comment:
# 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
# append:
# server ntp.aliyun.com prefer
#
# 本機ntpd與本機CMOS同步
# append:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
systemctl restart ntpd
以下內容在c7上操作,配置c7從ut01獲取時間同步。
vi /etc/ntp.conf
# comment:
# 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
# append:
# server ut01 prefer
# 立即同步一次
systemctl stop ntpd
ntpdate ut01
systemctl start ntpd
ntpq -p
4.3 準備本地私有CDH倉庫
以下內容在ut01上執行,配置用于安裝CM和CDH的私有Repo。
參考-Configuring a Local Package Repository
- 安裝HTTP服務
# 以下操作在ut01上執行
yum install -y httpd
systemctl start httpd
systemctl enable httpd
# 創建cm6目錄
mkdir -p /var/www/html/cloudera-repos/cm6
# 創建cdh6目錄
mkdir -p /var/www/html/cloudera-repos/cdh6
- 將CM和CDH包拷貝到ut01上
# 以下操作在宿主機上執行
# 拷貝CM包
scp "D:\cm6.3.1-redhat7.tar.gz" root@ut01:/var/www/html/cloudera-repos/cm6
# 拷貝CDH包
scp "D:\cdh6\*" root@ut01:/var/www/html/cloudera-repos/cdh6
- 解壓縮文件
# 以下操作在ut01上執行
tar xvfz cm6.3.1-redhat7.tar.gz -C /var/www/html/cloudera-repos/cm6 --strip-components=1
# 設置目錄權限
chmod -R ugo+rX /var/www/html/cloudera-repos/cm6
chmod -R ugo+rX /var/www/html/cloudera-repos/cdh6
# 在宿主機瀏覽器中檢查文件 http://ut01/cloudera-repos/
4.4 在VM上配置添加使用私有倉庫
以下內容在ut01上執行,添加本機私有Repo。
vi /etc/yum.repos.d/cloudera-repo.repo
# append:
[cloudera-repo]
name=cloudera-repo
baseurl=http://utility01.cdh.lionxcat.com/cloudera-repos/cm6
enabled=1
gpgcheck=0
# 確認配置正確
yum repolist
# 分發到c7
scp /etc/yum.repos.d/cloudera-repo.repo root@c7:/etc/yum.repos.d/
4.5 安裝依賴軟件包
以下內容在c7和ut01上都執行,安裝必備的軟件包。
4.5.1 檢查Python
# 若CentOS選擇計算節點安裝則默認都滿足
# CentOS7原裝了python 2.7.*
python --version
# 其他軟件包缺失參考文章自行安裝
4.5.2 安裝JDK
推薦使用CM包里的JDK版本安裝,或者自行安裝Oracle JDK或OpenJDK。
- 安裝CM包里的JDK版本
yum install -y oracle-j2sdk1.8
vi /etc/profile
# append:
JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 使之生效并測試
source /etc/profile
java -version
- 可選:自行安裝Oracle JDK
# 若centos自帶OpenJDK,刪除之
# java -version
# rpm -qa | grep java
# rpm -e --nodeps java-1.8.0-openjdk-...
# 下載JDK
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/java/
vi /etc/profile
# append:
JAVA_HOME=/usr/java/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 使之生效并測試
source /etc/profile
java -version
4.5.3 安裝MySQL-JDBC
參考-Installing the MySQL JDBC Driver
若使用PG、MariaDB等其他DB自行參考文章安裝。
wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.49.tar.gz
tar zxvf mysql-connector-java-5.1.49.tar.gz
# 最好放置到CM默認的目錄下
mkdir -p /usr/share/java
# 最好更改為CM默認的文件名
cp mysql-connector-java-5.1.49/mysql-connector-java-5.1.49-bin.jar /usr/share/java/mysql-connector-java.jar
4.6 安裝CM軟件包
在ut01上執行,安裝Cloudera Manager Server,Daemons,Agent。
yum install -y cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
以下操作在c7上執行,安裝CM Daemons & Agent。
可選:若現在不安裝,今后讓CMServer自動安裝也行。
yum install -y cloudera-manager-daemons cloudera-manager-agent
# 修改agent配置文件,指向CM Server
vi /etc/cloudera-scm-agent/config.ini
# modify:
# server_host=utility01.cdh.lionxcat.com
4.7 數據庫準備
以下操作在ut01上執行,若MySQL使用云SaaS服務或規劃在其他VM,依據實際情況操作。
參考-Install and Configure MySQL for Cloudera Software
4.7.1 安裝MySQL
- 可以直接從MySQL官方下載,300~500MB,需要網速夠快
# 下載官方yum源
wget https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
# 安裝yum源
yum localinstall -y mysql80-community-release-el7-3.noarch.rpm
# 更換mysql8.0為mysql5.7
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
# 查看更換成功否
yum repolist all | grep mysql | grep enabled
# 安裝mysql
yum install -y mysql-community-server
# 修改mysql配置文件,參考官方文檔配置即可,非生產環境非必須,略
# vi /etc/my.cnf
# 啟動mysql
systemctl start mysqld
systemctl enable mysqld
# 找到初始密碼
grep 'temporary password' /var/log/mysqld.log
# 執行腳本重置
/usr/bin/mysql_secure_installation
# 設置一個帶有大小寫字母數字符號的root密碼(可能需要輸入4遍)然后一路y下去即可
- 可選:可提前下載好包,直接安裝
# 下載包
wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar
# 解壓縮
tar xvf mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar
# 安裝
rpm -ivh mysql-community-common-*.rpm mysql-community-libs-*.rpm mysql-community-server-*.rpm mysql-community-client-*.rpm
# 配置與啟動等后續步驟同上
4.7.2 創建各服務需要的DB
官方文檔中有描述所有需要預先創建的DB。utf8編碼是必須的。
雖然官方允許配置各服務使用任意DB名和User名,但遵守官方默認規范也不復雜,若圖方便可使用相同User和Password。
新建User密碼均需要滿足密碼復雜度要求。也可自行修改配置文件降低要求。
# 在ut01中執行
mysql -uroot -p
/* 在MySQL CLI中執行 */
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE USER 'scm'@'%' IDENTIFIED BY 'scm_Passw0rd';
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm_Passw0rd';
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE USER 'amon'@'%' IDENTIFIED BY 'amon_Passw0rd';
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'amon_Passw0rd';
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE USER 'hue'@'%' IDENTIFIED BY 'hue_Passw0rd';
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'hue_Passw0rd';
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive_Passw0rd';
GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'hive_Passw0rd';
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE USER 'oozie'@'%' IDENTIFIED BY 'oozie_Passw0rd';
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie_Passw0rd';
FLUSH PRIVILEGES;
4.7.3 生成CMServer的DB配置
參考-Set up the Cloudera Manager Database
# 參數含義:<databaseType> <databaseName> <databaseUser> <password>
# 依據實際情況修改參數
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm scm_Passw0rd
4.8 啟動CMServer
以下操作在ut01上執行。
systemctl start cloudera-scm-server
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
systemctl start cloudera-scm-agent
tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
systemctl enable cloudera-scm-server
systemctl enable cloudera-scm-agent
以下操作在c7上執行。
systemctl start cloudera-scm-agent
systemctl enable cloudera-scm-agent
在宿主機訪問http://ut01:7180/,用戶名/密碼:admin。
如果ut01和c7上的配置均成功,就可以在配置頁面看到兩臺VM。
注意:
因后續操作將復制c7生成其余VM,若在c7上啟動過cloudera-scm-agent,則必須在復制c7前刪除agent生成的uuid,agent會在下次啟動時重新生成。若不重新生成uuid,各VM的uuid重復將導致今后server無法識別各agent。
若沒有在c7上啟動agent則無此需要。
systemctl stop cloudera-scm-agent
rm -f /var/lib/cloudera-scm-agent/uuid
# 不能再啟動Agent,讓新的VM各自啟動各自的以生成不同uuid。
5. 創建CDH集群
操作與創建ut01的VM類似,只不過這次生成的不是ut01,而是其余所有VM。
5.1 備份VM
先將兩臺VM關機。并做些備份操作,以免后面操作出錯,或方便配置第二套集群。
# 在宿主機上執行
# 刪除所有快照以合并磁盤文件
Remove-VMSnapshot c7
Remove-VMSnapshot ut01
# 因為c7本身就是CM-Agent所在VM的備份,因此只需要再備份ut01即可
$BasePath = 'D:\VirtualMachines\CDH-Cluster'
New-Item "$BasePath\backup" -ItemType Directory
Copy-Item "$BasePath\ut01\ut01.vhdx" "$BasePath\backup"
5.2 生成其余VM
下面采用復制VHD的方式,復制c7的VHD用于創建其余VM。
# VM基礎配置
$BasePath = 'D:\VirtualMachines\CDH-Cluster'
$Switch = 'cdh-vmswitch'
# 復制源
$SourceVM = 'c7'
$SourceVHD = "$BasePath\$SourceVM\$SourceVM.vhdx"
# 復制目的地VM名集合
$DestVMColl = ('m01', 'm02', 'm03', 'n001', 'n002', 'n003', 'gw01')
# 刪除c7所有快照以合并磁盤文件
Remove-VMSnapshot $SourceVM
# 循環創建所有VM
ForEach ($DestVM in $DestVMColl) {
$DestPath = "$BasePath\$DestVM"
$DestVHD = "$DestPath\$DestVM.vhdx"
# 將文件拷貝到新目錄
New-Item $DestPath -ItemType Directory
Copy-Item $SourceVHD $DestVHD
# 創建新VM使用復制后的文件
# 注意自行設定啟動內存大小
$NewVM = @{
Name = $DestVM
MemoryStartupBytes = 16GB
SwitchName = $Switch
VHDPath = $DestVHD
Path = $BasePath
Generation = 1
}
New-VM @NewVM
# 設置CPU
Set-VMProcessor $DestVM -Count 4
}
# 確認創建無誤,可以繼續配置
# 可選:創建一個VMGroup把這些VM都加進去
$GroupName = 'lionxcat-cdh'
New-VMGroup -Name $GroupName -GroupType VMCollectionType
$DestVMColl += (,'ut01')
ForEach ($DestVM in $DestVMColl) {
$VM = Get-VM $DestVM
Add-VMGroupMember $GroupName $VM
# 慎重批量啟動VM
# Start-VM @VM
}
注意:
- 建議一個一個手工啟動VM并執行后續配置,以免宿主機內存不夠用最后有些VM啟動不起來。
- Hyper-V會在VM啟動時為其分配<MemoryStartupBytes>大小的內存,在VM運行3~4分鐘后動態內存收縮,此時宿主機內存占用下降可再啟新VM。
- 如果最終還是無法啟動所有VM,要么調小啟動內存(可能導致今后有的組件內存不足無法啟動),要么買內存條插上。
- 到此步驟為止,8臺VM運行時內存總和約不到17GB。
- c7的作用就到此結束了,可以和ut01的備份VHD一起放置到其他地方備份。
5.3 配置其余VM
以下操作在新生成的VM上執行。
啟動并配置IP和Hostname。啟動VM命令略。
vi /etc/sysconfig/network-scripts/ifcfg-eth0 # eth0是具體VM網卡
# append: IPADDR=10.10.64.xxx
hostnamectl set-hostname xxx.cdh.lionxcat.com
vi /etc/sysconfig/network
# modify: HOSTNAME=xxx.cdh.lionxcat.com
systemctl restart network
# 重啟agent
systemctl restart cloudera-scm-agent
# 這里再提醒一遍,若復制VM前啟動過scm-agent,需要刪除
# /var/lib/cloudera-scm-agent/uuid,并重啟agent才能順利被scm-server識別
5.4 為NameNode和DataNode的VM創建并掛載磁盤VHD
可選:為NN和DN單獨掛載可擴展的虛擬磁盤,方便今后隨時增大磁盤空間或挪動磁盤文件到更大的硬盤上。
若不放在可擴展VHD上,今后空間不夠用了再擴充比較麻煩。
新掛載的VHD也創建成LVM,方便今后在線擴容。
創建并向VM添加動態VHD。
# 在宿主機上執行
$BasePath = 'D:\VirtualMachines\CDH-Cluster'
$VMColl = ('m01', 'm02', 'm03', 'n001', 'n002', 'n003')
ForEach ($VM in $VMColl) {
$NewVHD = "$BasePath\$VM\$VM-data.vhdx"
New-VHD -Path $NewVHD -Dynamic -SizeBytes 500GB
# 在VM啟動狀態下可執行,掛載SCSI設備,若SCSI-Controller(0,0)被占用,自行調整位置
Add-VMHardDiskDrive $VM -Path $NewVHD -ControllerNumber 0 -ControllerLocation 0 -ControllerType SCSI
}
在后面安裝CDH時,DN和NN的數據目錄(dfs.datanode.data.dir和dfs.namenode.name.dir)默認在/dfs下。
若更換其它位置,則下面命令里也應該掛載到對應目錄下。
以下操作在m0[1-3]和n00[1-3]上執行。
在VM中掛載硬盤到目錄/dfs。
# 查看新掛載的VHD是否成功,正常情況應被掛載到設備sdb
fdisk -l
# 從物理磁盤創建Physical Volume
pvcreate /dev/sdb
pvs
# 從PV創建Volume Group,名稱為vg-data
vgcreate vg-data /dev/sdb
vgs
# 從VG創建Logical Volume,名稱為lv-data
lvcreate -l 100%FREE -n lv-data vg-data
lvs
# 格式化成xfs,注意路徑和名稱相對應
mkfs.xfs /dev/vg-data/lv-data
# 掛載到/dfs,若非該目錄則需調整
mkdir /dfs
mount /dev/vg-data/lv-data /dfs
mount -l
# 設置開機自動掛載,注意,一定要添加在文件末尾
vi /etc/fstab
# append:
/dev/vg-data/lv-data /dfs xfs defaults 0 0
# 檢查一下
vgdisplay vg-data
5.5 安裝CDH
如果上述配置無誤,這是最簡單的一步,很快就能完成。
在宿主機訪問http://ut01:7180/,用戶名/密碼:admin。
安裝注意事項:
- 若在"Specify Hosts"中沒有看到“當前管理的主機”中出現某臺VM,請檢查該VM的IP/Hostname配置,并查看scm-server的日志排查問題。
- 在“選擇存儲庫--使用Parcel(建議)--更多選項”中,添加使用自建的私有倉庫,地址為:http://utility01.cdh.lionxcat.com/cloudera-repos/cdh6/ 。然后會在“CDH版本”里出現"CDH-6.3.2-xxx"。
- 在"Inspect Cluster"中,運行兩項測試,若無問題,則說明上述配置一切正常。
- 選擇基本安裝"Essentials",以免安裝服務太多了內存不足啟動不起來。
- 按照規劃選取各Host對應的Service,輸入創建好的DB名稱、用戶、密碼,最后執行命令。
- 若有服務啟動失敗,查看是否內存不足導致。如果內存不足,可以:
- 關停一些暫時不需要的服務,如Oozie,HUE,甚至把CM都關了只用Hadoop
- 修改服務配置中的Java Heap大小
- 增大CentOS的Swap
- 去買內存條。
本人情況,將Hive JVM堆棧默認配置為從4G降為2G,客戶端從2G降為1G后,所有服務均順利啟動。
啟動后,各服務器占用宿主機的內存使用情況如下(因角色放置不同,數據量不同,運行時長不同,下面數據供參考)。
FQDN / Contents | short name | Mem Used | Total Disk |
---|---|---|---|
master01.cdh.lionxcat.com | m01 | 9.2GB | 10.4GB |
master02.cdh.lionxcat.com | m02 | 5.9GB | 10.4GB |
master03.cdh.lionxcat.com | m03 | 3.5GB | 9.4GB |
utility01.cdh.lionxcat.com | ut01 | 12.2GB | 16.8GB |
gateway01.cdh.lionxcat.com | gw01 | 6.3GB | 9.4GB |
node001.cdh.lionxcat.com | n001 | 5.0GB | 11.8GB |
node002.cdh.lionxcat.com | n002 | 5.0GB | 11.8GB |
node003.cdh.lionxcat.com | n003 | 5.0GB | 11.8GB |
c7 & ut01 backup files | - | - | 14.7GB |
CDH/CentOS/MySQL/JDK | - | - | 13.5GB |
TOTAL | 8 hosts | 53GB | 120GB |
5.6 安裝后續
列舉一些可以拿這套集群玩點什么的想法。
- 嘗試自己寫MR,爬點數據放入集群內玩,用eCharts做些BI等等。
- 優化各組件的參數和JVM配置,升高或降低。
- 裝Spark,HBase,Hive on Spark等等,但需要更多內存。
- 啟用HDFS的HA,Yarn和Hive的負載均衡等等,只為理解架構,非生產環境并無實際意義。
- 用HBase做索引,建立自己的照片和媒體庫索引,用Hive+Hue做可視化。
- Flink,Hudi ...
6. 回顧
整體花費一周時間,中間臨時買了兩根內存條。
前期規劃和查找各類文章花費50%,學習Hyper-V和PowerShell花費30%,安裝配置花費15%,整理文檔花費15%。
中間重裝了兩次,只要配置好了c7和ut01兩臺VM,后面的操作也就是十幾分鐘搞完。拋開Hyper-V其實很簡單。
流程還有可優化的地方,但也沒必要浪費時間了。
內存越多越好,個人認為32GB是最低配,但可能需要花費精力折騰并不劃算。64GB基本夠用,畢竟自己玩不會太多數據文件。我選擇了128GB。
后面會將HDP的搭建也整理個文章出來,再往后有精力再嘗試搭建Apache原生。
如有勘誤、改進意見或自己搭建過程中的疑問,歡迎聯系lionxcat或留言。
轉載請注明原文https://github.com/lionxcat/articles-it/blob/main/cdh-setup-guide-using-hyperv-by-yourself.md。