首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用shell脚本每4分钟查找HDFS (Hadoop)上的目录中是否有新文件

如何使用shell脚本每4分钟查找HDFS (Hadoop)上的目录中是否有新文件
EN

Stack Overflow用户
提问于 2015-03-25 11:27:59
回答 2查看 1.6K关注 0票数 0

我在HDFS上有一个目录,例如: /user/customers,在这个目录中,我每3分钟转储客户的数据文件,我想编写一个shell脚本来检查这个文件夹,如果一个新的文件可用,那么该文件数据将被放入HBASE中,我已经知道了如何将数据放入HBASE。但是我对shell脚本非常陌生,我想知道如何获得新的文件名。

我的hadoop命令将文件数据放在HBASE中,如下所示:

代码语言:javascript
复制
hadoop jar /opt/mapr/hbase/hbase-0.94.12/hbase-0.94.12-mapr-1310.jar importtsv -Dimporttsv.separator=, -Dimporttsv.columns=HBASE_ROW_KEY,cust:phno,cust:name,cust:memebershiptype /user/tablename customer.csv

现在的想法是用最近转储到文件夹中的文件名替换这个customer.csv文件名,然后运行这个命令。

因此,如果没有错,我需要一个cron作业来完成调度部分。但是,我需要关于如何在上面提到的命令中获得新文件名的逻辑。然后,我接下来要学习的部分是crontab,用于每4分钟调度一次。请指导专家。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-25 13:25:27

试试这个剧本。它将给idea.basically首先列出文件,并将它们存储到customer_all_file.txt.in以循环传递文件名,将文件名存储到已处理的files.difference命令中,查找新文件并将它们存储到need_to_processed files.its中,非常简单地遍历它。

代码语言:javascript
复制
hadoop fs -ls hdfs://IPNamenode/user/customers/  | sed '1d;s/  */ /g' | cut -d\  -f8 |  xargs -n 1 basename > /home/givepath/customer_all_file.txt


diff /home/givpath/customer_all_files.txt /home/givepath/customer_processedfiles.txt > /home/givepath/need_to_process.txt

for line in `awk '{ print $2 }' /home/givepath/need_to_process.txt`;
do
echo "$line"

hadoop jar /opt/mapr/hbase/hbase-0.94.12/hbase-0.94.12-mapr-1310.jar importtsv -Dimporttsv.separator=, -Dimporttsv.columns=HBASE_ROW_KEY,cust:phno,cust:name,cust:memebershiptype /user/tablename $line


echo "$line" >> /home/givepath/customer_already_processedfiles.txt

done
票数 1
EN

Stack Overflow用户

发布于 2015-03-25 11:47:39

重命名部件:

您的csv文件是否都有与customer.csv相同的名称?如果是,则需要在将每个文件上载到hdfs时重命名它们。

Crontab部件:

您可以每4分钟运行一次shell脚本,方法是:

代码语言:javascript
复制
*/4 * * * * /your/shell/script/path

通过在终端中键入crontab -e添加这一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29254382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档