HBase容量規(guī)劃

2020-08-25 09:45 更新

HBase容量規(guī)劃

在設(shè)計分布式系統(tǒng)部署時,必須執(zhí)行一些基本的數(shù)學(xué)嚴(yán)謹(jǐn)性,以確保在給定系統(tǒng)的數(shù)據(jù)和軟件要求的情況下有足夠的計算能力。對于此功能,在估計某些備份和還原實施的性能時,網(wǎng)絡(luò)容量的可用性是最大的瓶頸。第二個最昂貴的功能是可以讀/寫數(shù)據(jù)的速度。

完全備份

要估計完整備份的持續(xù)時間,我們必須了解調(diào)用的一般操作:

  • 每個 RegionServer 上的預(yù)寫日志滾動:每個 RegionServer 并行運行幾十秒。相對于每個 RegionServer 的負(fù)載。
  • 獲取表格的HBase快照:幾十秒。相對于構(gòu)成表的區(qū)域和文件的數(shù)量。
  • 將快照導(dǎo)出到目標(biāo):請參閱下文。相對于數(shù)據(jù)的大小和到到目標(biāo)的網(wǎng)絡(luò)帶寬。

為了估計最后一步將花費多長時間,我們必須對硬件做出一些假設(shè)。請注意,這些對您的系統(tǒng)來說并不準(zhǔn)確 - 這些是您或您的管理員為您的系統(tǒng)所知的數(shù)字。假設(shè)在單個節(jié)點上從 HDFS 讀取數(shù)據(jù)的速度上限為 80MB / s(在該主機(jī)上運行的所有 Mapper 上),現(xiàn)代網(wǎng)絡(luò)接口控制器( NIC )支持 10Gb / s,架頂式交換機(jī)可以處理 40Gb / s,集群之間的 WAN 為 10Gb / s。這意味著您只能以 1.25GB / s的速度將數(shù)據(jù)發(fā)送到遠(yuǎn)程控制器 - 這意味著參與 ExportSnapshot 的16個節(jié)點(1.25 * 1024 / 80 = 16)應(yīng)該能夠完全飽和集群之間的鏈接。由于群集中有更多節(jié)點,我們?nèi)匀豢梢允咕W(wǎng)絡(luò)飽和,但對任何一個節(jié)點的影響較小,這有助于確保本地 SLA。如果快照的大小是 10TB,這將完全備份將花費2.5小時(10 * 1024 / 1.25 / (60 * 60) = 2.23hrs)

作為一般性聲明,本地群集與遠(yuǎn)程存儲之間的WAN帶寬很可能是完全備份速度的最大瓶頸。

當(dāng)考慮將備份的計算影響限制為“生產(chǎn)系統(tǒng)”時,可以使用可選的命令行參數(shù)對 hbase backup create: -b、-w、-q 進(jìn)行重用。該 -b 選項定義每個 worker(Mapper)寫入數(shù)據(jù)的帶寬。該 -w 參數(shù)限制了在 DistCp 作業(yè)中生成的工作者數(shù)量。該 -q 允許指定的 YARN 隊列可以可以限制生成 worker 的特定節(jié)點——這可以隔離備份工人執(zhí)行復(fù)制到一組非關(guān)鍵節(jié)點。將 -b 和 -w 選項與前面的公式關(guān)聯(lián)起來:-b 用于限制每個節(jié)點讀取 80MB/s 的數(shù)據(jù),-w 用于限制作業(yè)產(chǎn)生 16個worker 任務(wù)。

增量備份

就像我們?yōu)橥暾麄浞菟龅哪菢?,我們必須了解增量備份過程,以估計其運行時間和成本。

  • 識別自上次完全備份或增量備份以來的新預(yù)寫日志:可忽略不計。來自備份系統(tǒng)表的 Apriori 知識。
  • 讀取,過濾和寫入“最小化”HFile 相當(dāng)于 WAL:以寫入數(shù)據(jù)的速度為主。相對于 HDFS 的寫入速度。
  • 將 HFiles 分配到目的地:見上文。

對于第二步,該操作的主要成本是重寫數(shù)據(jù)(假設(shè) WAL 中的大部分?jǐn)?shù)據(jù)被保留)。在這種情況下,我們可以假設(shè)每個節(jié)點的聚合寫入速度為 30MB / s。繼續(xù)我們的 16 節(jié)點集群示例,這將需要大約 15 分鐘來執(zhí)行 50GB 數(shù)據(jù)(50 * 1024/60/60 = 14.2)的此步驟。啟動 DistCp MapReduce 作業(yè)的時間可能會占據(jù)復(fù)制數(shù)據(jù)所需的實際時間(50 / 1.25 = 40秒)并且可以忽略。

安全備份腳本

#!/bin/bash
mydate=`date +%A`
yestoday_begin_time=`date -d $yestoday" 00:00:00" +%s`
echo $yestoday_begin_time
yestoday_end_time=`date -d $yestoday" 23:59:59" +%s`
#yestoday_end_time='1568614500'
echo $yestoday_end_time
function backup_tables
{
    #check if dir exist or not
    /do1cloud/hadoop-3.0.3/bin/hdfs  dfs -ls /do1cloud/real_backup/${1}_${mydate}  > /dev/null 2>&1
    olddir_check=$(echo $?)

    #if dir exist then remove the dir and mkdir new dir
    if [[ $olddir_check -eq 0 ]] ; then
        echo ${1}_${mydate}
        /do1cloud/hadoop-3.0.3/bin/hdfs  dfs -rm /do1cloud/real_backup/${1}_$mydate/*
        /do1cloud/hadoop-3.0.3/bin/hdfs  dfs -rmdir /do1cloud/real_backup/${1}_${mydate}
        /do1cloud/hbase-2.0.5/bin/hbase org.apache.hadoop.hbase.mapreduce.Export $1 /do1cloud/real_backup/${1}_${mydate}
    else
        /do1cloud/hbase-2.0.5/bin/hbase org.apache.hadoop.hbase.mapreduce.Export $1 /do1cloud/real_backup/${1}_${mydate} 1 $yestoday_end_time
    fi
        /do1cloud/hadoop-3.0.3/bin/hdfs dfs -get /do1cloud/real_backup/${1}_${mydate} /do1cloud/do14export/fortar/${1}_${mydate}_$yestoday_end_time
}

for table in `cat /opt/prodtables.txt`
do
    backup_tables  $table
done
echo $?"result"
nowtime=`date +'%Y-%m-%d-%H-%M-%S'`
tar -zcf /do1cloud/do14export/fortar/tables_${nowtime}.tar.gz  /do1cloud/do14export/fortar/*_${mydate}*/
find /do1cloud/do14export/fortar/ -mtime +5 -exec rm -rf {} \;

增量備份腳本

#!/bin/bash
mydate=`date +%A`
yestoday=`date -d "1 day ago" +"%Y-%m-%d" `
#begin tome format 2019-09-11 00:00:00
yestoday_begin_time=`date -d $yestoday" 00:00:00" +%s`
#yestoday_begin_time="1568627040"
echo $yestoday_begin_time
yestoday_end_time=`date -d $yestoday" 23:59:59" +%s`
#yestoday_end_time="1568627520"
echo $yestoday_end_time
function backup02_tables
{
    #check if dir exist or not
    /do1cloud/hadoop-3.0.3/bin/hdfs  dfs -ls /do1cloud/real_backup02/${1}_${mydate}  > /dev/null 2>&1
    olddir_check=$(echo $?)

    #if dir exist then remove the dir and mkdir new dir
    if [[ $olddir_check -eq 0 ]] ; then
        echo ${1}_${mydate}
        /do1cloud/hadoop-3.0.3/bin/hdfs  dfs -rm /do1cloud/real_backup02/${1}_$mydate/*
        /do1cloud/hadoop-3.0.3/bin/hdfs  dfs -rmdir /do1cloud/real_backup02/${1}_${mydate}
        /do1cloud/hbase-2.0.5/bin/hbase org.apache.hadoop.hbase.mapreduce.Export $1 /do1cloud/real_backup02/${1}_${mydate} $yestoday_begin_time $yestoday_end_time
    else
        /do1cloud/hbase-2.0.5/bin/hbase org.apache.hadoop.hbase.mapreduce.Export $1 /do1cloud/real_backup02/${1}_${mydate}  $yestoday_begin_time  $yestoday_end_time
    fi
        /do2cloud/hadoop-3.0.3/bin/hdfs dfs -get /do5cloud/real_backup02/${1}_${mydate} /do3cloud/do24export/fortar/${1}_${mydate}_$yestoday_end_time
}

for table in `cat /opt/prodtables.txt`
do
    backup02_tables  $table
done

nowtime=`date +'%Y-%m-%d-%H-%M-%S'`
tar -zcf /do6cloud/do14export/fortar/tables_${nowtime}.tar.gz  /do0cloud/do94export/fortar/*_${mydate}*/
find /do1cloud/do14export/fortar/ -mtime +5 -exec rm -rf {} \;


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號