使用hadoop map reduce打印输入文件的第一行和最后一行的最佳方法是什么?
例如,如果我有一个10gb的文件,并且典型的块大小是128mb,那么通过保持默认配置就可以调用大约80个Map器,这意味着不能正确地处理分割大小
所以现在将调用80个Map器我如何区分框架如何分配分割大小意味着开始分割大小偏移量或Map器的编号。
所以简单地说,我不能盲目地把逻辑放在我的Map函数中,这样它也会应用到其他Map器中。
一个解决方案我可以考虑使用一个Map器,保持块大小为文件大小,这样我就可以把功能放在Map函数中,但这样我就不能使用并行计算了。
有什么有效的方法吗?
1条答案
按热度按时间dfddblmv1#
你可以尝试使用“hadoopfs”命令分别存储第一行和最后一行,然后在上面运行map reduce作业吗。hadoop有一个特定的tail命令,它直接给出文件中的最后n行。
这就是我所尝试的:
文件大小:2.2mb
第一句话:取得第一是直截了当的,做一个猫,并采取头-n1 hadoop fs-cat$文件|头-n1采取的时间:4s
最后一句话:有两种方法,一种是做猫和做尾巴。但由于文件大小如果很大这会很长。
所用时间:39秒
但幸运的是,这里有尾部指挥部前来救援。您可以对文件执行hadoofs-tail,所用时间与head命令相同。根据文档:显示要标准输出的文件的最后千字节-f选项可以像在unix中一样使用
所用时间:4秒
你可以在你的文件上试试这个,然后检查时差。