hdfs 로그 업로드 스 크 립 트 (2)

 
 서버 에서 로 그 를 끌 어 당 기 는 스 크 립 트 를 썼 습 니 다.
여러 서버 에서 로 그 를 끌 어 올 리 면 로그 이름 이 같 고 매일 두 개의 로그 파일 이 생 성 됩 니 다. 예 를 들 어 서버 마다 다음 과 같은 두 개의 파일 이 있 습 니 다: ok2011-04-24_24H.rar,ok_2011-04-24_12H.rar.분명히 모든 로 그 를 같은 디 렉 터 리 에 넣 어 처리 할 수 없 을 뿐만 아니 라, 두 파일 의 압축 을 동시에 풀 어야 다음 처리 가 가능 하 다. 나 는 awk 를 사용 하여 해당 명령 을 인쇄 한 다음 에 실행 할 생각 을 했다.

  
  
  
  
  1. #!/bin/bash 
  2. #2011-04-25 by qinshan.li 
  3. #download the track log 
  4. DIR="22 33 45 46 47 135 136 137" 
  5. DAY=$(/bin/date +%F) 
  6. #DAY=$(echo $1) 
  7.  
  8. for P in $DIR; do 
  9.   [[ -d "/lzo/jiaxing/track/$P" ]] || /bin/mkdir -p /lzo/jiaxing/track/$P 
  10.   MULU=/lzo/jiaxing/track/$P 
  11.  
  12. #Download the rar files. 
  13.   /usr/bin/wget -nc -r --exclude-directories=tmplog -nd -np -A "ok_${DAY}_*.rar" -P $MULU http://10.10.17.66:8003/"$P"/track/ 
  14.  
  15. #Create directory to save the decompressed rar files. 
  16.   n=$(/bin/ls $MULU/*.rar 2>/dev/null |/usr/bin/wc -l) 
  17.   if [[ "$n" != "0" ]]
  18. then 
  19.   [[ -d $MULU/$DAY ]] || /bin/mkdir -p $MULU/$DAY 
  20.  
  21.   /usr/bin/find $MULU -name "*${DAY}*.rar" |/bin/awk '{printf "/usr/local/bin/rar e %s %s/%s
    ",$1,"'$MULU'","'$DAY'"}' |/bin/sh >/dev/null 
  22.   if [[ "$?" = "0" ]]
  23. then 
  24.   if /bin/cat $MULU/$DAY/*.* >>$MULU/66_icast_"$P"_"$DAY".txt
  25. then
  26.     if /usr/local/bin/lzop -U -9 $MULU/66_icast_"$P"_"$DAY".txt 
  27.     then 
  28. if /usr/local/bin/lzop -t $MULU/66_icast_"$P"_"$DAY".txt.lzo 
  29.       then 
  30.       ~/hadoop-0.20.2-CDH3B4/bin/hadoop fs -moveFromLocal $MULU/66_icast_"$P"_"$DAY".txt.lzo /log/source/iCast_iFocus_track 
  31.         if [[ "$?" = "0" ]]
  32. then 
  33.         rm -rf $MULU/*  >/dev/null 2>&1
  34.         fi 
  35.        fi 
  36.       fi 
  37.     fi 
  38.     fi 
  39.   fi 
  40. done 

   이 스 크 립 트 는 wget 의 - N 인 자 를 더 이상 사용 하지 않 았 습 니 다. 동료 가 알려 주 었 기 때문에 이 로 그 는 HTTP 방식 으로 제공 되 지만 타임 스탬프 표 시 는 닫 혀 있 기 때문에 - N 인 자 는 쓸모 가 없습니다.
   - nc 인 자 를 추가 하면 wget 은 다운로드 한 파일 을 무시 합 니 다. 물론 이 파일 은 지난번 다운로드 후 업데이트 되 었 지만 wget 은 무시 할 수 있 습 니 다. 그러나 이러한 경 우 는 매우 드 물 습 니 다.
   이번에 도 awk 의 substr 함 수 를 사용 하여 필드 를 추출 하지 않 았 습 니 다. 이번 R 디 렉 터 리 길이 가 다 르 기 때문에 $MULU 와 $DAY 를 직접 사용 하 는 것 이 편리 합 니 다.설명 하고 자 하 는 것 은 $MULU 라 는 변수 입 니 다. 원래 $PATH 라 고 썼 는데 나중에 hadop 의 fs 명령 을 실행 하여 업로드 작업 을 할 때 오류 가 발생 했 습 니 다. $PATH 변 수 를 환경 변수의 $PATH 로 해 석 했 습 니 다!사용자 정의 변 수 를 설정 할 때 는 신중 해 야 할 것 같 습 니 다!

좋은 웹페이지 즐겨찾기