gpt4 book ai didi

hadoop - split 发生在何时何地?

转载 作者:可可西里 更新时间:2023-11-01 15:21:00 24 4
gpt4 key购买 nike

例如,我在 HDFS 中有一个 1 Gb 的文件,例如

2018-10-10 12:30  
EVENT INFORMATION
2018-10-10 12:35
ANOTHER EVENT INFORMATION
...

所以我需要使用 NLineInputFormat (N = 2),对吗?
问题是关于更多的概念性原则。这个 1 Gb 文件何时何地转换为 InputSplits? hadoop如何处理不同的拆分逻辑?它是否需要解析整个文件以创建拆分(因为我们需要遍历文件以逐行计数)?
这个文件在HDFS(1024/128)中分为8个 block 。因此,当我提交作业时,hadoop 在每个节点上使用此文件的 block (使用默认拆分大小)启动映射器。

如果我的文件分割不整齐会怎样?喜欢

<block1>
...
2018-10-10 12:
</block1>
<block2>
40
EVENT INFORMATION
...
</block2>

第一个映射器如何知道位于另一个数据节点上的剩余部分?

如果拆分大小 = 1/2 block 大小会怎样?还是 4/5 block 大小?应用程序主机如何知道应该选择哪个节点来运行拆分?

能否请您说清楚并给我一些链接以更深入地了解它?

最佳答案

数据的划分(将File划分为Block),这是物理上真正的划分
Split和HDFS Block是一对多的关系;

HDFS block是数据的物理表示,Split是block中数据的逻辑表示。

在数据局部性的情况下,程序也会从远程节点读取少量数据,因为行被切割到不同的Block。

当你读取一个文件时,它是这样的

enter image description here

客户端通过调用FileSystem对象的open()方法打开文件(对应HDFS文件系统,调用DistributedFileSystem对象)(即图中第一步)。 DistributedFileSystem通过RPC(Remote Procedure Call)调用调用NameNode来获取这个。文件前几个 block 的文件位置(第 2 步)。对于每一个block,namenode返回所有拥有这个block备份的namenode的地址信息(在集群的拓扑网络中按照距离client的远近排序,Hadoop集群中如何进行网络拓扑见下文) .

If the client itself is a datanode (if the client is a mapreduce task) and the datanode itself has the required file block, the client reads the file locally.

以上步骤完成后,DistributedFileSystem会返回一个FSDataInputStream(支持文件查找),客户端可以从FSDataInputStream中读取数据。 FSDataInputStream 包装了一个 DFSInputSteam 类,该类处理名称节点和数据节点的 I/O 操作。
然后client执行read()方法(第3步),DFSInputStream(里面已经存储了要读取的文件前几 block 的位置信息)连接到第一个datanode(也就是最近的datanode) ) 获取数据。通过反复调用read()方法(第四步和第五步),将文件中的数据流式传输到客户端。当读取到 block 的末尾时,DFSInputStream 关​​闭指向该 block 的流,转而查找下一个 block 的位置信息,然后重复调用 read() 方法继续流式传输该 block 。
这些过程对用户来说是透明的,在用户看来这是一个不间断的流式传输整个文件。
当整个文件被读取时,客户端调用 FSDataInputSteam 中的 close() 方法关闭文件输入流(第 6 步)。

关于hadoop - split 发生在何时何地?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53207837/

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