我在此路径" //aloha/log/folderlevel1/folderlevel2/"
这些level2文件夹中的每一个都将包含"empllog.txt","deptlog.txt","adminlog.txt"
等文件以及其他文件。
我希望复制此特定文件夹的内容(如果它们是在过去24小时内创建的)仅当这三个文件存在于HDFS cloudera集群中时。但如果其中一个文件不存在,则不应复制该特定文件夹。另外我需要保留folderstructre。
即在HDFS中它应该是"/user/test/todaydate/folderlevel1/folderlevel2"
我写了下面的shell脚本,将文件复制到hdfs并创建了日期文件夹。但不确定如何进一步推进UNC Paths&其他标准。
day=$(date +%Y-%m-%d)
srcdir="/home/test/sparkjops"
stdir="/user/test/$day/"
hadoop dfs -mkdir $day /user/test
for f in ${srcdir}/*
do
if [ $f == "$srcdir/empllog.txt" ]
then
hadoop dfs -put $f $stdir
elif [ $f == "$srcdir/deptlog.txt" ]
then hadoop dfs -put $f $stdir
elif [ $f == "$srcdir/adminlog.txt" ]
then hadoop dfs -put $f $stdir
fi
done
我试图像下面那样更改UNC路径。它没有做任何事情。没有错误&也没有复制内容。
srcdir="//aloha/log/*/*"
srcdir='//aloha/log/*/*'
srcdir="\\aloha\log\*\*"
感谢所有帮助。 感谢。
编辑1:
我用代码sh -x调试模式运行它。还用bash -x运行它(只是为了检查)。但它返回该文件未找到错误如下
test@ubuntu:~/sparkjops$ sh -x ./hdfscopy.sh
+ date +%Y-%m-%d
+ day=2016-12-24
+ srcdir= //aloha/logs/folderlevel1/folderlevel2
+ stdir=/user/test/2016-12-24/
+ hadoop dfs -mkdir 2016-12-24 /user/test
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
mkdir: `2016-12-24': File exists
mkdir: `/user/test': File exists
+ //aloha/logs/folderlevel1/folderlevel2/* = //aloha/logs/folderlevel1/folderlevel2/empllog.txt.txt
./hdfscopy.sh: 12: ./hdfscopy.sh: //aloha/logs/folderlevel1/folderlevel2/*: not found
+ //aloha/logs/folderlevel1/folderlevel2/* = //aloha/logs/folderlevel1/folderlevel2/deptlog.txt.txt
./hdfscopy.sh: 12: ./hdfscopy.sh: //aloha/logs/folderlevel1/folderlevel2/*: not found
+ //aloha/logs/folderlevel1/folderlevel2/* = //aloha/logs/folderlevel1/folderlevel2/adminlog.txt.txt
./hdfscopy.sh: 12: ./hdfscopy.sh: //aloha/logs/folderlevel1/folderlevel2/*: not found
test@ubuntu:~/sparkjops$
但是无法理解为什么它不是从那条路上读的。我也尝试了不同的转义序列(每个斜杠的双打,正如我们在窗口文件夹路径中所做的那样)。但没有人工作。所有都抛出相同的错误消息。我不知道如何在脚本中读取此文件。任何帮助将不胜感激。