在Win10中用Hyper-V虛擬機搭建CDH集群

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. 集群規劃

需要準備的軟件和版本。

1.1 硬件與角色規劃

參考-Hardware Requirements

參考-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網絡

參考-Set up a NAT network

參考-Hyper-V虛擬機配置內部網絡固定IP并連接外網

# 創建一個名稱為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

3. 通用VM的OS環境準備

以下內容在c7上執行,是所有VM都需要的基礎配置。

3.1 關閉防火墻

參考-Disabling the Firewall

systemctl stop firewalld
systemctl disable firewalld
# 驗證一下
systemctl status firewalld

3.2 關閉SELinux

參考-Setting SELinux mode

vi /etc/selinux/config
# modify: from "SELINUX=enforcing" to "SELINUX=disabled"

setenforce 0
reboot
# 驗證一下
getenforce

3.3 系統配置參數

參考-nproc Configuration

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

參考-Configure Network Names

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 配置網絡時間同步

參考-Enable an NTP Service

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

參考-Software Dependencies

# 若CentOS選擇計算節點安裝則默認都滿足
# CentOS7原裝了python 2.7.*
python --version
# 其他軟件包缺失參考文章自行安裝

4.5.2 安裝JDK

參考-Java Requirements

推薦使用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 Community Downloads

  • 可以直接從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,方便今后在線擴容。

參考centos7 xfs磁盤管理(格式化、在線擴容)

創建并向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。

安裝注意事項:

  1. 若在"Specify Hosts"中沒有看到“當前管理的主機”中出現某臺VM,請檢查該VM的IP/Hostname配置,并查看scm-server的日志排查問題。
  2. 在“選擇存儲庫--使用Parcel(建議)--更多選項”中,添加使用自建的私有倉庫,地址為:http://utility01.cdh.lionxcat.com/cloudera-repos/cdh6/ 。然后會在“CDH版本”里出現"CDH-6.3.2-xxx"。
  3. 在"Inspect Cluster"中,運行兩項測試,若無問題,則說明上述配置一切正常。
  4. 選擇基本安裝"Essentials",以免安裝服務太多了內存不足啟動不起來。
  5. 按照規劃選取各Host對應的Service,輸入創建好的DB名稱、用戶、密碼,最后執行命令。
  6. 若有服務啟動失敗,查看是否內存不足導致。如果內存不足,可以:
    • 關停一些暫時不需要的服務,如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。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容