셸 다 중 프로 세 스 간단 한 방식
3872 단어 셸 스 크 립 트
#!/bin/bash
for i in `seq 100`;do
sleep 1 &
done
이렇게 백 번 의 순환 을 실 행 했 지만 매번 sleep 는 백 엔 드 에 놓 여 있 습 니 다. 1 초도 안 되 어 끝 났 고 완전히 제어 할 수 없습니다. 제 가 물건 을 다운로드 하고 싶 을 때 대량의 연결 을 만들어 백 엔 드 에 두 는 것 은 cpu 메모리 에 적지 않 은 압력 을 가 하 는 동시에 대역 폭 을 대폭 차지 합 니 다.
그리고 사내 들 은 이해 하기 어 려 운 통제 가능 한 방식 을 써 서 매번 백 스테이지 에 일정 수량의 프로 세 스 를 동시에 놓 지만 이해 하기 어렵다.
어느 날, 데이터 백업 스 크 립 트 를 하나 더 쓸 때 새로운 생각 이 들 었 습 니 다. HBASE 에 대량의 시계 가 있 기 때문에 단일 백업 이 너무 느 리 고 배경 Hadoop 자원 이 부족 합 니 다. 또한 그 시계 백업 이 성공 하거나 실 패 했 는 지 알 아야 합 니 다. 백 스테이지 에 만 놓 을 수 있 는 명령 이 너무 부족 합 니 다. 모든 프로 세 스 가 중단 되 었 습 니 다. 생각 한 후에 백업 문구 와 판단 을 함수 에 적 습 니 다.for 순환 을 이용 하여 함 수 를 배경 에 놓 습 니 다. 또한 변 수 를 설정 하여 판단 방식 으로 배경 에 놓 인 프로 세 스 수 를 검사 합 니 다. 충분 하 다 면 wait 를 실행 하고 프로 세 스 가 실 행 될 때 까지 기다 리 십시오. 스 크 립 트 는 다음 과 같 습 니 다.
#!/bin/bash
#
# 70 24
# bc HBASE Hadoop
LogDir='/var/log/data-backup'
mkdir $LogDir
LogFile='data-migration'
start(){
source /etc/profile >/dev/null
BackupTime=`date +%F`
Backup_hbase_command='org.apache.hadoop.hbase.mapreduce.Export'
HDFS_path='/backup'
local_path='/backup'
#
remove_day='3'
# concurrent_number
# , Hadoop , MapReduce ,
concurrent_number='1'
if [ ! -f ${LogDir} ];then
mkdir -p ${LogDir}
fi
}
# HBASE
#
backup_command(){
echo "[ `date +%F-%T` ] $i start backup,this is a tables $a"
# $i for i
hbase ${Backup_hbase_command} $i ${HDFS_path}/${BackupTime}/$i >>$LogDir/${LogFile}-$a.log 2>&1
#
if [ $? -eq 0 ];then
echo "[ `date +%F-%T` ] $i backup sucess"
else
echo "[ `date +%F-%T` ] $i backup error"
fi
}
HbaseBackup(){
echo "[ `date +%F-%T` ] Hbase backup start"
echo "list" |hbase shell >/dev/null
if [ $? -eq 0 ];then
echo "HBASE status is a: started"
else
echo "HBASE statua is a: stoped!"
exit
fi
a='1'
for i in `echo "list"|hbase shell |sed '1,6d'|sed '$d'|sed '$d'|sed '$d'`;do
# for , , ,
backup_command &
# 0, , wait ,wait ,
if [[ `echo "$a % ${concurrent_number}"|bc` == 0 ]];then
wait
a=`echo "$a + 1"|bc`
else
a=`echo "$a + 1"|bc`
fi
done
}
data_export_local(){
echo "[ `date +%F-%T` ] hdfs to local started"
hdfs dfs -copyToLocal ${HDFS_path}/${BackupTime} ${local_path}
echo "[ `date +%F-%T` ] hdfs to local stoped"
}
hive_backup(){
echo "[ `date +%F-%T` ] hive backup start"
backup_path='/backup/hive'
backup_time=`date +%F`
if [ ! -f ${backup_path} ];then
mkdir -p $backup_path
fi
hdfs dfs -copyToLocal /user/hive ${backup_path}
# y
mv ${backup_path}/hive ${backup_path}/hive-${backup_time}
hive_remove_time=`date -d "${remove_day} day ago" +%F`
rm -rf ${backup_path}/hive-${hive_remove_time}
echo "[ `date +%F-%T` ] hive backup end"
}
remove_time_backup(){
remove_time=`date -d "${remove_day} day ago" +%F`
hdfs dfs -rmr ${HDFS_path}/${remove_time}
rm -rf ${local_path}/${remove_time}
}
start >>$LogDir/${LogFile} 2>&1
HbaseBackup >>$LogDir/${LogFile} 2>&1
data_export_local >>$LogDir/${LogFile} 2>&1
remove_time_backup >>$LogDir/${LogFile} 2>&1
hive_backup >>$LogDir/${LogFile} 2>&1
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
셸 스 크 립 트 (다 중 스 레 드 대량 생 성 사용자)예 를 들 어 백업 데이터 베 이 스 는 100 개의 라 이브 러 리 가 있 고 정상 적 인 백업 효율 이 매우 낮 습 니 다.다 중 스 레 드 가 있 으 면 백업 하 는 데 10 시간 이 걸 릴 수도 있 었 는데 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.