源码
第0章 RPC通信原理解析
RPC是什么
RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易。
过程是什么? 过程就是业务处理、计算任务,更直白的说,就是程序,就是想调用本地方法一样调用远程的过程
Ctrl+alt+D 能找到接口的实现类
双击shift查找
0)回顾
1)需求:
模拟RPC的客户端、服务端、通信协议三者如何工作的
2)代码编写:
(1)在HDFSClient项目基础上创建包名com.atguigu.rpc
(2)创建RPC协议
package com.atguigu.rpc;
public interface RPCProtocol {
long versionID = 666;
void mkdirs(String path);
}
(3)创建RPC服务端
package com.atguigu.rpc;
// 实现通信接口
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.Server;
import java.io.IOException;
public class NNServer implements RPCProtocol{
@Override
public void mkdirs(String path) {
System.out.println("服务端,创建路径" + path);
}
public static void main(String[] args) throws IOException {
Server server = new RPC.Builder(new Configuration())
.setBindAddress("localhost")
.setPort(8888)
.setProtocol(RPCProtocol.class)
.setInstance(new NNServer())
.build();
System.out.println("服务器开始工作");
server.start();
}
}
(4)创建RPC客户端
package com.atguigu.rpc;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import java.io.IOException;
import java.net.InetSocketAddress;
public class HDFSClient {
public static void main(String[] args) throws IOException {
// 获取客户端对象
RPCProtocol client = RPC.getProxy(
RPCProtocol.class,
RPCProtocol.versionID,
new InetSocketAddress("localhost", 8888),
new Configuration());
System.out.println("我是客户端");
client.mkdirs("/input");
}
}
3)测试
(1)启动服务端
观察控制台打印:服务器开始工作
在控制台Terminal窗口输入,jps,查看到NNServer服务
(2)启动客户端
观察客户端控制台打印:我是客户端
观察服务端控制台打印:服务端,创建路径/input
4)总结
RPC的客户端调用通信协议方法,方法的执行在服务端;
通信协议就是接口规范。
第1章 NameNode启动源码解析
1.1 启动9870端口服务
1.2 加载镜像文件和编辑日志
1.3 初始化NN的RPC服务端
1.4 NN启动资源检查
检查文件对应的存储路径能存储多少数据。
目的是为了防止 客户端的访问产生的大量的编辑日志 ,存储不下。100M
1.5 NN对心跳超时判断
10分钟+30秒
1.6 安全模式
第2章 DataNode启动源码解析
2.1 初始化DataXceiverServer
2.2 初始化HTTP服务
2.3 初始化DN的RPC服务端
2.4 DN向NN注册
2.5 向NN发送心跳
第3章 HDFS上传源码解析
为什么没有按字节一个一个写呢?因为是大数据有大量的数据,按字节写效率低下,所有打包形成packet,一步一步的写入到数据队列里面,
3.1 create创建过程
3.1.1 DN向NN发起创建请求
3.1.2 NN处理DN的创建请求
3.1.3 DataStreamer启动流程
3.2 write上传过程
3.1.1 向DataStreamer的队列里面写数据
3.1.2 建立管道之机架感知(块存储位置)
3.1.3 建立管道之Socket发送
3.1.4 建立管道之Socket接收
3.1.5 客户端接收DN写数据应答Response
第4章 Yarn源码解析
4.1 Yarn客户端向RM提交作业
4.2 RM启动MRAppMaster
4.3 调度器任务执行(YarnChild)
第5章 MapReduce源码解析