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

6820 단어 shell직장레저
hdfs 에 파일 을 업로드 하기 위해 서 우 리 는 스 크 립 트 를 쓴 적 이 있 고 웹 dav 를 만 든 적 이 있 습 니 다.그러나 원래 스 크 립 트 를 쓸 때, 우 리 는 로 그 를 Liux 서버 에 다운로드 하여 디스크 I/O 작업 이 한 단계 더 늘 었 고, webdav 를 통 해 windows 에서 hdfs 로 로 로 그 를 직접 업로드 하 는 데 또 어려움 을 겪 었 다.
    다음 단 계 는 flume 등 로그 수집 시스템 을 테스트 하여 hdfs 에 로 그 를 더 편리 하고 실시 간 으로 업로드 할 수 있 는 지 확인 하고 싶 습 니 다.
    그러나 이 제 는 스 크 립 트 방식 으로 돌아 가 겠 습 니 다. 그러나 생각 을 바 꾸 었 습 니 다. 원본 로 그 는 windows 에서 lzo 형식 으로 직접 처리 한 다음 공유 디 렉 터 리 에 놓 습 니 다. 우리 Liux 서버 는 이 windows 공유 디 렉 터 리 를 마 운 트 한 다음 에 Hadoop 명령 으로 업로드 하면 로 컬 디스크 I/O 작업 이 줄 어 들 지 않 습 니까?
생각 이 중요 한 것 같 습 니 다.
    이번 스 크 립 트 는 두 대의 Liux 서버 로 windows 공유 디 렉 터 리 를 마 운 트 합 니 다. 두 대의 Liux 서버 에서 모두 스 크 립 트 를 실행 합 니 다. 업로드 하기 전에 로그 파일 이 충돌 하 는 지 판단 하고 이름 을 바 꾸 는 방법 으로 독점 적 인 목적 을 달성 해 야 합 니 다.

  
  
  
  
  1. #!/bin/bash 
  2. # 2012-03-02 by qinshan.li 
  3. export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin 
  4. windows="/hdfs/track_1469 /hdfs/track_1470 /hdfs/track_1722" 
  5. TRACK=/log/source/iCast_iFocus_track 
  6.  
  7. for DIR in $windows 
  8. do 
  9.     find $DIR -type f -name "*.lzo" |while read FILE 
  10.     do 
  11.         if [ -f "$FILE" ]; then 
  12.             if ! lsof |grep $FILE; then 
  13.                  Original=$(echo $FILE |awk -F '/' '{print $4}') 
  14.                  New=${L_N}_170 
  15.                  mv $DIR/$Original $DIR/$New 
  16.                  L_size=$(ls -l $DIR/$New |awk '{print $5}') 
  17.  
  18.                  if ~/hadoop-0.20.2-CDH3B4/bin/hadoop fs -copyFromLocal $DIR/$New $TRACK 
  19.                  then 
  20.                      H_size=$(~/hadoop-0.20.2-CDH3B4/bin/hadoop fs -ls $TRACK/$New |awk '{print $5}') 
  21.                      RAND=0 
  22.  
  23.                      while [ "$H_size" -ne "$L_size" ]; do 
  24.                          RAND=$(($RAND+1))  
  25.                          if [ $RAND -gt 5 ]; then 
  26.                              echo -e "Have tried 5 times to upload $FILE !" |mail -s "track jiaxing upload failure" -c [email protected] [email protected] -- -f [email protected] -F bb 
  27.                              break 
  28.                          fi 
  29.  
  30.                          ~/hadoop-0.20.2-CDH3B4/bin/hadoop fs -rm $TRACK/$New 
  31.                          ~/hadoop-0.20.2-CDH3B4/bin/hadoop fs -copyFromLocal $DIR/$New $TRACK 
  32.                      done 
  33.                  fi 
  34.  
  35.                  ~/hadoop-0.20.2-CDH3B4/bin/hadoop fs -mv $TRACK/$New $TRACK/$Original 
  36.                  rm -f $DIR/$New 
  37.              fi 
  38.          fi 
  39.      done 
  40. done 

    계획 작업 을 할 때 스 크 립 트 를 써 서 위의 스 크 립 트 가 실행 되 고 있 는 지 판단 하 세 요. 그렇다면 잠시 만 기 다 려 보 세 요. 아니면 source 방식 으로 위의 스 크 립 트 를 호출 하 세 요.

  
  
  
  
  1. #!/bin/bash 
  2. # 2012-03-02 by qinshan.li 
  3. # 
  4. if [ -z "$(/usr/bin/pgrep aa.sh)" ] 
  5. then 
  6.     echo -e "$(/bin/date +%F_%H:%M) Now running aa.sh" >>/hdfs/bb.log 
  7.     source /hdfs/aa.sh 
  8. else 
  9.     echo -e "$(/bin/date +%F_%H:%M) The script aa.sh is running." >>/hdfs/bb.log 
  10. fi

좋은 웹페이지 즐겨찾기