如何在Hadoop中执行类似操作的shell脚本

时间:2015-11-20 07:48:13

标签: hadoop mapreduce apache-pig bigdata

我正面临着关于执行cut,tail,sort等操作的问题,因为我能够在Unix Shell Environment中对文件进行操作。

我遇到的情况是,我希望文件中的最高时间戳没有按时间戳排序并存储在说' X'然后通过' X'作为执行MR作业时MapReducer驱动程序类的参数。

在本地模式下,很容易做到这一点:

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

这给了我最大的时间戳。

现在在分布式模式下,如何执行此类操作。或者换句话说,我们可以使用哪些技巧来帮助解决此类问题,

我不希望触发Mapreduce作业找到最大时间戳,然后将其传递给另一个Map Reduce Job。

请建议。 如果需要更多信息,请告诉我。

由于

1 个答案:

答案 0 :(得分:1)

我将假设文件存储在HDFS中,而不是存储在每个节点上的本地文件系统上。在这种情况下,您只有两个选项:

  • 读取本地shell中的所有文件,并像以前一样进行过滤。请注意,这是非常缓慢,非常低效,并完全反对hadoop的想法。但你可以这样做:

    hadoop fs -cat <foldername>/* | cut -d, -f <<fieldIndexNo>> <<FileName>> | sort -n | tail -1

  • 写一个有效的猪作业(或火花作业或...)。它应该是一个简单的最大3行脚本,按时间戳对文件进行排序,然后取得最高1.然后将此数字存储在HDFS上。这将在每个节点上并行执行,并且比第一个解决方案快得多。