Hadoop的底层架构——RPC机制

RPC是远程过程调用(Remote Procedure Call),即远程调用其他虚拟机中运行的java object。RPC是一种客户端/服务器模式,那么在使用时包括服务端代码和客户端代码,还有我们调用的远程过程对象。

HDFS的运行就是建立在此基础之上的。本章通过分析实现一个简单的RPC程序来分析HDFS的运行机理。

下面的代码是服务端代码。

public class MyServer { 

    public static final int SERVER_PORT = 12345; 

    public static final String SERVER_ADDRESS = "localhost"; 

    public static void main(String[] args) throws IOException { 

        final Server server = RPC.getServer(new MyBiz(), SERVER_ADDRESS, SERVER_PORT, new Configuration()); 

        server.start(); 

    } 

}

核心在于第5行的RPC.getServer方法,该方法有四个参数,第一个参数是被调用的java对象,第二个参数是服务器的地址,第三个参数是服务器的端口 。获得服务器对象后,启动服务器。这样,服务器就在指定端口监听客户端的请求。

下面的代码是被调用的远程对象类。

public class MyBiz implements MyBizable{ 

    public static long BIZ_VERSION = 2345234L; 

    @Override 

    public String hello(String name){ 

        System.out.println("我被调用了"); 

        return "hello "+name; 

    } 

    @Override 

    public long getProtocolVersion(String protocol, long clientVersion) throws IOException { 

        return BIZ_VERSION; 

    } 

}

被调用的远程对象实现了接口MyBizable,这里面有两个方法被实现,一个就是hello方法,另一个是getProtocalVersion方法。这个hello方法内部有个输出语句。

下面的代码是远程调用类的接口定义。

public interface MyBizable extends VersionedProtocol{ 

    public abstract String hello(String name); 

}

这个接口中的方法就是刚才的Biz中实现的方法。接口继承的VersionedProtocal,是hadoop的RPC的接口,所有的RPC通信必须实现这个一接口,用于保证客户端和服务端的端口一致。服务端被调用的类必须继承这个接口VersionedProtocal。

下面是客户端代码,这里使用的调用对象的接口。

public class MyClient { 
    public static void main(String[] args) throws Exception { 
        final MyBizable proxy = (MyBizable)RPC.getProxy(MyBizable.class, MyBiz.BIZ_VERSION, new InetSocketAddress(MyServer.SERVER_ADDRESS, MyServer.SERVER_PORT), new Configuration()); 
        //调用接口中的方法 
        final String result = proxy.hello("world"); 
        System.out.println(result); 
        //本质是关闭网络连接 
        RPC.stopProxy(proxy); 
    } 
}

以上代码中核心在于RPC.getProxy(),该方法有四个参数,第一个参数是被调用的接口类,第二个是客户端版本号,第三个是服务端地址。返回的代理对象,就是服务端对象的代理,内部就是使用java.lang.Proxy实现的。

运行时,先启动服务端,再启动客户端。读者可以服务端和客户端输出信息。

从上面的RPC调用中,可以看出:在客户端调用的业务类的方法是定义在业务类的接口中的。该接口实现了VersionedProtocal接口

现在我们在命令行执行jps命令,查看输出信息,如图5-1所示。

clip_image001

图5-1

可以看到一个java进程,是“MyServer”,该进程正是我们刚刚运行的rpc的服务端类MyServer。大家可以联想到我们搭建hadoop环境时,也执行过该命令用来判断hadoop的进程是否全部启动。那么可以判断,hadoop启动时产生的5个java进程也应该是RPC的服务端。我们观察NameNode的源代码,如图5-2,可以看到NameNode确实创建了RPC的服务端。

clip_image003

图5-2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二手房统计分析是一个基于Hadoop的综合项目,旨在帮助人们深入了解二手房市场情况并进行相应的统计分析。 首先,我们需要收集大量的二手房交易数据。可以从不同的渠道收集数据,如网络房产平台、中介公司等。通过使用Hadoop的分布式文件系统(HDFS),可以将这些数据存储在集群中的多个节点上,以便后续的处理和分析。 然后,需要对收集到的数据进行清洗和预处理。这包括去除重复数据、处理缺失值和异常值等。通过使用Hadoop的MapReduce框架,可以将清洗和预处理任务并行化处理,以提高处理效率和准确性。 接下来,可以进行一些常见的统计分析。比如,可以计算不同城市二手房价格的平均值、中位数和标准差,以了解各个城市的房价水平和波动程度。同样地,还可以计算不同地区的交易量和均价,以找到二手房交易的热点区域。 此外,也可以进行数据可视化的工作,以方便人们更直观地理解二手房市场情况。通过使用Hadoop的数据处理工具和可视化库,如Hive和Tableau,可以将统计分析的结果以图表或地图的形式展示出来。 最后,还可以通过机器学习技术进行更深入的分析。比如,可以建立预测模型来预测二手房价格,或者进行聚类分析找到不同类型的二手房市场。通过使用Hadoop的机器学习库,如Spark MLlib,可以更高效地处理大规模的数据和模型训练。 总之,通过Hadoop的分布式计算和数据处理能力,二手房统计分析项目可以帮助人们更好地了解二手房市场情况,并提供相应的统计和预测分析,以支持人们做出更明智的决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值