【问题标题】:How to print first and last line of file in hadoop?如何在hadoop中打印文件的第一行和最后一行?
【发布时间】:2014-10-14 12:48:01
【问题描述】:

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

例如,如果我有一个 10 GB 的文件并且典型的块大小是 128 MB,那么大约 80个映射器将被调用,保持默认配置意味着不正确地操作分割大小

所以现在将调用 80 个映射器,我将如何区分框架如何分配拆分大小意味着开始拆分大小偏移或数字到哪个映射器。

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

我可以考虑使用一个映射器的一种解决方案,方法是将块大小保持为文件大小,这样我可以将功能放入映射函数中,但这样我将无法使用并行计算。

有什么有效的方法吗?

【问题讨论】:

  • Mapper 将获取键值对,那么您将如何识别哪个是第一个和哪个是最后一个?我认为你看的最好的地方是 inputSplit。

标签: java hadoop mapreduce


【解决方案1】:

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

这是我尝试过的:

文件大小:2.2MB

第一行:获得第一是直截了当的,做一只猫并采取头部 -n1 hadoop fs -cat $文件|头-n1 耗时:4s

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

hadoop fs -cat $file | tail -n1 

耗时:39 秒

但幸运的是,这里有 tail 命令来救援。您可以对文件执行 hadoo fs -tail ,所用时间与 head 命令相同。根据文档:将文件的最后一千字节显示到标准输出。 -f 选项可以像在 Unix 中一样使用

hadoop fs -tail | $file | tail -n1

耗时:4 秒

你可以在你的文件上试试这个并检查时差。

【讨论】:

  • 我不希望这样,我知道通过 unix 实用程序你可以轻松过滤我想知道的关于 map reduce 的问题
猜你喜欢
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 2016-01-19
相关资源
最近更新 更多