据我所知 copyFromLocal <localSrc> <dest> 此命令用于将文件复制到hdfs。我不想手动复制,因为我每周都从源代码处获取文件,每次手动复制都很困难。以下是我的要求。当我掉下去的时候 file.zip 到本地文件系统路径: /usr/data/ingestion/ 文件应自动从本地吸收并复制到hdfs路径,如 hdfs://usr/data/raw/file.zip 有可能吗?或者任何框架都支持这种特性?谢谢
copyFromLocal <localSrc> <dest>
file.zip
/usr/data/ingestion/
hdfs://usr/data/raw/file.zip
wtlkbnrh1#
您可以这样编写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
p、 s:修复语法错误,如果有,因为这是没有测试和回答从移动应用程序进一步在本地路径上删除zip文件的步骤中,可以删除空文件:例如,你在本地的辍学应该完成以下两个步骤:
original file to copy: file.zip empty file copied as: file.zip.ready
然后shell脚本应该每隔一到五分钟检查一次,如果有的话 *.ready 文件,如果有的话,那就复制一下 file.zip 并移除 .ready 复制到后的文件 hdfs :像这样的。。。
*.ready
.ready
hdfs
# !/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
1条答案
按热度按时间wtlkbnrh1#
您可以这样编写shell脚本…并计划每天从cron或手动运行:
p、 s:修复语法错误,如果有,因为这是没有测试和回答从移动应用程序
进一步在本地路径上删除zip文件的步骤中,可以删除空文件:
例如,你在本地的辍学应该完成以下两个步骤:
然后shell脚本应该每隔一到五分钟检查一次,如果有的话
*.ready
文件,如果有的话,那就复制一下file.zip
并移除.ready
复制到后的文件hdfs
:像这样的。。。