hdfs回顾总结(3)---使用hadoopRpc模拟namenode元数据的查询
2017-03-16 10:14
239 查看
RPC的原理可以参考之前的博客自定义rpc的实现,本文做的仅仅是hadooprpc的简单调用来模拟实现namenode元数据的业务查询。
MyNameNode.java
2、服务端的启动:
PublishServiceUtil.java
MyHdfsClient.java
当然这仅仅是模拟,真正的元数据的管理是在hadoop的FSNamesystem.java这个类中。
hadoopRPC框架是在hadoop的dadoop-common的jar中。
一、protocol约定(接口规范)
ClientNamenodeProtocol.javapackage HadoopRpc.protocol; /** * Created by tianjun on 2017/3/16 0016. */ public interface ClientNamenodeProtocol { public static final long versionID = 1L; public String getMetaData(String path); }
二、服务器端
1、具体业务的实现:MyNameNode.java
package HadoopRpc.service; import HadoopRpc.protocol.ClientNamenodeProtocol; /** * * Created by tianjun on 2017/3/16 0016. */ public class MyNameNode implements ClientNamenodeProtocol{ // 模拟namenode的业务方法之一:查询元数据 @Override public String getMetaData(String path){ return path + ": 3 - {BLK_1,BLK_2} dn3..."; } }
2、服务端的启动:
PublishServiceUtil.java
package HadoopRpc.service; import HadoopRpc.protocol.ClientNamenodeProtocol; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.ipc.Server; import java.io.IOException; /** * 发布服务 * Created by tianjun on 2017/3/16 0016. */ public class PublishServiceUtil { public static void main(String[] args) throws IOException { RPC.Builder builder = new RPC.Builder(new Configuration()); builder.setBindAddress("localhost") .setPort(8888) .setProtocol(ClientNamenodeProtocol.class) .setInstance(new MyNameNode()); Server server = builder.build(); server.start(); } }
三、客户端
客户端的接口规范,必须和服务器端的一模一样(包括包名和类名)MyHdfsClient.java
package HadoopRpc.client; import HadoopRpc.protocol.ClientNamenodeProtocol; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import java.io.IOException; import java.net.InetSocketAddress; /** * Created by tianjun on 2017/3/16 0016. */ public class MyHdfsClient { public static void main(String[] args) throws IOException { ClientNamenodeProtocol namenode = RPC.getProxy(ClientNamenodeProtocol.class, 1L, new InetSocketAddress("localhost", 8888), new Configuration()); String metaDate = namenode.getMetaData("/tianjun"); System.out.println(metaDate); } }
四、结果
先启动服务器端,在启动客户端,在客户端可以看到元数据的具体信息如下:/tianjun: 3 - {BLK_1,BLK_2} dn3...
当然这仅仅是模拟,真正的元数据的管理是在hadoop的FSNamesystem.java这个类中。
hadoopRPC框架是在hadoop的dadoop-common的jar中。
相关文章推荐
- Hadoop使用java查询HDFS 错误:Wrong FS: hdfs://localhost:9000/user/hadoop, expected: file:///
- 使用Hadoop API操作HDFS文件时遇到的问题及解决总结
- hadoop集群hdfs使用情况统计(邮件)
- Hadoop的分布式文件系统(HDFS)的使用
- HDFS超租约异常总结(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException)
- hadoop、zookeeper、hbase整合,使用java查询hbase数据报错org.apache.hadoop.hbase.client.NoServerForRegionException:
- [置顶] hadoop之HDFS总结
- Linux下Hadoop hdfs Java API使用
- Hadoop 学习总结之一:HDFS简介
- Win7中使用Eclipse连接虚拟机中的Ubuntu中的Hadoop2.7.1经验总结
- hadoop(三)HDFS基础使用
- Ext.Net 使用总结之查询条件中的起始日期
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令
- Symfony2使用Doctrine进行数据库查询方法实例总结
- Sqoop_详细总结 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出
- 使用hadoop distcp从ftp拷贝文件到hdfs
- 使用python来访问Hadoop HDFS存储实现文件的操作
- Hadoop 学习总结之一:HDFS简介
- 使用python hdfs模块操作hadoop hdfs的一个坑
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令