1

我每天(通过 wget)将 5 个文件保存到 /tmp,以便在 bash 脚本中加载到 hdfs。

donaldDuck-2013-07-20.zip
mickeyMouse-2013-07-20.zip
goofyGoof-2013-07-20.zip
plutoStar-2013-07-20.zip
bigBadWolf-2013-07-20.zip

文件名的日期部分是动态的。

然后我如何告诉hadoop加载5个文件中的每一个?我听说了一些关于循环的事情。

for file in /tmp/*; do
echo "Running ${file##*/} ...."
done

我是否将 echo 行替换为“hadoop fs -put ...”语句?它会是什么样子?

4

2 回答 2

2

您可以执行以下操作:

#!/bin/bash

when=$(date "+%Y-%m-%d") #output like 2013-07-23
names=(donaldDuck mickeyMouse goofyGoof plutoStar bigBadWolf)

for file in "${names[@]}"
do
        ls -l $file-$when.zip #output like donaldDuck-2013-07-23.zip
done

解释

名称存储在一个数组中$names。因此,我们可以用for file in "${names[@]}". 同时,我们将日期存储在 中$when,以便格式与 匹配$file-$when.zip

于 2013-07-23T11:20:09.183 回答
1

这是我要做的:

hdfsdir=/path/to/hdfs/output/dir
datethru=`date "+%Y-%m-%d" --date="3 days ago"` # replace by how many days ago you want
for i in `ls /tmp/*-$datethru.zip`; do
    hadoop fs -put $i $hdfsdir
done

这实际上将抓取目录中包含特定日期并以 .zip 结尾的所有文件,并将这些文件中的每一个上传到 hdfs 中的特定目录。

于 2013-07-23T12:00:42.777 回答