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)
blank

相关推荐

  • setContentView剖解

    setContentView剖解setContentView剖析1、setContentView的作用是将View加载到根view之上,这样当显示view时,先显示根view,然后在显示子view,以此类推,最终将所有view显示出来。2、setContentView必须要放在findviewbyid之前,因为view在加载之前是无法引用的。3、setContentView最本质的作用是为要显示的

  • javascript_JavaScript走向成熟

    javascript_JavaScript走向成熟javascript明年JavaScript将有20年的历史(从首次在Netscape浏览器中首次亮相开始算起)。这是一门具有悠久历史的语言,并且从其早期开始就带来了很多负担,但是随着它离开少年时代的到来,我认为这是一种最终发展起来的语言。JavaScript通过允许脚本在浏览器中运行来彻底改变了Web。但是,在最初流行之后,它很快就开始受到不良声誉,并且经常与编写不良,剪切粘贴的代码…

  • SQL学习收获与心得

    SQL学习收获与心得SQL或结构化查询语言是一种语言,旨在允许技术和非技术用户查询,操作和转换关系数据库中的数据。由于其简单性,SQL数据库为数百万个网站和移动应用程序提供安全且可扩展的存储。有许多流行的SQL数据库,包括MySQL,MSSQL和Oracle等等。所有这些都支持通用的SQL语言标准,这是该网站将要教授的内容,但每个实现可以在它支持的附加功能和存储类型方面有所不同。基本的sql语句:选择:se…

  • Silverlight网站实例资源收集(1)

    Silverlight网站实例资源收集(1)Silverlight做的试用VisualStudio2008http://www.challenges.com.cn/ 全功能的相册http://msbluelight-0.agappdom.net/e1/d/72193/13304799/63356644800/0.vpFl7uJ79e1H4xExhhjCX701HlA/zziframehtml2zz.html#%2f%2

    2022年10月18日
  • python wpa_wpa_passphrase「建议收藏」

    python wpa_wpa_passphrase「建议收藏」辛苦历程之前一直用NetworkManager管理无线网络,后来换了fvwm以后,NetworkManager就不知道怎么用了,虽然查到有一个命令行版本的,客户端叫nmcli,但是无奈不知道怎么用,只好用wicd了,虽然也挺方便,但是占用的内存真是大——虽然只有16MB,但是相比它实现的功能,这个投入产出比已经非常低了。昨天因为某些搞笑原因,重装了系统,发现安装wicd还要安装一堆gnome和py…

    2022年10月30日
  • JVM 内存模型概述

    JVM 内存模型概述Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些数据区域都有各自的用途,以及创建和销毁的时间,并且它们可以分为两种类型:线程共享的方法区和堆,线程私有的虚拟机栈、本地方法栈和程序计数器。在此基础上,我们探讨了在虚拟机中对象的创建和对象的访问定位等问题,并分析了Java虚拟机规范中异常产生的情况。

发表回复

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

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