簡體   English   中英

如何自動將zipfile從本地文件系統復制到HDFS

[英]How to copy zipfiles automatically from local file system to HDFS

據我所知, copyFromLocal <localSrc> <dest>該命令可將文件復制到HDFS。 我不想手動復制,因為我每周都要從源中獲取文件,因此每次都很難手動復制。

以下是我的要求。

當我將file.zip拖放到本地文件系統路徑時: /usr/data/ingestion/文件應自動從本地吸收並復制到HDFS路徑,如hdfs://usr/data/raw/file.zip

可能嗎? 還是任何框架都支持這種功能?

謝謝

您可以像這樣編寫shell腳本...並計划每天從cron或手動運行:

#!/bin/sh
local_zip_dir=/home/username/data
hdfs_zip_dir=/user/cloudera/data

for local_zip_file in $(ls -1 $local_zip_dir/*.zip)
do
   file_name=$(echo $local_zip_file|awk -F '/' '{print $NF}')
   if hadoop fs -test –e  $hdfs_zip_dir/$file_name;
   then
               echo "$local_zip_file already copied to hdfs"
   else
               echo "Coping $local_zip_file to $hdfs_zip_dir"
               hadoop fs -copyFromLocal $local_zip_file $hdfs_zip_dir/$file_name
   fi
done

PS:修復語法錯誤(如果有的話),因為未經移動應用程序測試和回答


在將zip文件拖放到本地路徑的步驟中,進一步可以刪除空文件:

例如,您到本地去應該執行以下兩個步驟:

original file to copy: file.zip
empty file copied as:  file.zip.ready

那么shell腳本應該每隔一到五分鍾檢查一次*.ready文件,如果存在,那么只需復制file.zip並在復制到hdfs之后刪除.ready文件:

像這樣的東西

#!/bin/sh
local_zip_dir=/home/username/data
hdfs_zip_dir=/user/cloudera/data

while(true)
do  
 for local_zip_file in $(ls -1 $local_zip_dir/*.ready)
 do
   file_name=$(echo $local_zip_file|awk -F '/' '{print $NF}'|awk -F '.' '{print $1,$2}'|sed 's/ /./')
   if hadoop fs -test –e  $hdfs_zip_dir/$file_name;
   then
               echo "$local_zip_file already copied to hdfs"
   else
               echo "Coping $local_zip_file to $hdfs_zip_dir"
               hadoop fs -copyFromLocal $local_zip_file $hdfs_zip_dir/$file_name
               #lets delete .ready file
               rm -f $local_zip_file 
   fi
 done
#sleep for 5 minutes
sleep 300
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM