【问题标题】:Small files and HDFS blocks小文件和 HDFS 块
【发布时间】:2011-12-19 14:42:25
【问题描述】:

Hadoop分布式文件系统中的一个块是存储多个小文件,还是一个块只存储一个文件?

【问题讨论】:

    标签: hadoop hdfs


    【解决方案1】:

    多个文件不会存储在一个块中。顺便说一句,单个文件可以存储在多个块中。文件和block-ids之间的映射被持久化在NameNode中。

    根据Hadoop : The Definitive Guide

    与单个磁盘的文件系统不同,HDFS 中小于单个块的文件不会占用整个块的底层存储空间。

    HDFS 旨在处理大文件。如果有太多小文件,那么 NameNode 可能会被加载,因为它存储了 HDFS 的名称空间。查看article,了解如何缓解小文件过多的问题。

    【讨论】:

    • 你知道如何找到块到文件的映射吗? hadoop fsck / -files -blocks -locations -racks 提供文件到块的映射,但没有说明块位于实际文件系统上的哪个目录(即它是在 subdirectory9 还是 subdirectory61 中)。
    • dfs.datanode.data.dir 属性确定 DFS 数据节点应在本地文件系统上存储其块的位置。如果这是一个逗号分隔的目录列表,那么数据将存储在所有命名的目录中,通常在不同的设备上。不存在的目录将被忽略。
    • 不,我的意思是当存储物理块时,它们可以存储在dfs.datanode.data.dir 或该目录下的子目录中(由 Datanode 创建)。有没有办法找到哪个块存储在哪里(作为顶级文件或某个子目录中)?
    【解决方案2】:

    Hadoop 块大小是 Hadoop 存储概念。每次当您在 Hadoop 中存储文件时,它都会划分为块大小,并根据复制因子和数据位置分布在集群中。

    详情:

    • 当您在 HDFS 上推送文件时,它将被分成块。每个块就像一个单独的文件,具有块大小所描述的最大大小。

    • 每个块都会包含一个 .meta 文件,用于将块的元数据信息存储在 Hadoop 上。

    • 如果文件非常小,则整个文件将在一个块中,并且块(存储文件)将与文件和元文件具有相同的大小。

    一些命令:

    • 连接到集群上的任何数据节点 [如果您有权访问 ;)]。然后转到该节点的存储目录,您可以看到存储在数据节点上的实际块,如下所示。

    (目录根据我的集群 - /data2/dfs/dn/):

    块大小:1 GB

    cd /data/dfs/dn -> current -> Finalized -> subDir0 -> (这是黄金

    块仅使用 KB 的存储空间来存储小文件,或者当文件大小为我的块大小 + 一些 KB 时可能会用到

    -rw-r--r-- 1 hdfs hdfs 91K Sep 13 16:19 blk_1073781504

    -rw-r--r-- 1 hdfs hdfs 19K Sep 13 16:21 blk_1073781504_40923.meta

    当文件更大时,块的大小将如下所示

    -rw-r--r-- 1 hdfs hdfs 1.0G 8月31日12:03 blk_1073753814

    -rw-r--r-- 1 hdfs hdfs 8.1M 8 月 31 日 12:04 blk_1073753814_12994.meta

    我希望它能解释块存储的东西。如果您想了解文件如何存储在块中的详细信息,请运行

    hdfs fsck -blocks -locations

    如果我在这里遗漏了什么,请告诉我。

    【讨论】:

      【解决方案3】:

      您可以使用 HAR(Hadoop 存档)文件系统来做到这一点,该文件系统尝试将多个小文件打包到由 HAR 文件系统管理的特殊部分文件的 HDFS 块中。

      【讨论】:

        【解决方案4】:

        一个块将存储一个文件。如果您的文件比 BlockSize(64/128/..) 大,那么它将被划分为多个具有相应 BlockSize 的块。

        【讨论】:

          【解决方案5】:

          在hdfs中需要理解的重点,file is partioned into blocks based on size而不是内存中会有一些块,存储文件的地方(这是误解)

          基本上多个文件不会存储在一个块中(除非它是存档或 Har 文件)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-26
            • 2014-11-26
            • 2020-02-24
            • 2015-07-03
            • 2017-12-11
            相关资源
            最近更新 更多