分享

请指导我对HDFS的理解

youngwenhao 发表于 2017-3-16 09:59:19 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 7 8306
你好,请问我如下的理解对么:我的集群3个节点,一个namenode,两个datanode。我在HDFS里面创建了一个80MB的文本文件,在namenode节点中只存有文件的名字信息和映射信息。NameNode 将文件数据映射到 DataNode 上的复制块上。因为数据块大小最多64mb,所以有两个数据复制块A和B,存在于节点datanode1。 同样的,另一个节点datanode2也存有和节点datanode1一模一样的数据块。
另外即使datanode1所在的服务器挂了,数据也不会丢失,因为节点datanode2中存有副本,但如果所有的datanode节点都挂了,数据会丢失。

已有(7)人评论

跳转到指定楼层
yongjian3311 发表于 2017-3-16 10:24:24
hdfs的数据块默认是64M,若一个文件大于64M,通过将大文件分解得到若干个数据块;若一个文件小于64M,则按它的实际大小组块存储;
因此可以解释为什么hdfs喜欢海量的大文件,而不喜欢海量的小文件:
(1)海量的小文件需要namenode存储较多的元数据信息记录块的位置(假如一个64M的数据块(大文件分解的块)需要1k的元数据信息,那么1M的数据块(小文件的块)仍需要1k的元数据信息)
(2)HDFS就是为流式访问大文件而设计的,如果访问大量小文件,需要不断的从一个datanode跳到另一个datanode,严重影响性能。
hdfs的一个数据块一定属于一个文件;
回复

使用道具 举报

hyj 发表于 2017-3-16 10:41:38
hdfs主要看副本数目,跟结点没有必然关系,一般来说副本存到不同的结点及不同的机架,主要为了数据安全。楼主理解基本正确。但是感觉不太深刻。副本一般为3。数据块大小也可以自己定义,一般为64M,128M等,如果副本数为3则有三个副本分布三个结点。这个副本是对文件的分割,在读取文件的时候,在合并副本组成文件。
回复

使用道具 举报

youngwenhao 发表于 2017-3-16 11:15:40
hyj 发表于 2017-3-16 10:41
hdfs主要看副本数目,跟结点没有必然关系,一般来说副本存到不同的结点及不同的机架,主要为了数据安全。楼 ...

你好,假设我有10个datanode,副本为3,就是说我存放文件所对应的数据副本有3个,10个datanode中的3个datanode分别存放这3个副本,另外7个没有该文件对应的副本。当需要读的时候,由namenode指定某个datanode中的数据副本,组成文件。
请问是这样理解对吧?
回复

使用道具 举报

youngwenhao 发表于 2017-3-16 11:52:13
hyj 发表于 2017-3-16 10:41
hdfs主要看副本数目,跟结点没有必然关系,一般来说副本存到不同的结点及不同的机架,主要为了数据安全。楼 ...

你好,还有个问题请教?http://www.aboutyun.com/forum.php?mod=viewthread&tid=7088
上链接文中您所述:
5.Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,为什么?
因为这些信息会在系统启动因为这些信息会在系统启动时从数据节点重建。

启动hadoop前,我发现hdfs配置的对应的dfs/name/current/中保存有大量edit和fsimage文件,
我在启动hadoop的时候,进入安全模式,hadoop会从datanode搜集信息,重建这些文件是么?
期待你的回复,谢谢您!
回复

使用道具 举报

langke93 发表于 2017-3-16 13:42:50
youngwenhao 发表于 2017-3-16 11:15
你好,假设我有10个datanode,副本为3,就是说我存放文件所对应的数据副本有3个,10个datanode中的3个dat ...

不能说对,也不能说不对。
理解的有点片面。还是不到位。但是你说的没有问题。

如果下面图,5个节点,有的是三个副本【块】,有的是两个副本【块】,有的是四个副本【块】


namenode像一个管家,记录了他们的位置,在读取的时候,从各个客户端组合成文件


回复

使用道具 举报

langke93 发表于 2017-3-16 13:47:17
youngwenhao 发表于 2017-3-16 11:52
你好,还有个问题请教?http://www.aboutyun.com/forum.php?mod=viewthread&tid=7088
上链接文中您所述 ...

5.Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,为什么?
因为这些信息会在系统启动因为这些信息会在系统启动时从数据节点重建。
namenode并不存储信息,像领导都不干活,但是需要记得每个员工干的哪些工作,namenode就是管这个活的。一旦下班(领导不记录你干么了,namenode也是不记录你的位置),第二天上班,员工自动回报,你干什么了(集群启动,namenode接受datanode的汇总位置)

启动hadoop前,我发现hdfs配置的对应的dfs/name/current/中保存有大量edit和fsimage文件,
我在启动hadoop的时候,进入安全模式,hadoop会从datanode搜集信息,重建这些文件是么?
搜集信息就是我上面所说的,这些信息,datanode会自动汇报
其实这样说还是比较抽象的,楼主多看图,多找资料,然后对比说的,就理解了
回复

使用道具 举报

Wyy_Ck 发表于 2017-4-10 16:36:17
针对问题二 我理解每一个节点的数据块不一定都是一样的吧   针对整个集群dedatanode而言,一个数据块的副本默认是三份
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条