HDFS分布式文件存储系统详解

HDFS分布式文件存储系统详解HDFS简介一、HDFS:HadoopDistributedFileSystem          1. 一个分布式文件系统           2. 基于流数据模式访问和处理超大文件的需求而开发的          3. 适合应用在大规模数据集上     优点:                1.处理超大文件                   能用来存储管理PB级的数据 …

大家好,又见面了,我是你们的朋友全栈君。

HDFS简介

一、HDFS:Hadoop Distributed File System

           1. 一个分布式文件系统 
           2. 基于流数据模式访问和处理超大文件的需求而开发的
           3. 适合应用在大规模数据集上

         HDFS分布式文件存储系统详解

优点:

               
 1.处理超大文件

                   能用来存储管理PB级的数据   1PB = 1024TB

               
 2.处理非结构化数据、半结构化数据、结构化数据

                   流式的访问数据

                   一次写入、多次读取

                
3.运行于廉价的商用机器集群上

                   可运行在低廉的商用硬件集群上

                   故障时能继续运行且不让用户察觉到明显的中断

局限性/缺点:

           
1. 不适合处理低延迟数据访问
            HDFS是为了处理大型数据集分析任务的,主要是为了达到高的数据吞吐量而设计的


            对于低延时的访问需求,HBase是更好的选择

           
2.无法高效存储大量的小文件


            小文件会给Hadoop的扩展性和性能带来严重问题


            利用SequenceFile、MapFile等方式归档小文件


           
3.不支持多用户对一个文件同时写入及任意修改文件


            只有一个写入者,只能执行追加操作


            不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改    

HDFS特性

一、高容错,可扩展性及可配置性强
二、跨平台
三、shell命令接口
四、机架感知功能
五、负载均衡
六、Web界面

HDFS目标

1.检测和快速恢复硬件故障

故障的检测和快速自动恢复是HDFS的一个核心目标

2.流式数据访问

设计成适合进行批量处理

重视数据吞吐量,而不是数据访问的反应速度

3.大规模数据集

支持大文件存储

一个单一的HDFS实例能支撑数以千万计的文件

4.简化一致性模型

对文件实行一次性写入,多次读取的访问模式

5.移动计算代价比移动数据代价低

一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此

6.可移植性

HDFS在设计时就考虑到平台的可移植性,这种特性方便了HDFS作为大规模数据应用平台的推广

7.通信协议

所有的通信协议都是在TCP/IP协议之上的

HDFS核心设计

数据块(Block)

数据块是HDFS上最基本的存储单位

HDFS块默认大小为128M (2.0为128M,1.0为64M)

小于一个块大小的文件不会占据整个块的空间

hadoop fsck /sogou.500w.utf8 -files -locations -blocks

对块进行抽象会带来的好处

一个文件的大小可以大于网络中任意一个磁盘的容量

使用块抽象而不是文件可以简化存储子系统

块非常适合用于数据备份进而提供数据容错能力和可用性

数据块复制

HDFS为了做到可靠性(reliability)创建了多份数据块(计算节点中(compute data blocks)的复制(replicas),并将它们放置在服务器群的nodes),MapReduce就可以在它们所在的节点上处理这些数据了。

HDFS将每个文件存储成块(Block)序列

每个文件的Block大小和复制(Replication)因子都是可配置的 hdfs-site.xml

数据副本的存放策略

数据分块存储和副本的存放,是保证可靠性和高性能的关键

将每个文件的数据进行分块存储

每一个数据块又保存有多个副本

这些数据块副本分布在不同的机器节点上

在多数情况下,HDFS默认的副本系数是3

Hadoop默认对3个副本的存放策略   

第一块:在本机器的HDFS目录下存储一个Block

第二块:不同Rack(机架)的某个DataNode上存储一个Block

第三块:在该机器的同一个Rack下的某台机器上存储最后一个Block

更能多副本:随机节点

如图所示:

HDFS分布式文件存储系统详解

设置集群Block的备份数
方法一:配置文件hdfs-site.xml
<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>
方法二:通过命令修改备份数
bin/hadoop fs -setrep -R 1 /

注意:方法二可以改变整个HDFS里面的备份数,不需要重启HDFS系统,

        而方法一需要重启HDFS系统才能生效。

安全模式(SafeMode)
安全模式是Hadoop集群的一种保护模式
NameNode在启动时会自动进入安全模式,也可以手动进入。
当系统处于安全模式时,会检查数据块的完整性。

用命令来操作安全模式

hadoop  dfsadmin  -safemode  leave      //强制NameNode退出安全模式
hadoop  dfsadmin  -safemode  enter      //进入安全模式
hadoop  dfsadmin  -safemode  get        //查看安全模式状态

hadoop  dfsadmin  -safemode  wait       //等待,一直到安全模式结束

负载均衡
机器与机器之间磁盘利用率不平衡是HDFS集群非常容易出现的情况
 尤其是在DataNode节点出现故障或在现有的集群上增添新的DataNode的时候
分析数据块分布和重新均衡DataNode上的数据分布的工具

 $HADOOP_HOME/bin/start-balancer.sh -t 10%

负载均衡

负载均衡程序作为一个与独立的进程NameNode进程分开执行

HDFS分布式文件存储系统详解

心跳机制

机架感知
大型Hadoop集群是以机架的形式来组织的
同一个机架上不同节点间的网络状况比不同机架之间的更为理想
默认情况下,Hadoop的机架感知是没有被启用的
启用机架感知功能,在NameNode所在机器的core-site.xml中配置一个选项:
 <property> 
   <name>topology.script.file.name</name> 
   <value>/path/to/script</value> <!—value的值是一个脚本–>

</property> 

HDFS体系结构

Master/Slave架构

HDFS分布式文件存储系统详解

文件切分成块(默认大小128M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3)
NameNode是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等等
DataNode在本地文件系统存储文件块数据,以及块数据的校验

主要组件的功能

NameNode

DataNode

 存储元数据

 存储文件内容

元数据保存在内存中

文件内容保存在磁盘

 保存文件,block datanode之间的映射关系

维护了block iddatanode本地文件的映射关系

NameNode

Namenode是一个中心服务器,单一节点,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问

文件操作,NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,数据流不经过NameNode,只会询问它跟那个DataNode联系

副本存放在那些DataNode上由NameNode来控制,根据全局情况做出块放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低带宽消耗和读取时延

NameNode全权管理数据块的复制,它周期性地从集群中的每个DataNode接收心跳信号和块状态报告(BlockReport)。接收到心跳信号意味着该DataNode节点工作正常。块状态报告包含了一个该DataNode上所有数据块的列表。 

DataNode

一个数据块在DataNode上以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳

DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息

心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令,如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟NameNode没有收到某个DataNode 的心跳信息,则NameNode认为该DataNode节点已死亡不可用。

SecondaryNameNode

辅助的NameNode

周期性将EditsLog文件合并

工作原理,如图所示

HDFS分布式文件存储系统详解

工作流程
secondarynamenode通知namenode切换edits文件
secondarynamenode从namenode获得fsimage和edits(通过http)
secondarynamenode将fsimage载入内存,然后开始合并edits
secondarynamenode将新的fsimage发回给namenode

namenode用新的fsimage替换旧的fsimage

什么时候checkpiont
fs.checkpoint.period 指定两次checkpoint的最大时间间隔,默认3600秒。

fs.checkpoint.size 规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M

数据损坏处理

当DN读取block的时候,它会计算checksum;
如果计算后的checksum,与block创建时值不一样,说明该block已经损坏。
client读取其它DN上的block;NN标记该块已经损坏,然后复制block达到预期设置的文件备份数;
DN在其文件创建后三周验证其checksum。

HDFS文件权限

与Linux文件权限类似
r: read; w:write; x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容
如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner是zhangsan
HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁
Root 用户只能查看,不能写入
hadoop dfs -chmod 777 /

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137837.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MBUS协议_sbus协议

    MBUS协议_sbus协议在前面关于MBus协议的描述中,个人觉得在描述TSS721部分存在不容易理解的地方,总觉得还可以说的更清楚点,在实际使用中我又发现TSS721的一款替代芯片,在这里作个详细的说明,可以加深对MBus协议实现的理解和TSS721部分的理解。2013年9月10日–推动高能效创新的安森美半导体(ONSemiconductor,美国纳斯达克上市代号:ONNN)推出一款新的集成…

    2022年10月15日
  • 图像处理入门教程[通俗易懂]

    图像处理入门教程[通俗易懂]  最近有人问我图像处理怎么研究,怎么入门,怎么应用,我竟一时语塞。仔细想想,自己也搞了两年图像方面的研究,做个两个创新项目,发过两篇论文,也算是有点心得,于是总结总结和大家分享,希望能对大家有所帮助。在写这篇教程之前我本想多弄点插图,让文章看起来花哨一点,后来我觉得没必要这样做,大家花时间沉下心来读读文字没什么不好,况且学术和技术本身也不是多么花哨的东西。  一、图像处理的应用  这个其实没什么…

  • kubernetes部署微服务_kubernetes离线安装

    kubernetes部署微服务_kubernetes离线安装微服务之容器化技术—kubernetes的安装

  • 老电脑换Linux系统是否会更快,旧电脑不要装Windows!Bodhi Linux系统,小巧强悍,运行更流畅…

    老电脑换Linux系统是否会更快,旧电脑不要装Windows!Bodhi Linux系统,小巧强悍,运行更流畅…你的旧电脑安装win10还好吗?现在科技发展越来越快,尤其是电脑硬件的更新换代,然而大多数的人都不会因为新产品出来,就将自己才用了两三年的电脑换掉。但是,电脑用久了,终究会变慢,尤其是在Windows系统功能越来愈多,越来越大的情况下,我们还是需要换电脑!不过,你的旧电脑怎么办?卖掉?它的价格分分钟还不如废铁。扔掉?又不太舍得。真是如鸡肋一般,食之无味,弃之可惜!很多人都不知道的是,其实即使是5年…

  • Python scikit-learn (metrics): difference between r2_score and explained_variance_score?

    Python scikit-learn (metrics): difference between r2_score and explained_variance_score?

    2021年11月21日
  • 基于Linux的智能家居的设计(3)[通俗易懂]

    基于Linux的智能家居的设计(3)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号