所有HDFS系列文章都收藏在此专栏中,欢迎订阅。
https://blog.csdn.net/yexiguafu/category_11153078.html
【HDFS】EditLogTailer功能及原理(一)-- 整体流程
【HDFS】EditLogTailer功能及原理(二)-- selectInputStreams细节详解
在系列文章的第一篇中,我们用通俗的语言描述了EditLogTailer的基本工作过程,然后也留了一些坑待填。今天我们来填第一个坑,selectInputStreams方法细节详解。
本文不会大段的复制源码逐行讲解,而是用图文的方式将自己的理解给描述出来。通过本文你将获得了解如下内容:
① 社区hadoop-3.3.0版本新增observer namenode read特性后,选择editlog的inputStream的细节。
② selectRpcInputStreams:hadoop-3.3.0后新增的通过RPC的方式获取editlog输入流数据,RPC的实现是从journal node的cache里获取的editlog数据。
③ selectStreamingInputStreams:原始版本就有的通过http获取editlog数据输入流的实现。
一、selectInputStreams作用及参数介绍
通过之前的文章我们知道,standby namenode需要从Journal node中获取editlog的输入流,然后在将这些editlog应用到standby namenode的内存中的fsimage中,以保持和active namenode状态的尽可能同步。
那selectInputStreams的作用其实就是从Journal node中选择符合条件的editlog输入流。为什么需要选择呢? 很简单,可能有一些比较老的editlog文件还没来得及被清理,这些数据我们是不需要的,因此是不需要获取这些老的editlog文件的输入流的。什么是符合条件的呢? 举个例子,selectInputStreams方法有一个参数是fromTxid,代表选择出来的stream的第一个txid。我们会将当前stanby namenode的最新txid + 1的值传给这个参数,这样的话,我们选择出来的输入流就能包含新的数据了。
网友评论