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 /

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java多态实现原理

    Java多态实现原理##前言多态是Java语言重要的特性之一,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。Java对于方法调用动态绑定的实现主要依赖于方法表,但通过引用调用(invokevitual)和接口引用调用(invokeinterface)的实现则有所不同。Java多态实现原理的大致过程:首先是Java编译器将Java源代码编译成class文件。在编译过程中,会根据静态类型将调用的符号引用写到class文件中。在执行时,JVM根据class文件找到调用方法的符号引用,然后在静态类型的方

    2022年7月7日
    20
  • pycharm和Anaconda环境下安装pygame「建议收藏」

    pycharm和Anaconda环境下安装pygame「建议收藏」pycharm和Anaconda环境下安装pygamewindows系统下安装windows系统下安装1.点击windows键打开Anacondaprompt2.打开之后输入condalist可以找到pip3.然后继续输入condainstallpip等安装完成4.pip安装完成之后输入pipinstallpygame如图所示安装成功。…

    2022年8月29日
    4
  • 浙江更新了小学3年级到9年级信息技术课,小学开始学编程

    浙江更新了小学3年级到9年级信息技术课,小学开始学编程据浙江最新消息,今年9月份开始的新学期,三到九年级信息技术课将同步替换新器材。其中,八年级将新增Python课程内容。新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材规划五六年级开始接触。在最新的教材目录上看到,从小学三年级一直到九年级,内容都有不同程度的调整。三年级新增了“信息社会”和“网络生活”,四上新增了“走进多媒体”、“制作演示文稿”和数字名片(H5),五下加入了“算法和程序设计”,六年级更是出现了“大数据”、“初始人工智能”、“万物互联”。初中阶段新

    2022年5月17日
    54
  • nofollow标签浪费了多少站长做外链的时间

    nofollow标签浪费了多少站长做外链的时间

    2021年11月17日
    34
  • Origin简单绘图

    Origin简单绘图一、从cadence导出数据仿真生成波形之之后,鼠标选中波形,右击—>SendTo—>Export,进行csv数据的保存。打开该csv文件,删掉第一行,第一行是是横纵坐标的标识,左侧第一列是横坐标值,右侧列是纵坐标值。二、origin简单绘图双击图标打开origin导入csv数据可选中多个csv文件导入为了让两个csv的数据同时显示,在弹出的对话框进行以下操作(默认第二个csv数据会覆盖第一个csv数据)。设置好之后点击“确定”,两个csv数据均被导入到了o

    2022年6月1日
    54
  • windows的安装_kafka windows安装

    windows的安装_kafka windows安装一、安装JAVAJDK1、下载安装包http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html注意:根据32/64位操作系统下载对应的安装包2、添加系统变量:JAVA_HOME=C:\ProgramFiles(x86)\Java\jdk1.8.0_144二、安装Zo…

    2022年10月9日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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