hadoop源码解读

一、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)初始化方法。

  1. startHttpServer方法 -> 设置主机名和端口号(50070),绑定多个servlet(功能)

  2. 加载元数据

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集群出入安全模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值