[작은 도구] hdfs 경로 정보 획득 프로그램
프롤로그
셸 소스 코드
집행 문
생 성 결과
설명
머리말
자원 하락 의 타격 을 겪 은 후에 저 는 현실 을 깨 닫 고 마음 을 가 라 앉 히 고 눈앞 에 있 는 계획 이 있 는 것 처럼 보이 지만 사실은 곳곳에 불합리한 군집 을 처리 하기 로 결 정 했 습 니 다.입사 첫 주 금요일, 즉 며칠 전에 우리 스마트 데이터 부서 의 한 기 계 는 디스크 고장 으로 인해 지연 되 었 다 (운영 비 에 따 르 면 디스크 가 고장 나 서 작 동 하지 못 했다 고 한다). 그 당시 100 T 초 반 의 디스크 공간 은 85T 에 기록 되 었 고 저장 자원 이 매우 부족 하 다 고 할 수 밖 에 없 었 다.내 가 노드 가 지연 되 는 것 을 발견 한 후에 첫 번 째 반응 은 hdfs 의 고장 복구 체제 가 남 은 디스크 를 가득 채 울 수 있 을 까 하 는 것 이다. 그 당시 에 도 동료 들 이 백업 체 제 를 2 로 바 꾸 어 이 문 제 를 피 하 겠 다 고 제 기 했 지만 사람들 은 퇴근 할 때 까지 바 빠 서 이 문 제 를 처리 하지 못 했다.(설명 하 자 면, 나 는 신 입 각 방면 의 권한 제한 때문에 이 문 제 를 처리 하지 않 았 다)아니 나 다 를 까 토요일 저녁 에 단체 파업 을 했 습 니 다. 파업 의 원인 은 hdfs 가 고장 복 구 를 해서 디스크 를 90% 이상 채 웠 기 때 문 입 니 다. 자원 한도 값 을 초과 한 후에 노드 가 Yrn 에서 대외 적 으로 서 비 스 를 제공 하지 않 아서 전체 클 러 스 터 의 계산 자원 이 잠 겨 서 스케줄 이 모두 중단 되 었 습 니 다. 그 때 는 밤 11 시가 넘 어서 제 가 이 문 제 를 해결 하 라 고 불 렸 습 니 다. 그러면유사 한 상황 을 처리 한 사람 은 모두 알 고 있다. 이 문 제 를 해결 하려 면 두 가지 방법 이 있다. 하 나 는 확대 이다. 다른 하 나 는 데 이 터 를 삭제 하 는 것 이다. 확대 에 비해 데 이 터 를 삭제 하 는 방법 은 간단 할 뿐만 아니 라 효율 적 이다. 그러나 회사 hiv 창고 에서 유지 하 는 표 는 모두 외부 표 이다.그래서 저 는 어 리 석 은 명령 행 (예 를 들 어 hadop dfs - du/경로 | awk '{s + = $1} END {print s/1024/1024/1024,' G '}) 으로 삭제 가능 하고 공간 이 큰 파일 을 찾 아 상당 한 시간 과 정력 을 들 여 이 사건 을 처리 한 것 을 교훈 으로 삼 아 이 [경로 정보 획득 스 크 립 트] 를 빨리 썼 습 니 다.앞으로 저 와 동료 들 이 hdfs 파일 분포 내 역 을 신속하게 이해 하고 관련 문 제 를 분석 할 수 있 도록 도와 줄 수 있 습 니 다.
셸 소스 코드
#!/bin/bash
# $(dirname $0),
workdir=$(cd $(dirname $0); pwd)
date=`date +%Y-%m-%d-%H:%M:%S`
init(){
# ,
rm -rf $workdir/hdfs_detail.txt
touch $workdir/hdfs_detail.txt
chmod 777 $workdir/hdfs_detail.txt
rm -rf $workdir/path.txt
touch $workdir/path.txt
chmod 777 $workdir/path.txt
echo "========================================================================================================" >> $workdir/hdfs_detail.txt
echo " ___ _ __ _ __ __ " >> $workdir/hdfs_detail.txt
echo " | | /\\ \"--------| | | / / | |------\" \"--------\" \\ \\ / / " >> $workdir/hdfs_detail.txt
echo " | | / \\ / \"-------\" | | / / | |----\" | | \"----\" | \\ \\ / / " >> $workdir/hdfs_detail.txt
echo " | | / /\\ \\ | | | | / / | | | | | | | | \\ \\ / / " >> $workdir/hdfs_detail.txt
echo " | | / / \\ \\ | | | | / / | |----/ / | | | | \\ ^ / " >> $workdir/hdfs_detail.txt
echo " | | / / \\ \\ | | | || | | |-----\" | | | | | | " >> $workdir/hdfs_detail.txt
echo " | | / /------\\ \\ | | | | \\ \\ | | \\ \\ | | | | | | " >> $workdir/hdfs_detail.txt
echo " __ | | / /--------\\ \\ | | | | \\ \\ | | \\ \\ | | | | | | " >> $workdir/hdfs_detail.txt
echo " \\ \\___/ / / / \\ \\ \\ \"-------\" | | \\ \\ | | \\ \\ | \"----\" | | | TM。" >> $workdir/hdfs_detail.txt
echo " \\_____/ /_/ \\_\\ \"--------| |_| \\_\\ |_| \\_\\ \"--------\" |_| " >> $workdir/hdfs_detail.txt
echo "========================================================================================================" >> $workdir/hdfs_detail.txt
echo "-----------------------------------------[HDFS ]-------------------------------------------------" >> $workdir/hdfs_detail.txt
echo "[Init Time]:$date" >> $workdir/hdfs_detail.txt
echo "--" >> $workdir/hdfs_detail.txt
echo "--" >> $workdir/hdfs_detail.txt
# sed -i '/1111/a\2222' a.txt a.txt 1111 2222
}
hdfs_collect(){
echo " ----[ ]---- " >> $workdir/hdfs_detail.txt
echo "" >> $workdir/hdfs_detail.txt
echo "| | | |" >> $workdir/hdfs_detail.txt
hadoop dfs -ls / | awk '{print $8}' >> $workdir/path.txt
hadoop dfs -du / | awk '{S+=$1}{M+=$2}END{printf "%-12s%-6s%-12s%-6s%-10s
", S/1024/1024/1024/1024,"(T)",M/1024/1024/1024/1024,"(T)"," "}' >> $workdir/hdfs_detail.txt
hadoop dfs -du / | awk '{printf "%-12s%-6s%-12s%-6s%-10s
", $1/1024/1024/1024,"(G)",$2/1024/1024/1024,"(G)",$3}' >> $workdir/hdfs_detail.txt
echo "" >> $workdir/hdfs_detail.txt
echo "" >> $workdir/hdfs_detail.txt
}
hdfs_detail(){
echo " ----[ ]---- " >> $workdir/hdfs_detail.txt
echo "" >> $workdir/hdfs_detail.txt
#
cat $workdir/path.txt | while read line
do
#
if [ ${#line} != 0 ] && [ $line != "/auto_cron_flag" ] && [ $line != "/auto_cron_logs" ] && [ $line != "/auto_cron_script" ]; then
#
hadoop dfs -du $line | awk '{S+=$1}{M+=$2}END{printf "%-0s%-12s%-6s%-12s%-6s%-10s
","-- ", S/1024/1024/1024,"(G)",M/1024/1024/1024,"(G)","'$line'"}' >> $workdir/hdfs_detail.txt
rm -rf $workdir/path1.txt
touch $workdir/path1.txt
chmod 777 $workdir/path1.txt
hadoop fs -ls $line | awk '{print $8}' >> $workdir/path1.txt
#
cat $workdir/path1.txt | while read line1
do
#
if [ ${#line1} != 0 ]; then
hadoop dfs -du $line1 | awk '{S+=$1}{M+=$2}END{printf "%-0s%-12s%-6s%-12s%-6s%-10s
"," -- ", S/1024/1024/1024,"(G)",M/1024/1024/1024,"(G)","'$line1'"}' >> $workdir/hdfs_detail.txt
rm -rf $workdir/path2.txt
touch $workdir/path2.txt
chmod 777 $workdir/path2.txt
hadoop fs -ls $line1 | awk '{print $8}' >> $workdir/path2.txt
#
cat $workdir/path2.txt | while read line2
do
#
if [ ${#line2} != 0 ]; then
hadoop dfs -du $line2 | awk '{S+=$1}{M+=$2}END{printf "%-0s%-12s%-6s%-12s%-6s%-10s
"," -- ", S/1024/1024/1024,"(G)",M/1024/1024/1024,"(G)","'$line2'"}' >> $workdir/hdfs_detail.txt
rm -rf $workdir/path3.txt
touch $workdir/path3.txt
chmod 777 $workdir/path3.txt
hadoop fs -ls $line2 | awk '{print $8}' >> $workdir/path3.txt
#
cat $workdir/path3.txt | while read line3
do
#
if [ ${#line3} != 0 ]; then
hadoop dfs -du $line3 | awk '{S+=$1}{M+=$2}END{printf "%-0s%-12s%-6s%-12s%-6s%-10s
"," -- ", S/1024/1024/1024,"(G)",M/1024/1024/1024,"(G)","'$line3'"}' >> $workdir/hdfs_detail.txt
fi
done
fi
done
fi
done
echo "" >> $workdir/hdfs_detail.txt
fi
done
rm -rf $workdir/path.txt
rm -rf $workdir/path1.txt
rm -rf $workdir/path2.txt
rm -rf $workdir/path3.txt
}
init
hdfs_collect
hdfs_detail
echo "SUCCESS"
실행 문
원본 코드 를 hdfs detail. sh 에 복사 하고 붙 여 넣 은 다음 실행:
sh hdfs_detail.sh
결과 생 성
실행 이 끝 난 후에 (성공 적 으로 인쇄 된 SUCCESS 를 실행 합 니 다. 물론 중간 에 Ctrl + C 인 터 럽 트 프로그램 도 SUCCESS 를 출력 합 니 다) 같은 디 렉 터 리 에 hdfs detail. txt 라 는 파일 을 생 성 해 야 합 니 다. 생 성 효 과 는 다음 과 같 습 니 다.
========================================================================================================
___ _ __ _ __ __
| | /\ "--------| | | / / | |------" "--------" \ \ / /
| | / \ / "-------" | | / / | |----" | | "----" | \ \ / /
| | / /\ \ | | | | / / | | | | | | | | \ \ / /
| | / / \ \ | | | | / / | |----/ / | | | | \ ^ /
| | / / \ \ | | | || | | |-----" | | | | | |
| | / /------\ \ | | | | \ \ | | \ \ | | | | | |
__ | | / /--------\ \ | | | | \ \ | | \ \ | | | | | |
\ \___/ / / / \ \ \ "-------" | | \ \ | | \ \ | "----" | | | TM。
\_____/ /_/ \_\ "--------| |_| \_\ |_| \_\ "--------" |_|
========================================================================================================
-----------------------------------------[HDFS ]-------------------------------------------------
[Init Time]:2019-11-06-16:10:25
--
--
----[ ]----
| | | |
22.5673 (T) 67.8291 (T)
0 (G) 0 (G) /*******
0.000814012 (G) 0.00244204 (G) /*******
13.9856 (G) 41.9567 (G) /*******
7.47824 (G) 22.4347 (G) /*******
114.452 (G) 343.355 (G) /*******
0 (G) 0 (G) /*******
0 (G) 0 (G) /*******
20357.2 (G) 61137.6 (G) /*******
0.898082 (G) 3.06924 (G) /*******
0 (G) 0 (G) /*******
0.851672 (G) 2.55501 (G) /*******
2614.86 (G) 7907.95 (G) /*******
1.67638e-08 (G) 0.375 (G) /*******
----[ ]----
-- 0 (G) 0 (G) /*******
-- 114.452 (G) 343.355 (G) /*******
-- 114.452 (G) 343.355 (G) /*******/Docker
-- 79.268 (G) 237.804 (G) /*******/Docker/serv172_20_23_22
-- 0.0769568 (G) 0.23087 (G) /*******/Docker/serv172_20_23_22/docker_allinone_serv172_20_23_22.tar.gz.20190228201901
-- 26.5116 (G) 79.5347 (G) /*******/Docker/serv172_20_23_22/docker_allinone_serv172_20_23_22.tar.gz.20191104093001
-- 26.3217 (G) 78.965 (G) /*******/Docker/serv172_20_23_22/docker_allinone_serv172_20_23_22.tar.gz.20191105093001
-- 26.3578 (G) 79.0735 (G) /*******/Docker/serv172_20_23_22/docker_allinone_serv172_20_23_22.tar.gz.20191106093001
-- 35.1836 (G) 105.551 (G) /*******/Docker/serv172_20_2_24
-- 11.2747 (G) 33.824 (G) /*******/Docker/serv172_20_2_24/docker_allinone_serv172_20_2_24.tar.gz.20191104093001
-- 11.2812 (G) 33.8437 (G) /*******/Docker/serv172_20_2_24/docker_allinone_serv172_20_2_24.tar.gz.20191105093001
-- 11.7929 (G) 35.3786 (G) /*******/Docker/serv172_20_2_24/docker_allinone_serv172_20_2_24.tar.gz.20191106093001
-- 0.0625 (G) 0.1875 (G) /*******/Docker/serv172_20_2_24/docker_tomcat.tar.gz.20190228201901
-- 0.257463 (G) 0.772389 (G) /*******/Docker/serv172_20_2_24/docker_tomcat.tar.gz.20191104093001
-- 0.257463 (G) 0.772389 (G) /*******/Docker/serv172_20_2_24/docker_tomcat.tar.gz.20191105093001
-- 0.257463 (G) 0.772389 (G) /*******/Docker/serv172_20_2_24/docker_tomcat.tar.gz.20191106093001
-- 0 (G) 0 (G) /*******
-- 0 (G) 0 (G) /*******
-- 0 (G) 0 (G) /*******/cmtest
설명 하 다.
루트 디 렉 터 리 아래 에서 만 4 층 내 역 (파 티 션 시트 의 내 역 을 찾 을 수 있 습 니 다) 을 찾 았 습 니 다. 나머지 는 아래 에 쓰 지 않 았 습 니 다. 필요 한 친 구 는 자신의 수요 에 따라 몇 층 더 쓸 수 있 습 니 다. 성능 문제 만 주의 하면 됩 니 다. 실시 과정 에 문제 가 있 으 면 메 시 지 를 남 겨 교류 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[작은 도구] hdfs 경로 정보 획득 프로그램그 당시 에 도 동료 들 이 백업 체 제 를 2 로 바 꾸 어 이 문 제 를 피 하 겠 다 고 제 기 했 지만 사람들 은 퇴근 할 때 까지 바 빠 서 이 문 제 를 처리 하지 못 했다.(설명 하 자 면, 나 는 신 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.