Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux HDFS块中的数据是如何存储的?_Linux_Hadoop_Hdfs - Fatal编程技术网

Linux HDFS块中的数据是如何存储的?

Linux HDFS块中的数据是如何存储的?,linux,hadoop,hdfs,Linux,Hadoop,Hdfs,我正在阅读有关HDFS的文章,想知道是否有任何特定的格式可以用来排列块中的数据 假设有一个265MB的文件被复制到Hadoop集群,HDFS块大小为64MB。因此,文件分为5个部分—64MB+64MB+64MB+64MB+9MB,并分布在数据节点之间。对吗 我怀疑存储数据的64MB块中是否存在任何格式 如果数据块中存储有任何格式/结构,则存储的数据应小于64 MB,因为数据结构/头等本身可能会占用一些空间 由于HDFS数据节点是一个逻辑文件系统(它在linux上运行,HDFS没有单独的分区),所

我正在阅读有关HDFS的文章,想知道是否有任何特定的格式可以用来排列块中的数据

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

  • 我怀疑存储数据的64MB块中是否存在任何格式
  • 如果数据块中存储有任何格式/结构,则存储的数据应小于64 MB,因为数据结构/头等本身可能会占用一些空间
  • 由于HDFS数据节点是一个逻辑文件系统(它在linux上运行,HDFS没有单独的分区),所以所有的块都应该作为文件存储在linux分区中。对吗
  • 如何知道linux上实际存储64 MB HDFS块的文件名
  • 如果有人能回答这些疑问/问题,那就太好了。提前谢谢

    问候,

    (*Vipul)()

  • 不,数据仅在64MB边界上拆分。元数据存储在一个单独的小文件中,位于Namenode上
  • 不,它正是您指定的大小,并且数据在64MB的精确边界上拆分。如果您有5个部分-64MB+64MB+64MB+64MB+9MB,那么最后一个文件将是9MB,所有其他文件都是64MB
  • 是的,块存储为文件,每个块表示为一个单独的文件,少量元数据存储在一个单独的文件中
  • hdfs fsck/-文件-块-位置
  • 下面是一个以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
    

    感谢0x0FFF,我执行了您指定的命令“hadoop fsck/-files-blocks-locations”,它给出了一个很长的结果和这样的行-/user/vpathak/testData/u.item 236344字节,1个块:OK 0。但是,如何知道块“blk_7097388478926784482_1004 len=236344 repl=1[127.0.0.1:50010]在我的Linux文件系统上存储在哪里?您可以对单个文件而不是整个文件系统执行此命令:
    hdfs fsck/user/vpathak/testData/u.item-files-blocks-locations
    。从输出中可以看到,文件位于
    [127.0.0.1:50010]
    ,它是存储块的数据节点的IP和端口。转到此datanode上的
    hdfs site.xml
    文件,查看参数
    dfs.datanode.data.dir
    ——它是存储物理块的目录(或目录列表)。现在您已经知道了目录和块名,您可以很容易地找到它了,谢谢。我想知道的另一件事是Map/Reduce框架为每个块创建的if-inputspilt的数量。框架如何决定要创建的输入拆分数量?(a)当设置属性telling Map and Reduce tasks count时。简言之,它完全取决于您使用的InputFormat类。在TextInputFormat最简单的情况下,一个HDFS数据块的一个输入拆分,除非整个文件使用不可拆分的algo(如Gzip文本文件)进行压缩,在这种情况下,整个文件的一个输入拆分很好,但是否可以在一个节点上从一个块创建多个输入拆分?