Hadoop:当我们使用 NLineInputFormat 时,映射器是否并行运行



如果是,HDFS如何将输入文件拆分为N行以由每个映射器读取?

我相信这是不可能的!

当拆分器需要偏移量或字节来拆分时,可以在不处理整个输入文件的情况下进行拆分。

但是,当""或换行符的数量很重要时,在拆分之前,有必要处理总输入文件(以计算换行符(。

为了使NLineInputFormat工作,每个拆分都需要知道第 x N 行的开始位置。正如您在对 Tariq 的回答的评论中指出的那样,映射器不仅知道第 3 行(香蕉(的起点,它还从地图的InputSplit中获取此信息。

这实际上是在输入格式的getSplitsForFile方法中处理的,该方法打开每个输入文件,并发现每 N 行开始的字节偏移量(并生成一个由 Map 任务处理的InputSplit(。

可以想象,这对于大型输入文件(或大型输入文件集(来说不能很好地扩展,因为InputFormat需要打开并读取每个文件以发现拆分边界。

我自己从未使用过这种输入格式,但我想当您对小型输入文件中的每一行进行大量 CPU 密集型工作时,最好使用它 - 因此,与其让 1 个映射器为 100 个记录文件完成所有工作,不如将负载分区到多个映射器(例如 10 个映射器中的 10 行(。

是的。

有可能!

原因:

该机制仍然相同,适用于原始数据。NLineInputFormat 中的 N 表示每个映射器接收的输入行数。准确地说,记录数。由于NLineInputFormat使用LineRecordReader,因此每行都是一条记录。它不会改变创建拆分的方式,这通常基于 HDFS 块的大小(请记住 NLineInputFormat 是 FileInputFormat 家族的成员(。

相关内容

  • 没有找到相关文章

最新更新