我每天将5个文件(通过wget)保存到/ 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
我是否用“hadoop fs -put ...”语句替换回声线?它会是什么样子?
答案 0 :(得分: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
匹配。
答案 1 :(得分: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中的特定目录。