如何在hadoop中打印文件的第一行和最后一行?

时间:2014-10-14 12:48:01

标签: java hadoop mapreduce

使用hadoop map reduce打印输入文件的第一行和最后一行的最佳方法是什么?

例如,如果我有一个10 GB的文件,典型的块大小是128 MB左右 通过保持默认配置意味着不能正确操作分割大小来调用80个映射器

所以现在将调用80个映射器,我将如何区分框架如何分配分割大小意味着启动分割大小偏移量或映射器的数量。

所以我不能盲目地将逻辑放在我的地图函数中,这样它也会应用于其他映射器。

一个解决方案我可以想到使用一个映射器,通过保持块大小为文件大小,这样我可以将功能放在map函数中,但这样我就无法使用并行计算。

任何有效的方法吗?

1 个答案:

答案 0 :(得分:0)

你可以尝试“hadoop fs”命令分别存储第一行和最后一行,然后在其上运行map reduce作业。 hadoop有一个特定的tail命令,直接给出文件中的最后n行。

这就是我的尝试:

文件大小:2.2MB

第一行:先行先行,做一只猫然后带头-n1     hadoop fs -cat $ file |头-n1 所用时间:4s

最后一行:有两种方法可以做到这一点,一种是做猫做尾巴。但是,如果文件大小很大,这将很长。

hadoop fs -cat $file | tail -n1 

所花费的时间:39秒

但幸运的是,这里有救援指令。你可以在你的文件上做一个hadoo fs -tail,所用的时间与head命令相同。根据文档:显示文件的最后一千字节到stdout。 -f选项可以在Unix中使用

hadoop fs -tail | $file | tail -n1

所用时间:4秒

您可以在文件中尝试此操作并检查时差。