[英]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.