mapreduce—如何在hadoop中执行类似shell脚本的操作

ecr0jaav  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(394)

当我在unixshell环境中对文件执行剪切、尾部、排序等操作时,我遇到了一个问题。
我遇到了这样一种情况:我希望文件中的最高时间戳不按时间戳排序,并将其存储在say'x'中,然后在执行mr作业时将'x'作为参数传递给mapreducer驱动程序类。
在本地模式下,很容易做到这一点:

cut -d, -f <<fieldIndexNo>> <<FileName>> | sort -n | tail -1

这给了我最好的时间戳。
现在在分布式模式下,如何执行这些操作,或者换句话说,我们可以使用什么技巧来帮助解决这些问题,
我不希望触发mapreduce作业来查找最大的时间戳,然后将其传递给另一个mapreduce作业。
好心的建议。如果需要更多信息,请告诉我。
谢谢

y53ybaqx

y53ybaqx1#

我假设文件存储在hdfs中,而不是每个节点上的本地文件系统中。在这种情况下,您只有2个选项:
读取本地shell中的所有文件,并像以前一样进行筛选。请注意,这是非常缓慢的,非常低效的,完全反对hadoop的想法。但你可以这样做: hadoop fs -cat <foldername>/* | cut -d, -f <<fieldIndexNo>> <<FileName>> | sort -n | tail -1 写一个Pig的工作(或Spark工作或……),这是有效的。它应该是一个简单的max 3行脚本,它按时间戳对文件进行排序并取前1行。然后把这个数字存储在hdfs上。这将在每个节点上并行执行,并且比第一个解决方案快得多。

相关问题