赞
踩
hadoop分为四大模块,分别为:common、hdfs、yarn、mapreduce
什么是HDFS?
hdfs是一个分布式文件系统。
hdfs设计思想?
设计思想采用的是“分而治之”,分就是当一个文件过大时,一台计算机存储不了,就采用切分存储。
1、设计思想1:分块存储
每一个块叫做block,如果有1个主节点和4个从节点的集群。
问题1、设计分块为什么需要考虑到负载均衡?
当有一个8T的文件需要存储时,如果我们将8T的文件分成2个block分别存储,那么其余的2个节点将无事情可干。
因此,设计分块的时候需要考虑到:负载均衡,即将需要存储的文件,均匀的分配到集群中不同的节点上。
问题2、块默认存储为128M,那么不足128M的块该如何存储?
hadoop2.x版本中默认切分的块大小为128M,hadoop1.x版本中默认的是64M。
假如我们有一个300M的文件需要存储,那么会切分为0-127,128-255,256-300这三个块,第一个块0-127可能存储到节点1或节点2或节点3或节点4上,这个是有nameNode分配任务时分配。
假如0-127分配到节点1上,128-255即可分配到节点1上,也可以分配到其它节点上。
256-300这个块只有44M,不足128M,也会单独作为一个块存储。
假如,后面又有一个50M的文件需要存储,那么这50M的文件也不会和256-300拼装成128M存储。他们会单独的作为2个块存储。
2、设计思想2:备份机制
问题1:为什么需要使用备份机制?
如上例中,300M的文件存储,假设0-127存储在节点1上,128-255存储到节点2上,256-300存储在节点3上。
此时如果,节点2宕机了,那么会造成数据的不完整性。
为了解决问题,hdfs默认块的存储采用了备份机制,默认的备份个数为3个,一般在hdfs-site.xml中配置
- <property>
- <name>dfs.replication</name>
- <value>3</value>
- </property>
注意,这3个备份文件,没有主次之分,它们的地位是相同的。
问题2、备份都是存储在同一个节点上吗?
那么这3个备份都是存储在同一个节点上吗?当然不是,如果都存储在相同的节点上,那么这个节点宕机了,备份又有何意义。
因此,这3个备份分别存储在不同的节点上。
问题3、备份设置大于节点数,该如何?
如果只有2个节点,而备份数设置为3,那么实际也会存储2个备份,另外一个备份进行记账,直到当集群的节点数大于等于3的时候,会进行复制这个副本,最终达到3个备份。
问题4、节点数大于备份数,该如何?
如果集群中有4个节点,而副本数只有3个,有一个副本的机器宕机了,这个时候会发现副本个数小于设定的个数,就会进行复制,达到3个副本。
问题5、宕机的节点又恢复了,造成备份数超过设置的备份数,该如何?
这个时候,集群中刚刚宕机的节点又恢复了,这个时候集群中的副本个数为4,集群会等待一段时间,如果发现还是4个就会随意删除一个副本
全新的集群分配方式是采用轮询方式分配的,之前是采用NameNode分配任务的方式分配
总结:hdfs被设计成用来使用低廉的服务器进行海量数据的存储,那么它是怎么做到的?
1、大文件被切分为小文件,使用分而治之的思想让很多服务器对同一个文件进行联合管理
2、每个小文件做冗余备份,并且分散存到不同的服务器,做到高可靠不丢失。
问题6、备份数越多越好吗?
副本越多,数据安全性越高,但是副本数越多会占用过多的存储资源,会造成集群的维护变得困难.
比如100个节点,副本数有50个,hdfs同时维护50个副本,而这50个副本中随时可能发生宕机。所以一般副本数设置为3个即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。