微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大数据--hadoop生态--HDFS学习总结

目录

一:HDFS主要组件及其功能

二:SecondaryNameNode工作情况

三:HDFS的数据存储原理

3.1 冗余数据保存

3.2 数据存取策略

四:HDFS数据读写过程

4.1 HDFS读数据过程(重点)

4.2 HDFS写数据的过程

五:HDFS的HA(高可用)原理

5.1 HDFS HA来源

5.2 HDFS HA采用的方法

5.3 HDFS 待命名称节点工作原理

六:HDFS常用命令


一:HDFS主要组件及其功能

        包括NameNode, SecondaryNmaeNode , Datanode.

其中,名称节点(NameNode)负责管理分布式文件系统的命名空间,保存了两个核心的数据结构,FsImage和EditLog

FsImage:用于维护文件系统树以及文件树中的所有的文件文件夹的元数据。

操作系统日志EditLog: 记录了所有针对文件的创建,删除重命名等操作。

名称节点记录了各个块所在的数据节点的位置信息

FsImage文件包含文件系统中

的所有目录和文件inode的序列化形式。每个inode是一个文件或者目录的元数据的内部访问。

二:SecondaryNameNode工作情况

     1)SecondaryNameNode会定期和NameNode通信,请求其停止使用EditLog文件,暂时将新的写操作写到一个新的文件上来。

     2)SecondaryNameNode通过http get方式从NameNode上获取FsImage和EditLog文件,并下载到本地的相应目录下。

     3)SecondaryNameNode将下载下 来的FsImage载入到内存,然后一条一条地 执行EditLog文件中的各项更新操作,使得 内存中的FsImage保持最新;这个过程就是 EditLog和FsImage文件合并

     4)SecondaryNameNode执行完(3 )操作之后,会通过post方式将新的 FsImage文件发送到NameNode节点上

     5)NameNode将从SecondaryNameNode接受到新的FsImage替换旧的EditLog文件,这个过程EditLog就变小了。

    secondaryNameNode作用:

    名称节点保存了所有的元数据信息,其中最核心的两大数据结构是FsImage和EditLog.如果这两个文件发生损坏,那么整个HDFS实例将失效。因此HDFS设置了备份机制,把这些核心文件同步复制到备份服务器SecondaryNameNode上。名称节点出错时候,就可以根据备份服务器SecondaryNameNode上的FsImage和EditLog数据进行恢复

     专门用于FsImage和Edits的合并

三:HDFS的数据存储原理

3.1 冗余数据保存

     HDFS作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上

    这种多副本保存方式优点:

  • 加快数据传输速度
  • 容易检查数据错误
  • 保证数据可靠性

3.2 数据存取策略

数据存放:

  • 一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满,cpu不太忙的节点
  • 第二个副本,放置在与第一个副本不同的机架的节点上;
  • 第三个副本,放置在与第一个副本相同机架的其他节点上。
  • 更多副本:随机节点

数据读取:

    HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID。

     当客户端读取数据时候,从名称节点获得得数据块不同副本得存放位置列表,列表中包含了副本所在得数据节点,可以调用API来确定客户端和这些数据节点所属得机架ID。当发现某个数据块副本对应得机架ID和客户端对应机架ID相同时候,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据。

数据错误与恢复:

    HDFS具有较高的容错性,可以兼容廉价的硬件,它把硬件出错看作一种常态,而不是异常,设计了相应的机制检测数据错误和进行自动恢复,主要包括名称节点出错,数据节点出错和数据出错。

  • 名称节点出错名称节点保存了所有元数据信息,其中,最核心的两个数据结构是FsImage和EditLog,如果这两个文件发生损坏,那么整个HDFS实例将会失效。因此,HDFS设置了备份机制,把这些核心文件同步复制到备份服务器SecondaryNameNode上。当名称节点出错时候,就可以根据备份服务器SecondaryNameNode中的FsImage和EditLog进行恢复。
  • 数据节点出错:每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。当数据节点发送故障,或者网络发生断网时候,名称节点就无法收到来自一些数据节点的心跳信息,这时候,这些数据节点就会被标记为“宕机”,节点上的所有数据都会被标记为“不可读”,名称节点就不会发生任何I/O请求。名称节点会定时检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新的副本。
  • 数据出错:网络传输和磁盘错误等因素,都会造成数据错误当客户端读取文件的时候,会先读取该信息文件,然后利用该信息文件,对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件,并且向名称节点报告这个文件块有错误名称节点会定期检查并且重新复制这个块。

四:HDFS数据读写过程

4.1 HDFS读数据过程(重点)

首先介绍几个相关概念:

读数据过程:

  • 客户端通过FileSystem.open()打开文件,相应地,在HDFS中distributedFileSystem具体实现了FileSystem.调用open()方法后,distributedFileSystem会创建DFSInputStream.
  • 输入流远程调用名称节点,获得文件开始部分数据块的保存位置对于该数据块,名称节点返回保存该数据块的所有数据数据节点的地址,同时根据距离客户端的远近对数据节点进行排序distributedFileSystem会利用DFSInputStream来实例化FSDataInputStream,并返回给客户端,同时返回数据块的数据节点地址
  • 获得输入流FSDataInputStream后,客户端调用read()方法开始读取数据。输入流根据前面的排序结果,选择距离客户端最近的数据节点建立连接并读取数据
  • 数据从该数据节点读取到客户端;当该数据块读取完毕时,FSDataInputStream关闭和该数据节点的连接。
  • 输入流通过getBlockLocations()方法查找下一个数据块。
  • 找到该数据块的最佳数据节点,读取数据。
  • 当客户端读取完数据的时候,调用FSDataInputStream的close()方法关闭输出流。

4.2 HDFS写数据的过程

写数据过程:

  • 客户daunt调用FileSystem.create()创建文件,相应的,在HDFS中distributedFileSystem具体实现FileSystem.调用create()方法后,会创建输出流DFSOutputStream.
  • distributedFileSystem通过RPC远程调用名称节点,在文件系统的命名空间中创建一个新的文件名称节点会执行一些检查:比如文件是否已经存在,客户端是否有权限创建文件等。远程方法调用结束后,会实例化FSDOutputStream,并返回给客户端,客户端使用这个输出流写入数据。
  • 获得输出流DFSOutputStream以后,客户端调用输出流的write()方法向HDFS中对应的文件写入数据
  • 客户端向输出流FSDOutputStream中写入的数据首先会被分成一个个分包,这些分包放在DFSOutputStream对象的内部队列里面。输出流会向名称节点申请保存文件和副本数据块的若干数据节点,这些数据节点形成一个数据流通道。
  • 因为各个数据节点位于不同的机器上,数据需要通过网络发送。因此,为了保证所有数据都是准确的,接收到数据的数据节点要向发送者发送确认包(ACK packet).
  • 客户端调用close()方法关闭输出流。

五:HDFS的HA(高可用)原理

     相对于HDFS1.0 , HDFS2.0增加HDFS HA和HDFS 联邦等新特性。

5.1 HDFS HA来源

     为了解决单点故障问题。单点故障问题:在HDFS1.0中,只存在一个名称节点,一旦这个唯一的名称节点发生故障,就会导致整个集群变得不可用。即使hdfs1.0中有secondaryNameNode,可以周期型从名称节点获取命名空间镜像文件(FsImage)和修改日志(EditLog),进行合并后发送给名称节点,替换原来的FsImage,以防止EditLog过大,导致名称节点失败恢复时需要消耗过长时间。合并后的命名镜像文件FsImage在第二名称节点中也会保存一份,名称节点失效时,可以使用第二名称节点中的FsImage进行恢复。但是第二名称节点无法提供“热备份”功能,即在名称节点发生故障的时候,系统无法实时切换到第二名称节点立即对外提供服务,依然需要进行停机恢复

5.2 HDFS HA采用的方法

    HDFS 2.0采用高可用(HA)架构,一个典型的HA集群中,一般设置两个名称节点,其中一个名称节点处于“活跃”状态,另外一个处于“待命”状态。也就是说处于待命状态的名称节点提供了“热备份”,一旦活跃节点出现故障,就可以立即切换到待命名称节点。不会影响系统的对外服务。

5.3 HDFS 待命名称节点工作原理

    活跃名称节点的状态信息必须实时同步到待命名称节点。状态同步借助于一个共享存储系统例如zookeeper.活跃名称节点将更新数据写入共享存储系统,待命名称节点会一直监听该系统,一旦发现有新的写入,就立即从公共存储系统读取这些数据加载自己内存中,从而保证与活跃节点状态完全同步。注意:zookeeper可以保证任意时刻只有一个名称节点提供对外服务。

六:HDFS常用命令

hdfs dfs -ls / 查看hdfs根目录

put命令

hdfs dfs -put file1.txt  /user/hive/warehouse  (首先在Linux系统上进入file1.txt所对应的目录下面,然后执行该命令)

get命令

hdfs dfs -put /user/hive/warehouse/test.db (此时hdfs上面的文件会导出到当前目录下面)
 

 

 

 

 

 

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

相关推荐