從0到1構(gòu)建大數(shù)據(jù)平臺,如何規(guī)劃集群硬件與軟件
?01大數(shù)據(jù)集群節(jié)點規(guī)劃
1.HDFS集群節(jié)點規(guī)劃
假如業(yè)務(wù)系統(tǒng)數(shù)據(jù)量每天增量 50T,保留周期為 30 天,那么 HDFS 存儲 容量為 50T * 30 天 * 3 副本 * 2 倍(數(shù)據(jù)源+清晰加工) = 9000T = 8.79P 。假如每個機(jī)器的磁盤是 4T * 10 = 40T, 每臺機(jī)器的可用存儲容量為 40T * 0.75 = 30T, 節(jié)點預(yù)估數(shù)量= 9000T / 30 = 300 節(jié)點,所以 datanode 的節(jié) 點最小數(shù)量為 300 個。
2.YARN集群節(jié)點規(guī)劃
根據(jù)任務(wù)量和性能評估 YARN 的節(jié)點數(shù)是很難的,難以評估,所以 NodeManager節(jié)點數(shù)可以和datanode節(jié)點數(shù)保持一致,如果算力負(fù)載過高, 根據(jù)實際情況再擴(kuò)容即可。
3.HBase集群節(jié)點規(guī)劃
HBase 節(jié)點規(guī)劃:一般開始搭建是根據(jù) HDFS 存儲公式計算即可,如果從增加并發(fā)的考慮,一般一個 RegionSever 并發(fā)為 5000 ~2 萬(優(yōu)化后并發(fā)更高), 可以根據(jù)業(yè)務(wù)實際并發(fā)估計節(jié)點數(shù)量。
4.Kafka集群節(jié)點規(guī)劃
Kafka 節(jié)點規(guī)劃:一般開始搭建是根據(jù)類似 HDFS 存儲公式計算,一般1個 broker 并發(fā)為 5 萬(優(yōu)化后并發(fā)更高),可以根據(jù)業(yè)務(wù)實際并發(fā)估計節(jié)點數(shù)量。
5.Zookeeper集群節(jié)點規(guī)劃
Zookeeper 節(jié)點規(guī)劃:集群開始搭建時3節(jié)點就夠用了,如果發(fā)現(xiàn) zookeeper 負(fù)載過高或有超時現(xiàn)象時可以考慮擴(kuò)展到 5 節(jié)點。
6.大數(shù)據(jù)集群廠商選擇
集群中的每個組件要做高可用,一般國企會用 CDH,互聯(lián)網(wǎng)公司會用開源社區(qū)版演化自己平臺。
02大數(shù)據(jù)集群硬件規(guī)劃
1.磁盤陣列概念
RAID:磁盤陣列(Redundant Arrays of Independent Disks,RAID),有"數(shù)塊獨立磁盤構(gòu)成具有冗余能力的陣列”之意。
RAID0 是把多個(最少2個)硬盤合并成1個邏輯盤使用,數(shù)據(jù)讀寫時對各硬盤同時操作,不同硬盤寫入不同數(shù)據(jù),速度快。
RAID1是通過磁盤數(shù)據(jù)鏡像實現(xiàn)數(shù)據(jù)冗余,在成對的獨立磁盤上產(chǎn)生互為備份的數(shù)據(jù)。當(dāng)原始數(shù)據(jù)繁忙時,可直接從鏡像拷貝中讀取數(shù)據(jù),因此RAID 1可以提高讀取性能。RAID 1是磁盤陣列中單位成本最高的,但提供了很高的數(shù)據(jù)安全性和可用性。當(dāng)一個磁盤失效時,系統(tǒng)可以自動切換到鏡像磁盤上讀寫,而不需要重組失效的數(shù)據(jù)。
Raid5是把硬盤設(shè)備的數(shù)據(jù)奇偶校驗信息保存到其他硬盤設(shè)備中,“parity”部分存放的就是數(shù)據(jù)的奇偶校驗信息,換句話說,Raid5技術(shù)實際上沒有備份磁盤中的真實數(shù)據(jù),而是當(dāng)硬盤設(shè)備出現(xiàn)問題后,通過奇偶校驗技術(shù)來嘗試重建損壞的數(shù)據(jù)。Raid5這樣的技術(shù)特性 “妥協(xié)”的兼顧了硬盤設(shè)備的讀寫速度、數(shù)據(jù)安全性與存儲成本問題。
Raid10是Raid1和Raid0的組合體,Raid10技術(shù)至少需要4塊硬盤來組建,其中先分別兩兩制成Raid1磁盤陣列,以保證數(shù)據(jù)的安全性。然后再對兩個Raid1磁盤按陣列實施Raid0技術(shù),進(jìn)一步提高硬盤設(shè)備的讀寫速度。
2.HDFS集群硬件規(guī)劃
內(nèi)存:NameNode 內(nèi)存一般 100 萬個 block 對應(yīng) 1G 的堆內(nèi)存,比如我們最大的一個集群的 block 達(dá)到了 9000 萬,會占內(nèi)容 90G,NameNode 的內(nèi)存不止存放 block,我們產(chǎn)線環(huán)境配置的是 200G+。
磁盤:主節(jié)點NameNode主要 CPU/內(nèi)存配置高些,系統(tǒng)盤做 RAID1,hdfs要安裝在系統(tǒng)盤上,如果有其他的數(shù)據(jù)盤,可以做 RAID5,容量所需不大,500G~ 1T 即可。
從節(jié)點 datanode 內(nèi)存/CPU/磁盤都有要求,我們產(chǎn)線存儲每服務(wù)器 4T*10=40T 臺
備注:DataNode對磁盤要求比較高。
3.YARN集群硬件配置
主節(jié)點 ResourceManager 主要 CPU/內(nèi)存配置高些,系統(tǒng)盤做 RAID1,yarn要安裝在系統(tǒng)盤上,如果有其他的數(shù)據(jù)盤,可以做 RAID5,容量所需不大, 500G~1T 即可。
備注:因為ResourceManager要做調(diào)度,所以CPU可以分配多一點,內(nèi)存不用太大。
從節(jié)點 NodeManager 對 CPU 和內(nèi)存都有要求。
備注:NodeManager一般與DataNode共用節(jié)點,對內(nèi)存要求不是很高,主要是計算。
4.HBase集群硬件配置
主節(jié)點 Master CPU 內(nèi)存中配就行。
從節(jié)點 RegionServer 內(nèi)存可以大些。
備注:RegionServer對內(nèi)存要求較高,blockcache和Memstore都需要占用內(nèi)存。
5.Kafka集群硬件配置
03大數(shù)據(jù)集群目錄規(guī)劃
1.管理節(jié)點的系統(tǒng)盤與數(shù)據(jù)盤
OS磁盤建議RAID1,建議200G以上,并且做LVM(邏輯卷),這樣可以動 態(tài)調(diào)整OS空間大小,安裝包需要安裝在OS盤,namenode的fsimage/editlog、jouralnode的/editlog、zookeeper的數(shù)據(jù)日志都放在OS盤(RAID1)。
管理節(jié)點的數(shù)據(jù)盤做RAID5,管理節(jié)點的數(shù)據(jù)盤如下所示:
2.數(shù)據(jù)節(jié)點的數(shù)據(jù)盤
數(shù)據(jù)節(jié)點的數(shù)據(jù)盤做RAID0(一塊盤做RAID0,硬件RAID)作為數(shù)據(jù)盤,文件格式為xfs,并配置noatime,不做LVM,最好是同構(gòu)。數(shù)據(jù)節(jié)點的數(shù)據(jù)盤:
備注:數(shù)據(jù)盤大小建議一致,避免數(shù)據(jù)不均衡;磁盤不能做LVM,避免影響存儲性能。
04Kafka Topic分區(qū)規(guī)劃
1.Kafka磁盤規(guī)劃
- 步驟1:評估數(shù)據(jù)量:要求研發(fā)提前評估所有topic 一個周期全量的數(shù)據(jù)大小。
- 步驟2:計算磁盤總存儲:如一塊盤 825g,一個節(jié)點 20 塊盤,10 個節(jié)點。那
么磁盤總存儲就是 165000g。
- 步驟3:預(yù)估實際數(shù)據(jù)存儲占比:Topic:一個周期全量數(shù)據(jù)大小占磁盤總存儲的百分比,超過百分之六十,即要求研發(fā)減少存儲周期。
- 步驟4:計算磁盤總塊數(shù):一個節(jié)點 20 塊盤,10 個節(jié)點,總磁盤塊數(shù) 200 個。
2.Kafka Topic分區(qū)方式1
合理預(yù)分區(qū):所有分區(qū)數(shù)量為磁盤總數(shù)的整數(shù)倍。如所有的 topic 總數(shù)據(jù)量為 50000g,磁盤個數(shù)為 200,那么就可以設(shè)置總分區(qū)數(shù)為 200/400/600.具體多少分區(qū)數(shù)視業(yè)務(wù)決定。若分區(qū)數(shù)為 400,那么一個分區(qū)的大小約 125g。
案例1:
某一個 topic:cbss001 的預(yù)估數(shù)據(jù)量是 210g,那么通過計算(每個分區(qū):125g)可以將其分成兩個分區(qū)。這樣根據(jù) kafka 副本落盤策略,各個主機(jī)磁盤就能保證最大限度的存儲均衡。
案例2:?
如果我們建立了一個非常大的 topic(100個分區(qū)),那么此 topic 的分區(qū)數(shù)量應(yīng)該是磁盤數(shù)的整數(shù)倍;如果說我們還有建立一個小的 topic(如10個分區(qū)),那么此 topic 的每個分區(qū)大小應(yīng)該跟之前的大的 topic 分區(qū)的大小保持一致。
3.Kafka Topic分區(qū)方式2
確定分區(qū)數(shù)量的方法:
(1)創(chuàng)建一個只有1個分區(qū)的topic
(2)測試這個topic的producer吞吐量和consumer吞吐量。
(3)假設(shè)他們的值分別是Tp和Tc,單位可以是MB/s.
(4)然后假設(shè)總的目標(biāo)吞吐量是Tt,那么分區(qū)數(shù)=Tt/min(Tp,Tc)
kafka性能基準(zhǔn)測試:
(1)Kafka Producer壓力測試
bin/kafka-producer-perf-test.sh --topic test --record-size 100 --num-records 100000 --throughput -1 --producer-props bootstrap.servers=hadoop1:9092,hadoop2:9092,hadoop3:9092
說明:
record-size是一條信息有多大,單位是字節(jié)。
num-records是總共發(fā)送多少條信息。
throughput 是每秒多少條信息,設(shè)成-1,表示不限流,可測出生產(chǎn)者最大吞吐量。
(2)Kafka Consumer壓力測試
bin/kafka-consumer-perf-test.sh --broker-list hadoop1:9092,hadoop2:9092,hadoop3:9092 --topic test --fetch-size 10000 --messages 10000000 --threads 1
參數(shù)說明:
--zookeeper 指定zookeeper的鏈接信息
--topic 指定topic的名稱
--fetch-size 指定每次fetch的數(shù)據(jù)的大小
--messages 總共要消費的消息個數(shù)
05HBase 表Region規(guī)劃
1.業(yè)務(wù)場景
每天寫入5億+條數(shù)據(jù)
每天寫入176G+數(shù)據(jù)量
region分裂大小為10G
TTL為20天
rowkey為手機(jī)號
2.預(yù)建分區(qū)個數(shù)
預(yù)建分區(qū)的個數(shù)=最終保有的數(shù)據(jù)量/每個regin配置的大小
(1)Region最大值推薦10-20Gb, 最優(yōu)值推薦5-10Gb。
(2)數(shù)據(jù)總量=176*20=3520G
3.預(yù)分區(qū)實現(xiàn)
方法一:
admin.createTable(tabledesc,startkey,endkey,numRegion)
方法二:
admin.createTable(tableDesc ,splitKeys);?