我认为我的问题最好用一个例子来解释。假设您正在HDFS上存储一个映像。该映像足够大,在HDFS上被分成四个独立的较小文件。当您执行返回该图像的操作时,Hadoop是否会返回这4个可以组合成原始图像的小文件?或者Hadoop会自动将这4个小文件重新组合成原始文件吗?
谢谢!
发布于 2012-07-10 09:40:37
Hadoop分布式文件系统(HDFS)将每个文件存储在一个或多个数据块中(每个数据块被复制一次或多次)。
对于每个文件,您可以配置文件块大小和复制因子(如果未提供,则使用默认值)。
当您执行任何基于文件的操作时,您正在处理数据流,名称节点是将文件路径映射到块及其位置(数据节点)的中央存储库。
举个例子,假设你有一个32MB的文件块大小和一个50MB的文件-这将被分成两个块(32MB和18MB)。如果配置的文件复制因子为3,则NameNode将尝试并确保将每个数据块复制到集群中的3个数据节点。
当您尝试读取此文件时,将返回一个FSInputStream,与大多数输入流一样,您可以查找文件中的某个字节位置。DFSClient将你从细节中抽象出来,但它知道一个特定的字节偏移量,这与哪个块相关,并无缝地获取字节(甚至当你在块边界之间移动时)。
因此,总结并解决您的问题-对于从HDFS读取的客户端来说,它看起来像一个连续的输入流,但它实际上是根据需要拼接在一起的4个数据块
发布于 2012-07-10 03:26:32
我不确定这个示例是如何正常使用Hadoop的。
但是,如果您的结果是一个大文件,那么它将作为较小的子文件存储在HDFS中。如果您通过HDFS文件系统操作检索它,那么它将作为单个逻辑文件返回。
https://stackoverflow.com/questions/11401532
复制相似问题