如何自动将zip文件从本地文件系统复制到HDFS

时间:2017-01-21 07:50:04

标签: shell hadoop hdfs

据我所知ARequest,此命令可将复制文件复制到HDFS。我不想手动复制,因为我每周从源获取文件,每次都很难手动复制。

以下是我的要求。

当我将copyFromLocal <localSrc> <dest>放到本地文件系统路径时:file.zip文件应自动从本地吸收并复制到HDFS路径,如/usr/data/ingestion/

有可能吗?或任何框架支持这样的功能?

由于

1 个答案:

答案 0 :(得分:0)

您可以像这样编写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

如果有*.ready个文件,那么shell脚本应该每隔一五分钟检入一次,如果是,那么只需复制file.zip并删除.ready文件后复制到{{1 }}:

像这样......

hdfs