一、hadoop rpc总结
1、RPC指的是不同进程的方法调用,分为客户端和服务端,客户端调用服务端的方法,方法的执行在服务端。
2、如何实现Hadoop RPC的调用,必须要实现协议,这个协议其实就是一个接口,但是这个接口必须要有一个重要的特征,里面必须有VersionID.
3、RPC的服务端必须实现这些协议(接口)。
4、如何构建RPV的调用。
服务端:(构建者模式)
Server server = new RPC.Builder(new Configuration())
.setBindAddress("localhost")
.setPort(9999)
.setProtocol(ClientProtocol.class)
.setInstance(new NameNodeRpcServer())
.build();
客户端:获取代理以及各种参数
ClientProtocol namenode = RPC.getProxy(ClientProtocol.class, 1234L,
new InetSocketAddress("localhost",9999),
new Configuration());
Hadoop源码中有两种RPC,一种Hadoop RPC,另一种是HttpServer RPC,有什么区别?
应对的数据量不同,如果传输的数据量比较大,比如读写日志,用httpserver rpc,数据量比较小时,就是RPC之间的调用,用Hadoop RPC.
二、源码流程解读 启动
NameNode启动流程:
在createNameNode方法中通过不同的场景switch …… case进入(format,rollBack,checkPoint,recover)默认进入实例化 NameNode(new NameNode)
默认进入实例化NameNode(new NameNode)-> initialize(conf)初始化方法。
-
startHttpServer方法 -> 设置主机名和端口号(50070),绑定多个servlet(功能)
-
加载元数据
loadFromDisk(conf) -> loadFsImage(startOpt)
1)合并元数据,将fsimage和editlog合并
2)把合并出来新的fsimage写到磁盘,老的删掉
3)打开一个新的editlog,开始写日志。
3. 创建RPC服务端
createRpcServer(conf) -> NameNodeRpcServer -> 启动ServiceRpcServer
4. 启动公共服务,NameNode RPC的服务就在里面启动的
1)进行资源检查,检查存储元数据的磁盘空间是否足够
a. 如果磁盘空间不足;会在日志里打印告警,且hasResourceAvailable = false
2)进入安全模式检查,检查是否可以退出安全模式
HDFS进入安全模式的三个条件(或关系):
条件一:计算阈值,block 块数 * 0.999,判断目录元数据是否大于阈值
threshold != 0 && blockSafe < blockThreshold
HDFS的元数据那儿程序总计分析出来上一次关闭集群之前
假设有1000个complete的block,默认是阈值的计算比例是0.999
这样blockThreshold的值是999
现在集群起来了以后,发现累计datanode汇报过来的complete的block个数(blockSafe)
如果小于999就让集群处于安全模式。
条件二:判断存活dataNode个数是否大于配置数目
datanodeThreshold != 0 && getNumLiveDataNodes() < datanodeThreshold
如果存活的datanode的个数小于一定的数目的时候,也会进去安全模式
默认是0,所以相当于没启用,但是我们也可以配置,如果存活的datanode个数
少于多少就让HDFS集群出入安全模式。

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



