W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在設(shè)計分布式系統(tǒng)部署時,必須執(zhí)行一些基本的數(shù)學(xué)嚴(yán)謹(jǐn)性,以確保在給定系統(tǒng)的數(shù)據(jù)和軟件要求的情況下有足夠的計算能力。對于此功能,在估計某些備份和還原實施的性能時,網(wǎng)絡(luò)容量的可用性是最大的瓶頸。第二個最昂貴的功能是可以讀/寫數(shù)據(jù)的速度。
要估計完整備份的持續(xù)時間,我們必須了解調(diào)用的一般操作:
為了估計最后一步將花費多長時間,我們必須對硬件做出一些假設(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)橥暾麄浞菟龅哪菢?,我們必須了解增量備份過程,以估計其運行時間和成本。
對于第二步,該操作的主要成本是重寫數(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 {} \;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: