java - Hadoop:当我们使用 NLineInputFormat 时,Mappers 是否并行运行?

标签 java hadoop mapreduce hdfs mapper

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

我相信这是不可能的!

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

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

最佳答案

要使 NLineInputFormat 正常工作,每个拆分都需要知道第 x N 行的起始位置。正如您在对 Tariq 的回答的评论中指出的那样,映射器不能只知道第 3 行(香蕉从哪里开始),它会从 map 的 InputSplit 获取此信息。

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

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

我自己从未使用过这种输入格式,但我想当您需要为一个较小的输入文件中的每一行执行大量 CPU 密集型工作时,它可能最适合使用 - 因此而不是 1 个映射器完成所有工作一个 100 条记录的文件,您可以跨多个映射器划分负载(比如 10 个映射器上的 10 行)。

关于java - Hadoop:当我们使用 NLineInputFormat 时,Mappers 是否并行运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19039603/

相关文章:

处理 PDF 文件的 Java MapReduce 程序

java - 带有java的特定语言虚拟键盘

java - MapReduce 是否需要与 HDFS 一起使用

hadoop - YARN UI 中的作业优先级在哪里?

hadoop - Hadoop 中的伪分布式和完全分布式模式之间是否存在显着的性能差异?

hadoop - 如何启用hdfs和映射的审核日志?

java - 减少阶段的 Mapreduce java 堆空间错误

java - 如何为一个方法定义多个实现?

java - Java 中的 Opencv Android 模板匹配

java - 从 TCP 套接字读取 JPEG 字节 (Android)