大数据学习之HDFS的工作机制07

时间:2023-03-09 02:12:44
大数据学习之HDFS的工作机制07

1:namenode+secondaryNameNode工作机制

大数据学习之HDFS的工作机制07

2:datanode工作机制

大数据学习之HDFS的工作机制07

3:HDFS中的通信(代理对象RPC)

下面用代码来实现基本的原理

1:服务端代码

package it.dawn.HDFSPra.RPC.server;

import java.io.IOException;

import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Builder;
import org.apache.hadoop.ipc.RPC.Server; import it.dawn.HDFSPra.RPC.protocol.RpcProtocol; /**
* @version 1.0
* @author Dawn
* @date 2019年4月29日17:10:25
* @return 模拟了一个rpc通信。该类是服务端
*/
public class RpcServer {
public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
//1.构建rpc框架
Builder builder = new RPC.Builder(new Configuration()); //2.绑定地址
builder.setBindAddress("localhost"); //3.绑定端口号
builder.setPort(6666); //4.绑定协议
builder.setProtocol(RpcProtocol.class); //5.调用协议的实现类
builder.setInstance(new MyRpcProtocol()); //6.创建服务
Server servers= builder.build();
servers.start();
} }

  

2:代理对象接口

package it.dawn.HDFSPra.RPC.protocol;

public interface RpcProtocol {
//1.定义协议的id
public static final long versionID=1L; //2.定义方法(拿到元数据的方式)
public String getMetaData(String path); }

  

3:代理对象的实现

package it.dawn.HDFSPra.RPC.server;

import it.dawn.HDFSPra.RPC.protocol.RpcProtocol;

public class MyRpcProtocol implements RpcProtocol{

@Override
public String getMetaData(String path) { return path+": 3 - {BLK_1,blk_2,BLK_3...}";
} }

  

4:客服端

package it.dawn.HDFSPra.RPC.client;

import java.io.IOException;
import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC; import it.dawn.HDFSPra.RPC.protocol.RpcProtocol; /**
* @version 1.0
* @author Dawn
* @date 2019年4月29日17:10:25
* @return 模拟了一个rpc通信。该类是客服端
*/
public class Client {
public static void main(String[] args) throws IOException {
//1.拿到协议
RpcProtocol protocol =RPC.getProxy(RpcProtocol.class, 1L, new InetSocketAddress("localhost", 6666), new Configuration()); //2.发送请求
String result=protocol.getMetaData("/dawnhahhaha"); //3.拿到元数据信息
System.out.println(result);
}
}