分享

Hadoop集群中HDFS 存储数据块的讨论

hapjin 发表于 2015-7-7 11:27:29 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 11 35877
假设我有A、B、C三台机器构成的集群。HDFS配置 blocksize = 64MB,复制因子为3 ,现在有一个文件有32MB。
1,将该文件存储到HDFS上每台机器上,是不是每台机子的数据块都会剩余 32MB?这样,该数据块的剩余的32MB空间就不能再分配给其他文件了吗??

2,是不是每台机子上的文件名以及 从文件到数据块的映射都是一样的?即在NameNode 中,对于每台DataNode存储的某个文件而言,NameNode保存的该文件到数据块的映射都是一样的吗?

已有(11)人评论

跳转到指定楼层
jixianqiuxue 发表于 2015-7-7 11:47:28
第一个问题:如果不够的话,应该不会暂用剩余空间
第二个问题:
映射都保存在namenode,而且是启动的过程中,由datanode上报
回复

使用道具 举报

hapjin 发表于 2015-7-7 13:01:43
jixianqiuxue 发表于 2015-7-7 11:47
第一个问题:如果不够的话,应该不会暂用剩余空间
第二个问题:
映射都保存在namenode,而且是启动的过程 ...

映射不是由NameNode上报的吧??
在GFS里面,The master stores three major types of metada:the file and chunk namespace, the mapping from files to chunks, and the location of each chunk's replicas. The first two types are kept persistent by logging mutations to an operation log stored on the master's local disk......(参考Google GFS论文)
DataNode启动时上报的应该是位置信息(chunk location)。
而我现在问的是文件到数据块的映射信息。不是位置信息。

回复

使用道具 举报

jixianqiuxue 发表于 2015-7-7 13:05:21
hapjin 发表于 2015-7-7 13:01
映射不是由NameNode上报的吧??
在GFS里面,The master stores three major types of metada:the file  ...

文件位置到磁盘直接查看即可
回复

使用道具 举报

hapjin 发表于 2015-7-7 13:06:06
因为假设有三台机器嘛,假设某个文件到数据块的映射是不同的话,那NameNode不是要存三份映射信息???所以说每台机器上文件到数据块的映射是相同的?(复制因子为3,每个文件会在各台机子上存一份,共存三份)
这样是对的吗??请问有童鞋知道吗?感谢解惑。。。
回复

使用道具 举报

jixianqiuxue 发表于 2015-7-7 13:25:53
hapjin 发表于 2015-7-7 13:06
因为假设有三台机器嘛,假设某个文件到数据块的映射是不同的话,那NameNode不是要存三份映射信息???所以 ...



这篇文章,可能对楼主有所帮助




深度了解namenode---其 内部关键数据结构原理简介
回复

使用道具 举报

hapjin 发表于 2015-7-7 14:34:43
本帖最后由 hapjin 于 2015-7-7 16:42 编辑
jixianqiuxue 发表于 2015-7-7 13:25
这篇文章,可能对楼主有所帮助

谢谢。我明白了。文件到数据块的映射信息(mapping from files to chunks)...其实就是fsimage中保存的bolckid信息。

------------------------------------引用自深度了解namenode---其 内部关键数据结构原理简介
3.         若从fsimage中读到的item是一个文件,则还会额外包含如下信息:
a)         blockid(long):属于该文件的block的blockid,
b)        numBytes(long):该block的大小
c)         genStamp(long):该block的时间戳
------------------------------------引用自深度了解namenode---其 内部关键数据结构原理简介

而每个块的位置信息(the lcoation of each chunk's replicas)是在BlockMap这个数据结构里面。即 block -> datanodes list的对应表信息。

假设有个文件32MB,每个数据块的大小为64MB,复制因子为3.
这样,现在还是纠结那个问题:因为每个数据块会存三份,每个数据块都会有一个blockid,那对于同一个文件,NameNode的fsimage 里面会有三个blockid?
还是这三个数据块的blockid都是相同的,这样只保留一个blockid???


回复

使用道具 举报

bob007 发表于 2015-7-7 16:48:25
hapjin 发表于 2015-7-7 14:34
谢谢。我明白了。文件到数据块的映射信息(mapping from files to chunks)...其实就是fsimage中保存的bolc ...

应该不会只保留一个
回复

使用道具 举报

hapjin 发表于 2015-7-8 11:44:57
bob007 发表于 2015-7-7 16:48
应该不会只保留一个

为什么呢??能否解释一下么?
回复

使用道具 举报

bob007 发表于 2015-7-8 12:15:39
hapjin 发表于 2015-7-8 11:44
为什么呢??能否解释一下么?

首先官网并没有说,之保存 一份。并且dadanode启动的时候是都进行上报,也并没有说重复block不上报。
楼主为什么想只保存一份
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条