日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shell遍历hadoop目录的批量操作

發布時間:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell遍历hadoop目录的批量操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求背景

每天產生3T(約2.5W個gz壓縮文件)的DPI日志文件,因存儲等各種問題,需要盡可能的節約存儲。日志文件中有26個字段,根據業務需求需要提取6個字段。


解決方法

  • 通過shell腳本
  • 通過MR程序(推薦,本篇不做論述)
  • 結論: 經驗證得出的結論shell腳本大約5~10S處理一個文件,比較慢,對于這樣大量且分散的情況,不推薦,但可以提供一個思路。
    根據實際情況處理步驟包括:從hdfs獲取文件到本地存儲,解壓gz文件,通過awk逐行掃描獲取所需字段,重定向到文本文件,刪除解壓后的文件以便節省空間。


    粗略Shell實現

    #!/bin/sh ############################## ## 名稱: PickDataFromHdfs ## 描述: ## 參數: 日期 [20160104] ## 日期: 2016-01-04 ###############################外部參數 day_id=$1 echo $day_id#統計 curtime=`date +%Y%m%d%H%M%S`#將目錄保存到文件 echo "Get File List begin:$curtime" DIR="/home/hadoop/netlog/source/${day_id}" hadoop fs -ls ${DIR}|awk '{print $8}' > fileList.txt# 第一行數據為空,刪掉 sed -i '1d' fileList.txt echo "the first line is empty ,delte it successfully"#本地存儲目錄 LOCAL_DIR="/home/zte/DPI_DATA_EXTRA/dpi_data_temp" #循環遍歷,提取所需數據 cat /home/zte/DPI_DATA_EXTRA/fileList.txt | while read line doecho "*****************$line beigin ${curtime}*****************"#獲取hdfs文件 copyToLocal get都可以hadoop fs -get $line $LOCAL_DIRecho "${line} is moved to ${LOCAL_DIR} successfully"#解壓(未解壓待驗證)cd $LOCAL_DIRFileGZ=`ls $LOCAL_DIR`#gunzip gunzip $FileGZ#逐行提取所需字段File=`ls $LOCAL_DIR`echo "decompress file name :$File"awk -F'|' '{print $1,$8,$11,$16,$25,$26}' ${File} >>/home/zte/DPI_DATA_EXTRA/dpi_data_extra/picked_data.txtecho " ${File} data picked finished"#節省空間 刪除原始文件rm -rf ${File} echo "${File} is deleted successfully"# 文件上傳到hive TODOend=`date +%Y%m%d%H%M%S`echo "+++++++++++++the Job finishes , ${end}++++++++++++++++++++++++++"echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" done

    截取:
    /home/hadoop/netlog/source/20151229/2015122907591300361017015.txt.gz
    獲取2015122907591300361017015:

    awk -F / '{print $7}' fileList.txt|cut -d. -f1

    總結

    以上是生活随笔為你收集整理的Shell遍历hadoop目录的批量操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。