[작은 도구] hdfs 경로 정보 획득 프로그램

24987 단어 CentosHadoopHDFS
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 층 내 역 (파 티 션 시트 의 내 역 을 찾 을 수 있 습 니 다) 을 찾 았 습 니 다. 나머지 는 아래 에 쓰 지 않 았 습 니 다. 필요 한 친 구 는 자신의 수요 에 따라 몇 층 더 쓸 수 있 습 니 다. 성능 문제 만 주의 하면 됩 니 다. 실시 과정 에 문제 가 있 으 면 메 시 지 를 남 겨 교류 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기