我在此路径中有unc路径文件夹 " //aloha/log/folderlevel1/folderlevel2/"
每个level2文件夹都有如下文件 "empllog.txt","deptlog.txt","adminlog.txt"
其他文件也很少。
如果这些文件夹是在过去24小时内创建的,我想复制它们的内容&仅当这3个文件存在于hdfs cloudera集群中时才复制。但是如果其中一个文件不存在,则不应复制该特定文件夹。我还需要保存folderstructure。
i、 在hdfs中应该是 "/user/test/todaydate/folderlevel1/folderlevel2"
我已经写了下面的shell脚本复制文件到hdfs与日期文件夹创建。但不确定如何进一步使用unc路径和其他标准。
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$
但无法理解为什么它不是从这条道路上阅读。我也尝试过不同的转义序列(每个斜杠用双斜杠,正斜杠和windowfolderpath一样)。但都没用。所有人都抛出相同的错误消息。我不知道如何在脚本中读取此文件。任何帮助都将不胜感激。
暂无答案!
目前还没有任何答案,快来回答吧!