如何存储HDFS块中的数据?

时间:2015-01-10 02:55:01

标签: linux hadoop hdfs

我正在阅读有关HDFS的信息,并且想知道,如果有任何特定的格式来安排块中的数据。

假设有一个265 MB的文件被复制到Hadoop集群,并且HDFS块大小为64 MB。因此该文件分为5个部分--64 MB + 64 MB + 64 MB + 64 MB + 9 MB,并分布在数据节点之间。正确吗?

  1. 我怀疑64 MB块中存储数据的格式是什么?
  2. 如果存在数据存储在块中的任何格式/结构,则存储的数据应小于64 MB,因为数据结构/标题等本身可能占用一些空间。
  3. 由于HDFS数据节点是一个逻辑文件系统(它运行在Linux之上,并且没有单独的HDFS分区),所有块应该作为文件存储在linux分区中。正确吗?
  4. 如何知道linux上实际存储64 MB HDFS块的文件名?
  5. 任何人,如果能回答这些疑问/问题,那就太棒了。提前谢谢。

    此致

    (* Vipul)();

1 个答案:

答案 0 :(得分:6)

  1. 不,数据只是在64MB边界上分割。元数据存储在一个小的单独文件和Namenode
  2. 不,它正是您指定的大小,数据在64MB的精确边界上分割。如果你有5个部分 - 64 MB + 64 MB + 64 MB + 64 MB + 9 MB,那么最后一个文件将是9MB,其他所有文件都是64MB
  3. 是的,这些块存储为文件,每个块都表示为一个单独的文件,其中少量元数据存储在一个单独的文件中
  4. hdfs fsck / -files -blocks -locations
  5. 以下是块文件以128MB块大小存储的示例:

    -rw-r--r--. 1 hdfs hadoop 134217728 Jan 12 09:17 blk_1073741825
    -rw-r--r--. 1 hdfs hadoop   1048583 Jan 12 09:17 blk_1073741825_1001.meta
    -rw-r--r--. 1 hdfs hadoop 134217728 Jan 12 09:18 blk_1073741826
    -rw-r--r--. 1 hdfs hadoop   1048583 Jan 12 09:18 blk_1073741826_1002.meta
    -rw-r--r--. 1 hdfs hadoop 134217728 Jan 12 09:18 blk_1073741827
    -rw-r--r--. 1 hdfs hadoop   1048583 Jan 12 09:18 blk_1073741827_1003.meta
    -rw-r--r--. 1 hdfs hadoop 134217728 Jan 12 09:18 blk_1073741828
    -rw-r--r--. 1 hdfs hadoop   1048583 Jan 12 09:18 blk_1073741828_1004.meta
    -rw-r--r--. 1 hdfs hadoop 134217728 Jan 12 09:19 blk_1073741829
    -rw-r--r--. 1 hdfs hadoop   1048583 Jan 12 09:19 blk_1073741829_1005.meta
    -rw-r--r--. 1 hdfs hadoop 134217728 Jan 12 09:19 blk_1073741830
    -rw-r--r--. 1 hdfs hadoop   1048583 Jan 12 09:19 blk_1073741830_1006.meta
    -rw-r--r--. 1 hdfs hadoop  87776064 Jan 12 09:19 blk_1073741831
    -rw-r--r--. 1 hdfs hadoop    685759 Jan 12 09:19 blk_1073741831_1007.meta