HDFS DataNode升级过程

升级需要重点考虑的几个问题

DataStorage重要的功能就是管理磁盘存储空间的生命周期。升级是磁盘存储空间生命周期管理中最重要的一个环节,尤其是对于HDFS这样的分布式存储系统,升级需要重点考虑以下几个问题。

   版本兼容性问题:不同版本之间兼容性的设计,高版本是否需要兼容低版本?不同组件之间,例如Datanode和Namenode之间的版本是否需要一致?

   升级消耗的磁盘空间问题:我们知道Datanode最主要的功能是存储数据块,而这些数据块往往占用比较大的磁盘空间。如何做到既能保留原有版本的数据,正确地完成升级操作,同时又能节省磁盘空间呢?

   回滚要求:在HDFS的升级过程中,很有可能出现各种异常,包括硬件的异常、软件的异常以及人为的操作失误。那么如何在升级失败的情况下,回滚到之前正确的状态。

 

升级机制

考虑到上面的问题,HDFS实现了一套完整的升级机制。

■   关于兼容性:HDFS支持节点版本的向上升级,但并不支持向下降版本。HDFS各个组件作为一个整体升级或者回滚,同一集群中有不同版本的组件是不被支持的。同时HDFS确保在升级过程中,旧版本的结构可以迁移至新版本。这里要注意,如果新版本的文件系统布局不需要改变,则升级非常简单,只需导入新的代码与依赖包,加载配置文件,重启服务即可:如果需要改变文件系统布局、元数据数据结构等 (layoutversion发生改变),则升级过程会比较复杂,需要考虑回滚等容错机制。

■   关于回滚:HDFS回滚机制主要是通过备份旧版本数据实现的,回滚时将旧版本数据复制到原有目录中即可。HDFS仅保留前一个版本的数据,同时引入升级提交机制,当管理员提交了一次升级时, HDFS将会删除之前的版本,也就是提交升级之后,无法再进行回滚操作。

■   关于磁盘空间:在HDFS的升级过程中,需要复制低版本数据以支持回滚操作。但由于Datanode存储的数据块占用的磁盘空间往往比较大,所以数据节点使用了Linux 硬链接方式,也就是将新版本和旧版本中两个数据块文件的引用指向磁盘中的同一个数据块,巧妙地节省了磁盘空间。

 

具体操作

HDFS升级机制是通过磁盘文件目录的配合来进行的,如图所示,我们可以将Datanode 升级分为三个步骤:升级、回滚和提交。

1.升级操作

升级操作就是将Datanode从低版本升级到高版本。主要涉及以下目录。

■   current目录:保存当前版本数据的目录。

■   previous.tmp目录:在升级过程中,保存当前版本数据的目录。

■   previous目录:升级后,保存上一版本数据的目录。

在Datanode升级时,会将当前版本数据所在的current目录改名为previous.tmp,然后为新版本数据重建current目录。接下来建立current目录与previous.tmp中数据块文件和校验和文件之间的硬链接。最后将 previous.tmp改名为previous,完成升级。这时文件夹中的current目录存储的是当前版本的数据,previous目录保存的是上一版本的数据。

 

   2.回滚操作

回滚操作就是将Datanode回滚至上一版本。主要涉及以下目录.

■   previous目录:升级后,保存上一版本数据的目录。

■   removed.tmp目录:在回滚过程中,保存当前版本数据的目录。

■   current目录:回滚后,保存当前版本数据的目录.

在Datanode回滚时,会先将current目录改名为removed.tmp,然后将previous目录改名 为current,最后删除removed.tmp目录。回滚完成后,文件夹中只有current —个目录保存回 滚后版本的数据。

3. 升级提交操作

升级提交操作就是提交当前升级,删除上一版本数据,提交之后,Datanode将不可回滚. 主要涉及以下目录.

■       previous目录:升级后,保存上一版本数据的目录。

■       finalized.tmp目录:在提交过程中,保存前一版本数据的目录。

在升级提交时,先将previous目录改名为finalized.tmp.然后删除finalized.tmp目录。提 交操作完成后,文件夹中只有current 一个目录保存当前版本的数据。

我们以升级操作为例,如果不使用previous.tmp目录,而是直接将新建的current目录硬链接到previous目录,若这个过程发生错误,那么current与previous目录之间的数据就会不一致,导致升级失败。这时,当数据节点再次启动时,它并不能根据current和previous目录的不一致判断升级过程中是否发生了错误。而引入临时目录previous.tmp后,数据节点启动时如果发现存储空间中有该临时目录,就可以判断上一次升级失败了。回滚操作中的临时目录removed.tmp以及提交操作中的临时目录finalized.tmp作用也是相同的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值