W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在設(shè)計(jì)分布式系統(tǒng)部署時(shí),必須執(zhí)行一些基本的數(shù)學(xué)嚴(yán)謹(jǐn)性,以確保在給定系統(tǒng)的數(shù)據(jù)和軟件要求的情況下有足夠的計(jì)算能力。對(duì)于此功能,在估計(jì)某些備份和還原實(shí)施的性能時(shí),網(wǎng)絡(luò)容量的可用性是最大的瓶頸。第二個(gè)最昂貴的功能是可以讀/寫數(shù)據(jù)的速度。
要估計(jì)完整備份的持續(xù)時(shí)間,我們必須了解調(diào)用的一般操作:
為了估計(jì)最后一步將花費(fèi)多長(zhǎng)時(shí)間,我們必須對(duì)硬件做出一些假設(shè)。請(qǐng)注意,這些對(duì)您的系統(tǒng)來說并不準(zhǔn)確 - 這些是您或您的管理員為您的系統(tǒng)所知的數(shù)字。假設(shè)在單個(gè)節(jié)點(diǎn)上從 HDFS 讀取數(shù)據(jù)的速度上限為 80MB / s(在該主機(jī)上運(yùn)行的所有 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個(gè)節(jié)點(diǎn)(1.25 * 1024 / 80 = 16)應(yīng)該能夠完全飽和集群之間的鏈接。由于群集中有更多節(jié)點(diǎn),我們?nèi)匀豢梢允咕W(wǎng)絡(luò)飽和,但對(duì)任何一個(gè)節(jié)點(diǎn)的影響較小,這有助于確保本地 SLA。如果快照的大小是 10TB,這將完全備份將花費(fèi)2.5小時(shí)(10 * 1024 / 1.25 / (60 * 60) = 2.23hrs)
作為一般性聲明,本地群集與遠(yuǎn)程存儲(chǔ)之間的WAN帶寬很可能是完全備份速度的最大瓶頸。
當(dāng)考慮將備份的計(jì)算影響限制為“生產(chǎn)系統(tǒng)”時(shí),可以使用可選的命令行參數(shù)對(duì) hbase backup create: -b、-w、-q 進(jìn)行重用。該 -b 選項(xiàng)定義每個(gè) worker(Mapper)寫入數(shù)據(jù)的帶寬。該 -w 參數(shù)限制了在 DistCp 作業(yè)中生成的工作者數(shù)量。該 -q 允許指定的 YARN 隊(duì)列可以可以限制生成 worker 的特定節(jié)點(diǎn)——這可以隔離備份工人執(zhí)行復(fù)制到一組非關(guān)鍵節(jié)點(diǎn)。將 -b 和 -w 選項(xiàng)與前面的公式關(guān)聯(lián)起來:-b 用于限制每個(gè)節(jié)點(diǎn)讀取 80MB/s 的數(shù)據(jù),-w 用于限制作業(yè)產(chǎn)生 16個(gè)worker 任務(wù)。
就像我們?yōu)橥暾麄浞菟龅哪菢?,我們必須了解增量備份過程,以估計(jì)其運(yùn)行時(shí)間和成本。
對(duì)于第二步,該操作的主要成本是重寫數(shù)據(jù)(假設(shè) WAL 中的大部分?jǐn)?shù)據(jù)被保留)。在這種情況下,我們可以假設(shè)每個(gè)節(jié)點(diǎn)的聚合寫入速度為 30MB / s。繼續(xù)我們的 16 節(jié)點(diǎn)集群示例,這將需要大約 15 分鐘來執(zhí)行 50GB 數(shù)據(jù)(50 * 1024/60/60 = 14.2)的此步驟。啟動(dòng) DistCp MapReduce 作業(yè)的時(shí)間可能會(huì)占據(jù)復(fù)制數(shù)據(jù)所需的實(shí)際時(shí)間(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號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: