gpt4 book ai didi

hadoop - fs -put(或 copyFromLocal)和数据类型感知

转载 作者:可可西里 更新时间:2023-11-01 16:26:54 27 4
gpt4 key购买 nike

如果我使用 hadoop fs -put 文件名将大小为 117MB 的文本文件上传到 HDFS,我可以看到一个数据节点包含一个大小为 64.98MB(默认文件拆分大小)的文件部分,另一个数据节点包含一个大小为 64.98MB 的文件部分48.59MB。

我的问题是这个拆分位置是否是以数据感知方式计算的(例如以某种方式识别文件是文本并因此在“\n”处拆分文件)。

我意识到 InputFileFormat 可用于告诉正在运行的作业如何以智能方式拆分文件,但由于我没有在 fs -put 命令中指定文件类型,我想知道是否(以及如何)在这种情况下将进行智能拆分。

艾莉

最佳答案

我认为你在这里混淆了两件事,以下两种类型的拆分是完全分开的:

  1. 将文件拆分为 HDFS block
  2. 拆分文件以分发给映射器

而且,不,拆分位置不是以数据感知方式计算的。

现在,默认情况下,如果您使用的是 FileInputFormat,那么这两种类型的拆分会重叠(因此是相同的)。

但是对于上面的第二点,您始终可以采用自定义的拆分方式(或者甚至根本不拆分,即让一个完整的文件转到一个映射器)。

您还可以独立于 InputFormat 拆分输入数据的方式更改 hdfs block 大小。

这里要注意的另一个重点是,虽然文件在存储在 HDFS 中时实际上是物理损坏的,但是为了分发给映射器的拆分,并没有实际的文件物理拆分,而只是逻辑上的拆分 split 。

here 为例:

Suppose we want to load a 110MB text file to hdfs. hdfs block size and Input split size is set to 64MB.

  1. Number of mappers is based on number of Input splits not number of hdfs block splits.

  2. When we set hdfs block to 64MB, it is exactly 67108864(64*1024*1024) bytes. I mean it doesn't matter the file will be split from middle of the line.

  3. Now we have 2 input split (so two maps). Last line of first block and first line of second block is not meaningful. TextInputFormat is responsible for reading meaningful lines and giving them to map jobs. What TextInputFormat does is:

    • In second block it will seek to second line which is a complete line and read from there and gives it to second mapper.
    • First mapper will read until the end of first block and also it will process the (last incomplete line of first block + first incomplete line of second block).

阅读更多 here .

关于hadoop - fs -put(或 copyFromLocal)和数据类型感知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15904671/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com