gpt4 book ai didi

java - Hadoop 如何拆分和组合其输出数据?

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

我认为我的问题最好用一个例子来解释。假设您要将图像存储在 HDFS 上。该图像足够大,可以在 HDFS 上拆分为四个独立的较小文件。当您执行返回该图像的操作时,Hadoop 会返回那 4 个可以组合回原始图像的小文件吗?还是 Hadoop 会自动将这 4 个小文件重新组合成原来的样子?

谢谢!

最佳答案

Hadoop 分布式文件系统 (HDFS) 将每个文件存储在一个或多个 block 中(每个 block 被复制一次或多次)。

对于每个文件,您可以配置文件 block 大小和复制因子(如果未提供,则使用默认值)。

当您执行任何基于文件的操作时,您正在处理数据流,名称节点是将文件路径映射到 block 及其位置(数据节点)的中央存储库。

举个例子,假设您有一个 32 MB 的文件 block 和一个 50MB 的文件 - 这将被分成 2 个 block (32 MB 和 18 MB)。如果配置的文件复制因子为 3,那么 NameNode 将尝试确保每个 block 都复制到集群中的 3 个数据节点。

当您尝试读取此文件时,您将返回一个 FSInputStream,它与大多数输入流一样,您可以查找文件中的特定字节位置。 DFSClient 将您从细节中抽象出来,但它知道特定的字节偏移量,它与哪个 block 相关并无缝获取字节(即使您跨过 block 边界)。

所以总结并解决您的问题 - 对于从 HDFS 读取的客户端,它看起来像是一个连续的输入流,但实际上它是 4 个 block 按要求拼接在一起

关于java - Hadoop 如何拆分和组合其输出数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401532/

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