hadoop:当我们使用nlineinputformat时,Map器是并行运行的吗?

beq87vna  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(279)

如果是,hdfs如何将输入文件拆分为n行以供每个Map器读取?
我相信这是不可能的!
当拆分器需要偏移量或字节进行拆分时,可以在不处理整个输入文件的情况下进行拆分。
但是当'\n'或新行字符的数目很重要时,在拆分之前,有必要处理整个输入文件(以计算新行字符)。

nlejzf6q

nlejzf6q1#

对。
这是可能的!
原因:
该机制仍然是相同的,并对原始数据起作用。nlineinputformat中的n表示每个Map器接收的输入行数。准确地说,记录的数量。因为nlineinputformat使用linerecordreader,所以每一行都是一条记录。它不会改变创建拆分的方式,通常基于hdfs块的大小(请记住nlineinputformat是fileinputformat家族的成员)。

xdyibdwo

xdyibdwo2#

为了 NLineInputFormat 要工作,每个分割都需要知道第x n行从哪里开始。正如你在对塔里克的回答的评论中所指出的,Map绘制者不能只知道第三行(香蕉)从哪里开始,它从Map的 InputSplit .
这实际上是在输入格式的 getSplitsForFile 方法,该方法打开每个输入文件,并发现每个第n行开始的字节偏移量(并生成一个 InputSplit 由Map任务处理)。
正如您所想象的,对于大型输入文件(或大型输入文件集),这并不能很好地扩展为 InputFormat 需要打开并读取每个文件来发现分割边界。
我自己从来没有使用过这种输入格式,但我认为最好是在一个较小的输入文件中的每一行都有大量cpu密集型工作要做的时候使用这种格式,这样就可以跨多个Map器(比如10个Map器中的10行)划分负载,而不是由一个Map器来完成100个记录文件的所有工作。

相关问题