我正面临着关于执行cut,tail,sort等操作的问题,因为我能够在Unix Shell Environment中对文件进行操作。
我遇到的情况是,我希望文件中的最高时间戳没有按时间戳排序并存储在说' X'然后通过' X'作为执行MR作业时MapReducer驱动程序类的参数。
在本地模式下,很容易做到这一点:
cut -d, -f <<fieldIndexNo>> <<FileName>> | sort -n | tail -1
这给了我最大的时间戳。
现在在分布式模式下,如何执行此类操作。或者换句话说,我们可以使用哪些技巧来帮助解决此类问题,
我不希望触发Mapreduce作业找到最大时间戳,然后将其传递给另一个Map Reduce Job。
请建议。 如果需要更多信息,请告诉我。
由于
答案 0 :(得分:1)
我将假设文件存储在HDFS中,而不是存储在每个节点上的本地文件系统上。在这种情况下,您只有两个选项:
读取本地shell中的所有文件,并像以前一样进行过滤。请注意,这是非常缓慢,非常低效,并完全反对hadoop的想法。但你可以这样做:
hadoop fs -cat <foldername>/* | cut -d, -f <<fieldIndexNo>> <<FileName>> | sort -n | tail -1
写一个有效的猪作业(或火花作业或...)。它应该是一个简单的最大3行脚本,按时间戳对文件进行排序,然后取得最高1.然后将此数字存储在HDFS上。这将在每个节点上并行执行,并且比第一个解决方案快得多。