Version: v0.1
Last Update: July/23/2021
Keywords:CDH材诽,Hadoop互亮,Big Data Platform汉操,Hyper-V愁铺,Virtual Machine
Abstract:
因想要學(xué)習(xí)大數(shù)據(jù)各種相關(guān)組件和技術(shù)鹰霍,而自家有臺臺式機可以折騰,購買所需配置的云服務(wù)器又太貴茵乱,故準備自行搭建CDH集群茂洒。因有Win10專業(yè)版,因此嘗鮮玩玩Hyper-V瓶竭。整體思路如下:規(guī)劃好整個集群的數(shù)量督勺、配置、角色斤贰,準備好所有軟件包智哀;先配置一臺虛擬機A,盡可能將所有公共的配置設(shè)置好荧恍,再依次復(fù)制出其余虛擬機瓷叫。
文內(nèi)全部使用經(jīng)過驗證的PowerShell和Shell腳本進行配置,注釋豐富便于理解整體操作邏輯(和復(fù)制粘貼)送巡。使用VMWare/VirtualBox/KVM等基本流程均相似摹菠。
0. 背景
- 因想要學(xué)習(xí)大數(shù)據(jù)各種相關(guān)組件和技術(shù),而自家有臺臺式機可以折騰骗爆,購買所需配置的云服務(wù)器又太貴次氨,故準備自行搭建CDH集群。
- 最初準備使用Ubuntu+VKVM摘投,但臺式機家人共享糟需,雙系統(tǒng)切換也很麻煩,故考慮在Win10一個平臺解決所有問題谷朝。
- 因有Win10專業(yè)版洲押,VMWare Workstation要收費,VirtualBox是Oracle家的不喜歡圆凰,因此嘗鮮玩玩Hyper-V杈帐。
- 以Win10專業(yè)版21H1+Hyper-V為例,若使用MacOS/Linux+VMWare/VirtualBox/KVM,則需依據(jù)實際情況參考操作挑童。
- Hyper-V需要在BIOS中開啟CPU虛擬化累铅,具體操作略。
- 安裝過程盡可能參考Cloudera官方文檔站叼,其余參考文章也都備注了來源娃兽。
整體思路如下:
- 規(guī)劃好整個集群的數(shù)量、配置尽楔、角色投储,準備好所有軟件包。
- 因臺式機單機資源有限阔馋,同時開啟多臺虛擬機比較費玛荞,故先配置一臺虛擬機A,盡可能將所有公共的配置設(shè)置好呕寝,再復(fù)制出其余虛擬機勋眯。
- 需要有一臺虛擬機B,作為CM Server和CDH私有倉庫服務(wù)器下梢,用于安裝其余虛擬機所用的所有服務(wù)客蹋。其余所有虛擬機C的設(shè)置在安裝CDH前都是一樣的。
- 因此操作流程為:
- 配置A
- 由A生成B孽江,配置B為CM Server和CDH私有倉庫服務(wù)器
- 由A生成C嚼酝,配置C為CM Agent
- 由C生成DEFG等
- 配置DB
- 安裝CDH
文中操作說明:
- 文中敘述的可選操作或命令,如果是斜體的 可選:xxx 或在命令塊注釋內(nèi)竟坛,是我在自己搭建的實際操作中沒有執(zhí)行的,否則是執(zhí)行了的钧舌。
- 操作涉及到Hosts/Hostname/IP/路徑/文件命名/參數(shù)名/參數(shù)值等担汤,均以集群規(guī)劃部分的描述為示范。若使用不同的配置項洼冻,可將本文下載下來崭歧,查找替換成自己的配置再看更舒服。
- 使用命令行操作撞牢,不使用界面率碾。其實若PowerShell,鼠標操作可能更簡單屋彪。
- PowerShell命令行所宰,默認需要以管理員身份運行終端,且僅在Terminal/PowerShell中驗證過畜挥。
- Shell操作仔粥,默認需要sudo或以root用戶執(zhí)行。
- 如果使用yum等命令反應(yīng)遲緩,可以自行配置國內(nèi)proxy源加速訪問躯泰。
- 涉及到vi修改文件谭羔,含義如下:
- 修改一行 (modify: from xxx to xxx)
- 添加一行 (append: xxx)
- 注釋一行 (comment: # xxx),也可以刪除該行
特別感謝參考文章:
1. 集群規(guī)劃
需要準備的軟件和版本。
- 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 硬件與角色規(guī)劃
參考-CDH Cluster Hosts and Role Assignments
依據(jù)官方的"20 Worker Hosts with High Availability"角色搭配建議和最低硬件要求秀撇,整理圖表如下超棺。
其中"4c2g"代表官方建議4核CPU,2GB內(nèi)存呵燕。因磁盤空間一般不是問題棠绘,故沒有列出。
星號*表示該角色沒有計入實際搭建和操作中再扭,只是規(guī)劃在表格中氧苍。
"Final Config"是依據(jù)實際最終搭建完成后的運行情況,倒推出的最低配置泛范,僅供參考让虐。
如果宿主機內(nèi)存只有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規(guī)劃
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集群中的成員笼才,用于復(fù)制出其余所有VM漱受。
2. 宿主機環(huán)境準備
2.1 配置Terminal/PowerShell環(huán)境
- 安裝Terminal和插件的方法略。
如果對某個PowerShell命令不熟悉骡送,可以使用:
Get-Help New-VM -Online
- 可選昂羡,配置好hosts,方便宿主機訪問VM摔踱。
# 用管理員權(quán)限修改 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網(wǎng)絡(luò)
參考-Hyper-V虛擬機配置內(nèi)部網(wǎng)絡(luò)固定IP并連接外網(wǎng)
# 創(chuàng)建一個名稱為cdh-wmswitch的內(nèi)部虛擬路由器
New-VMSwitch -Name cdh-vmswitch -SwitchType Internal
# 查詢出剛創(chuàng)建的cdh-wmswitch的ifIndex為60虐先,依據(jù)實際情況更改
Get-NetAdapter
# 設(shè)置cdh-wmswitch的IP地址,將上一步查出的InterfaceIndex帶入?yún)?shù)
New-NetIPAddress -IPAddress 10.10.64.1 -PrefixLength 24 -InterfaceIndex 60
# 設(shè)置cdh-wmswitch使用NAT獲得物理機的互聯(lián)網(wǎng)訪問派敷,此操作只能使用命令行
New-NetNat -Name cdh-vmnat -InternalIPInterfaceAddressPrefix 10.10.64.0/24
2.4 創(chuàng)建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'
# 創(chuàng)建VM般眉,可自行設(shè)置啟動內(nèi)存大小
# 硬盤空間可以大些了赵,因為會動態(tài)伸縮不會占用過多宿主機資源
# 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
# 設(shè)置CPU數(shù)量,可選甸赃,默認1core
Set-VMProcessor $VMName -Count 2
# 默認情況下如上VM會配備好一個DVD并默認從DVD啟動柿汛,否則可以執(zhí)行如下命令創(chuàng)建DVD:
# Add-VMScsiController -VMName $VMName
# Add-VMDvdDrive -VMName $VMName -ControllerNumber 1 -ControllerLocation 0 -Path $InstallMedia
# 加載CentOS7鏡像并設(shè)置啟動順序
$DVDDrive = Get-VMDvdDrive $VMName
Set-VMDvdDrive $VMName -Path $InstallMedia
# 默認情況下1代VM創(chuàng)建好后,啟動順序即如此埠对,不用修改
# Set-VMBios $VMName -StartupOrder @("CD", "IDE", "LegacyNetworkAdapter", "Floppy")
2.5 安裝CentOS
2.5.1 安裝前
開啟VM络断,并安裝系統(tǒng)。
$VMName = 'c7'
Start-VM $VMName
# 連接上VM進行OS安裝
VMConnect localhost $VMName
2.5.2 安裝中
安裝注意事項:
- 可選项玛,在選擇"Install CentOS7"前啟用強制GPT分區(qū)貌笨,方便今后掛載大于2TB磁盤和磁盤動態(tài)伸縮。
按TAB鍵襟沮,在最下方參數(shù)后面加上"inst.gpt"锥惋,即改成:"vmlinuz ... quiet inst.gpt",回車开伏。 - 可選膀跌,設(shè)置時區(qū)為Shanghai。
- 可選固灵,Keyboard layout自行配置捅伤。
- 可選,添加簡體中文語言支持巫玻。
- SOFTWARE SELECTION選取Base Environment:Compute Node(計算節(jié)點)丛忆。
- 若手動磁盤分區(qū),需添加一個容量為2M的"biosboot"分區(qū)放置GPT仍秤。
- 如果宿主機內(nèi)存不夠大熄诡,最好為CentOS分配夠大的Swap分區(qū),例如8GB以上徒扶,否則后面服務(wù)起不來一切白費。
- 可選根穷,關(guān)閉KDUMP姜骡。
- 因為生成VM時配置好了虛擬路由器,可以在安裝時直接設(shè)置好IP屿良,方便安裝完成后ssh上VM圈澈。
- 靜態(tài)(Manual)IPv4;
- 添加IP:10.10.64.250尘惧;
- 掩碼:255.255.255.0康栈;
- 網(wǎng)關(guān):10.10.64.1;
- DNS:223.5.5.5,8.8.8.8;
- 開機啟用(Automatic connect to ...)啥么。
- 可選登舞,設(shè)置好Hostname:centos7.cdh.lionxcat.com。
- 可選悬荣,創(chuàng)建新用戶時勾上"將此用戶設(shè)置為管理員"菠秒,也可今后自行添加到sudoers/wheel組。
2.5.3 安裝后
使用VMConnect可以不用IP連接VM氯迂,但內(nèi)置的終端超難用践叠。使用自己喜歡的終端ssh登錄VM操作比較方便。
若安裝時不配置IP嚼蚀,安裝后可在Hyper-V中選中該VM禁灼,最下網(wǎng)絡(luò)Tab里找到Hyper-V自動提供的IP(v4或v6)地址。若安裝時配置了IP轿曙,則嘗試登錄VM并判斷網(wǎng)絡(luò)是否連通弄捕。以下假定在Win10中配置了hosts,若沒配置可用IP拳芙。
ssh root@c7
ifconfig
ping www.xxx.com
- 若安裝中沒有配置IP察藐,則先登錄VM并設(shè)置IP。
# 在宿主機中執(zhí)行
$VMName = 'c7'
Start-VM $VMName
VMConnect localhost $VMName
# 在c7中執(zhí)行
ifconfig
vi /etc/sysconfig/network-scripts/ifcfg-eth0 # eth0是具體VM網(wǎng)卡
# 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
- 可選舟扎,如果發(fā)現(xiàn)有ssh時登錄反應(yīng)慢的情況分飞,可修改關(guān)閉SSH使用DNS查詢。
vi /etc/ssh/sshd_config
# modify: from "#UseDNS yes" to "UseDNS no"
systemctl restart sshd
- 補充說明睹限。
- 新裝的這臺VM(以下簡稱作c7)譬猫,將作為基板系統(tǒng),用于生成所有集群VM羡疗。
- 后續(xù)配置中染服,可隨時為VM做快照(Snapshot/Checkpoint)扑庞,方便備份壳坪、恢復(fù)、復(fù)制VM咳秉。
- 高階玩法痒钝,可使用Ansible等批量配置秉颗,或制作好CDH安裝鏡像(參考Creating Virtual Images of Cluster Hosts和Creating a CDH Cluster Using a Cloudera Manager Template)。
3. 通用VM的OS環(huán)境準備
以下內(nèi)容在c7上執(zhí)行送矩,是所有VM都需要的基礎(chǔ)配置蚕甥。
3.1 關(guān)閉防火墻
systemctl stop firewalld
systemctl disable firewalld
# 驗證一下
systemctl status firewalld
3.2 關(guān)閉SELinux
vi /etc/selinux/config
# modify: from "SELINUX=enforcing" to "SELINUX=disabled"
setenforce 0
reboot
# 驗證一下
getenforce
3.3 系統(tǒng)配置參數(shù)
vi /etc/security/limits.d/20-nproc.conf # 具體文件名中數(shù)字可能不是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
# 在啟動參數(shù)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
最后最好驗證是否重啟后生效。若有沒生效的參數(shù)栋荸,檢查配置文件拼寫是否正確菇怀。
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 配置網(wǎng)絡(luò)時間同步
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
# 啟動服務(wù)
systemctl start ntpd
systemctl enable ntpd
# 同步硬件CMOS時鐘
hwclock --systohc
4. CM安裝
4.1 創(chuàng)建ut01的VM
在通用VM配置完成后钥顽,將c7關(guān)機并復(fù)制一份命名為ut01义屏,用于承載CDH私有倉庫(以及其他服務(wù),參考角色規(guī)劃部分)蜂大。
# c7中執(zhí)行
poweroff
- 采用復(fù)制VHD的方式闽铐,復(fù)制c7的磁盤,使用該磁盤文件生成ut01(Hyper-V會生成新MAC地址)奶浦。
# 在宿主機中執(zhí)行
# VM基礎(chǔ)配置
$BasePath = 'D:\VirtualMachines\CDH-Cluster'
$Switch = 'cdh-vmswitch'
# 復(fù)制源
$SourceVM = 'c7'
$SourceVHD = "$BasePath\$SourceVM\$SourceVM.vhdx"
# 復(fù)制目的地
$DestVM = 'ut01'
$DestPath = "$BasePath\$DestVM"
$DestVHD = "$DestPath\$DestVM.vhdx"
# 刪除c7所有快照以自動合并磁盤文件
Remove-VMSnapshot $SourceVM
# 將文件拷貝到新目錄
New-Item $DestPath -ItemType Directory
Copy-Item $SourceVHD $DestVHD
# 使用復(fù)制后的文件創(chuàng)建新VM兄墅,注意自行設(shè)置啟動內(nèi)存大小
$NewVM = @{
Name = $DestVM
MemoryStartupBytes = 16GB
SwitchName = $Switch
VHDPath = $DestVHD
Path = $BasePath
Generation = 1
}
New-VM @NewVM
# 可選,設(shè)置CPU
Set-VMProcessor $DestVM -Count 8
- 啟動并配置IP和Hostname澳叉。
# 宿主機上執(zhí)行
$VMName = 'ut01'
Start-VM $VMName
VMConnect localhost $VMName
# ut01上執(zhí)行
vi /etc/sysconfig/network-scripts/ifcfg-eth0 # eth0是具VM網(wǎng)卡
# 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
# 外網(wǎng)是否可達
ping www.xxx.com
# 內(nèi)網(wǎng)c7是否可達隙咸,需要先啟動c7
ping c7
4.2 開啟NTP時間同步服務(wù)
可選:如果非生產(chǎn)環(huán)境,所以VM都與公網(wǎng)同步也可以成洗,只不過今后需要關(guān)掉CM的煩人的警告五督。
將ut01作為授時服務(wù)器,其余VM均與ut01同步時間瓶殃。
以下內(nèi)容在ut01上操作充包,配置ut01成為授時服務(wù)器。
vi /etc/ntp.conf
# 開放本機時間同步服務(wù)給指定網(wǎng)段
# append:
# restrict 10.100.64.0 mask 255.255.255.0 nomodify notrap
#
# 可選:更換時間服務(wù)器
# 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
以下內(nèi)容在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倉庫
以下內(nèi)容在ut01上執(zhí)行,配置用于安裝CM和CDH的私有Repo冠场。
參考-Configuring a Local Package Repository
- 安裝HTTP服務(wù)
# 以下操作在ut01上執(zhí)行
yum install -y httpd
systemctl start httpd
systemctl enable httpd
# 創(chuàng)建cm6目錄
mkdir -p /var/www/html/cloudera-repos/cm6
# 創(chuàng)建cdh6目錄
mkdir -p /var/www/html/cloudera-repos/cdh6
- 將CM和CDH包拷貝到ut01上
# 以下操作在宿主機上執(zhí)行
# 拷貝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上執(zhí)行
tar xvfz cm6.3.1-redhat7.tar.gz -C /var/www/html/cloudera-repos/cm6 --strip-components=1
# 設(shè)置目錄權(quán)限
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上配置添加使用私有倉庫
以下內(nèi)容在ut01上執(zhí)行家浇,添加本機私有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
# 分發(fā)到c7
scp /etc/yum.repos.d/cloudera-repo.repo root@c7:/etc/yum.repos.d/
4.5 安裝依賴軟件包
以下內(nèi)容在c7和ut01上都執(zhí)行碴裙,安裝必備的軟件包钢悲。
4.5.1 檢查Python
# 若CentOS選擇計算節(jié)點安裝則默認都滿足
# 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上執(zhí)行芦昔,安裝Cloudera Manager Server诱贿,Daemons娃肿,Agent咕缎。
yum install -y cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
以下操作在c7上執(zhí)行,安裝CM Daemons & Agent料扰。
可選:若現(xiàn)在不安裝凭豪,今后讓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 數(shù)據(jù)庫準備
以下操作在ut01上執(zhí)行嫂伞,若MySQL使用云SaaS服務(wù)或規(guī)劃在其他VM,依據(jù)實際情況操作拯钻。
參考-Install and Configure MySQL for Cloudera Software
4.7.1 安裝MySQL
- 可以直接從MySQL官方下載帖努,300~500MB,需要網(wǎng)速夠快
# 下載官方y(tǒng)um源
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配置文件粪般,參考官方文檔配置即可拼余,非生產(chǎn)環(huán)境非必須,略
# vi /etc/my.cnf
# 啟動mysql
systemctl start mysqld
systemctl enable mysqld
# 找到初始密碼
grep 'temporary password' /var/log/mysqld.log
# 執(zhí)行腳本重置
/usr/bin/mysql_secure_installation
# 設(shè)置一個帶有大小寫字母數(shù)字符號的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
# 配置與啟動等后續(xù)步驟同上
4.7.2 創(chuàng)建各服務(wù)需要的DB
官方文檔中有描述所有需要預(yù)先創(chuàng)建的DB匙监。utf8編碼是必須的。
雖然官方允許配置各服務(wù)使用任意DB名和User名小作,但遵守官方默認規(guī)范也不復(fù)雜亭姥,若圖方便可使用相同User和Password。
新建User密碼均需要滿足密碼復(fù)雜度要求顾稀。也可自行修改配置文件降低要求达罗。
# 在ut01中執(zhí)行
mysql -uroot -p
/* 在MySQL CLI中執(zhí)行 */
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
# 參數(shù)含義:<databaseType> <databaseName> <databaseUser> <password>
# 依據(jù)實際情況修改參數(shù)
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm scm_Passw0rd
4.8 啟動CMServer
以下操作在ut01上執(zhí)行。
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上執(zhí)行础拨。
systemctl start cloudera-scm-agent
systemctl enable cloudera-scm-agent
在宿主機訪問http://ut01:7180/氮块,用戶名/密碼:admin。
如果ut01和c7上的配置均成功诡宗,就可以在配置頁面看到兩臺VM滔蝉。
注意:
因后續(xù)操作將復(fù)制c7生成其余VM,若在c7上啟動過cloudera-scm-agent塔沃,則必須在復(fù)制c7前刪除agent生成的uuid蝠引,agent會在下次啟動時重新生成。若不重新生成uuid蛀柴,各VM的uuid重復(fù)將導(dǎo)致今后server無法識別各agent螃概。
若沒有在c7上啟動agent則無此需要。
systemctl stop cloudera-scm-agent
rm -f /var/lib/cloudera-scm-agent/uuid
# 不能再啟動Agent鸽疾,讓新的VM各自啟動各自的以生成不同uuid吊洼。
5. 創(chuàng)建CDH集群
操作與創(chuàng)建ut01的VM類似,只不過這次生成的不是ut01制肮,而是其余所有VM冒窍。
5.1 備份VM
先將兩臺VM關(guān)機递沪。并做些備份操作,以免后面操作出錯综液,或方便配置第二套集群款慨。
# 在宿主機上執(zhí)行
# 刪除所有快照以合并磁盤文件
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
下面采用復(fù)制VHD的方式谬莹,復(fù)制c7的VHD用于創(chuàng)建其余VM檩奠。
# VM基礎(chǔ)配置
$BasePath = 'D:\VirtualMachines\CDH-Cluster'
$Switch = 'cdh-vmswitch'
# 復(fù)制源
$SourceVM = 'c7'
$SourceVHD = "$BasePath\$SourceVM\$SourceVM.vhdx"
# 復(fù)制目的地VM名集合
$DestVMColl = ('m01', 'm02', 'm03', 'n001', 'n002', 'n003', 'gw01')
# 刪除c7所有快照以合并磁盤文件
Remove-VMSnapshot $SourceVM
# 循環(huán)創(chuàng)建所有VM
ForEach ($DestVM in $DestVMColl) {
$DestPath = "$BasePath\$DestVM"
$DestVHD = "$DestPath\$DestVM.vhdx"
# 將文件拷貝到新目錄
New-Item $DestPath -ItemType Directory
Copy-Item $SourceVHD $DestVHD
# 創(chuàng)建新VM使用復(fù)制后的文件
# 注意自行設(shè)定啟動內(nèi)存大小
$NewVM = @{
Name = $DestVM
MemoryStartupBytes = 16GB
SwitchName = $Switch
VHDPath = $DestVHD
Path = $BasePath
Generation = 1
}
New-VM @NewVM
# 設(shè)置CPU
Set-VMProcessor $DestVM -Count 4
}
# 確認創(chuàng)建無誤,可以繼續(xù)配置
# 可選:創(chuàng)建一個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并執(zhí)行后續(xù)配置附帽,以免宿主機內(nèi)存不夠用最后有些VM啟動不起來埠戳。
- Hyper-V會在VM啟動時為其分配<MemoryStartupBytes>大小的內(nèi)存,在VM運行3~4分鐘后動態(tài)內(nèi)存收縮蕉扮,此時宿主機內(nèi)存占用下降可再啟新VM乞而。
- 如果最終還是無法啟動所有VM,要么調(diào)小啟動內(nèi)存(可能導(dǎo)致今后有的組件內(nèi)存不足無法啟動)慢显,要么買內(nèi)存條插上爪模。
- 到此步驟為止,8臺VM運行時內(nèi)存總和約不到17GB荚藻。
- c7的作用就到此結(jié)束了屋灌,可以和ut01的備份VHD一起放置到其他地方備份。
5.3 配置其余VM
以下操作在新生成的VM上執(zhí)行应狱。
啟動并配置IP和Hostname共郭。啟動VM命令略。
vi /etc/sysconfig/network-scripts/ifcfg-eth0 # eth0是具體VM網(wǎng)卡
# 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
# 這里再提醒一遍疾呻,若復(fù)制VM前啟動過scm-agent除嘹,需要刪除
# /var/lib/cloudera-scm-agent/uuid,并重啟agent才能順利被scm-server識別
5.4 為NameNode和DataNode的VM創(chuàng)建并掛載磁盤VHD
可選:為NN和DN單獨掛載可擴展的虛擬磁盤岸蜗,方便今后隨時增大磁盤空間或挪動磁盤文件到更大的硬盤上尉咕。
若不放在可擴展VHD上,今后空間不夠用了再擴充比較麻煩璃岳。
新掛載的VHD也創(chuàng)建成LVM年缎,方便今后在線擴容。
創(chuàng)建并向VM添加動態(tài)VHD单芜。
# 在宿主機上執(zhí)行
$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啟動狀態(tài)下可執(zhí)行,掛載SCSI設(shè)備犁柜,若SCSI-Controller(0,0)被占用洲鸠,自行調(diào)整位置
Add-VMHardDiskDrive $VM -Path $NewVHD -ControllerNumber 0 -ControllerLocation 0 -ControllerType SCSI
}
在后面安裝CDH時,DN和NN的數(shù)據(jù)目錄(dfs.datanode.data.dir和dfs.namenode.name.dir)默認在/dfs下馋缅。
若更換其它位置扒腕,則下面命令里也應(yīng)該掛載到對應(yīng)目錄下淤齐。
以下操作在m0[1-3]和n00[1-3]上執(zhí)行。
在VM中掛載硬盤到目錄/dfs袜匿。
# 查看新掛載的VHD是否成功,正常情況應(yīng)被掛載到設(shè)備sdb
fdisk -l
# 從物理磁盤創(chuàng)建Physical Volume
pvcreate /dev/sdb
pvs
# 從PV創(chuàng)建Volume Group稚疹,名稱為vg-data
vgcreate vg-data /dev/sdb
vgs
# 從VG創(chuàng)建Logical Volume居灯,名稱為lv-data
lvcreate -l 100%FREE -n lv-data vg-data
lvs
# 格式化成xfs,注意路徑和名稱相對應(yīng)
mkfs.xfs /dev/vg-data/lv-data
# 掛載到/dfs内狗,若非該目錄則需調(diào)整
mkdir /dfs
mount /dev/vg-data/lv-data /dfs
mount -l
# 設(shè)置開機自動掛載怪嫌,注意,一定要添加在文件末尾
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"中沒有看到“當前管理的主機”中出現(xiàn)某臺VM,請檢查該VM的IP/Hostname配置数初,并查看scm-server的日志排查問題找爱。
- 在“選擇存儲庫--使用Parcel(建議)--更多選項”中,添加使用自建的私有倉庫泡孩,地址為:http://utility01.cdh.lionxcat.com/cloudera-repos/cdh6/ 车摄。然后會在“CDH版本”里出現(xiàn)"CDH-6.3.2-xxx"。
- 在"Inspect Cluster"中仑鸥,運行兩項測試吮播,若無問題,則說明上述配置一切正常眼俊。
- 選擇基本安裝"Essentials"意狠,以免安裝服務(wù)太多了內(nèi)存不足啟動不起來。
- 按照規(guī)劃選取各Host對應(yīng)的Service疮胖,輸入創(chuàng)建好的DB名稱摄职、用戶、密碼获列,最后執(zhí)行命令谷市。
- 若有服務(wù)啟動失敗,查看是否內(nèi)存不足導(dǎo)致击孩。如果內(nèi)存不足迫悠,可以:
- 關(guān)停一些暫時不需要的服務(wù),如Oozie巩梢,HUE创泄,甚至把CM都關(guān)了只用Hadoop
- 修改服務(wù)配置中的Java Heap大小
- 增大CentOS的Swap
- 去買內(nèi)存條艺玲。
本人情況,將Hive JVM堆棧默認配置為從4G降為2G鞠抑,客戶端從2G降為1G后饭聚,所有服務(wù)均順利啟動。
啟動后搁拙,各服務(wù)器占用宿主機的內(nèi)存使用情況如下(因角色放置不同秒梳,數(shù)據(jù)量不同,運行時長不同箕速,下面數(shù)據(jù)供參考)酪碘。
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 安裝后續(xù)
列舉一些可以拿這套集群玩點什么的想法。
- 嘗試自己寫MR盐茎,爬點數(shù)據(jù)放入集群內(nèi)玩兴垦,用eCharts做些BI等等。
- 優(yōu)化各組件的參數(shù)和JVM配置字柠,升高或降低探越。
- 裝Spark,HBase窑业,Hive on Spark等等扶关,但需要更多內(nèi)存。
- 啟用HDFS的HA数冬,Yarn和Hive的負載均衡等等节槐,只為理解架構(gòu),非生產(chǎn)環(huán)境并無實際意義拐纱。
- 用HBase做索引铜异,建立自己的照片和媒體庫索引,用Hive+Hue做可視化秸架。
- Flink揍庄,Hudi ...
6. 回顧
整體花費一周時間,中間臨時買了兩根內(nèi)存條东抹。
前期規(guī)劃和查找各類文章花費50%蚂子,學(xué)習(xí)Hyper-V和PowerShell花費30%,安裝配置花費15%缭黔,整理文檔花費15%食茎。
中間重裝了兩次,只要配置好了c7和ut01兩臺VM馏谨,后面的操作也就是十幾分鐘搞完别渔。拋開Hyper-V其實很簡單。
流程還有可優(yōu)化的地方,但也沒必要浪費時間了哎媚。
內(nèi)存越多越好喇伯,個人認為32GB是最低配,但可能需要花費精力折騰并不劃算拨与。64GB基本夠用稻据,畢竟自己玩不會太多數(shù)據(jù)文件。我選擇了128GB买喧。
后面會將HDP的搭建也整理個文章出來捻悯,再往后有精力再嘗試搭建Apache原生。
如有勘誤岗喉、改進意見或自己搭建過程中的疑問,歡迎聯(lián)系lionxcat或留言炸庞。
轉(zhuǎn)載請注明原文https://github.com/lionxcat/articles-it/blob/main/cdh-setup-guide-using-hyperv-by-yourself.md钱床。