Hadoop中RPC机制

2019-03-28 13:59|来源: 网络

RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。Hadoop底层的交互都是通过rpc进行的。例如:datanode和namenode 、tasktracker和jobtracker、secondary namenode和namenode之间的通信都是通过rpc实现的。下面是rpc交互过程图: 

1.客服端调用的总过程:

Hadoop的RPC客户端代码其实就一个类:org.apache.hadoop.ipc.Client。这个类使用Java的动态代理技术,生成服务器的业务接口的代理,通过socket将调用的业务方法和参数传送到服务器端,并且等待服务器端的响应。

客户端调用的序列图如下:

 

 例如:TaskTracker请求与JobTracker的通信:

TaskTracker通过:

      this.jobClient = (InterTrackerProtocol)

          RPC.waitForProxy(InterTrackerProtocol.class, InterTrackerProtocol.versionID,

                       jobTrackAddr, this.fConf);

中的InterTrackerProtocol 去和JobTracker通信。

在RPC中通过:

       VersionedProtocol proxy =

            (VersionedProtocol) Proxy.newProxyInstance(

            protocol.getClassLoader(), new Class[] { protocol },

            new Invoker(addr, ticket, conf, factory));

产生一个动态代理完成JobTracker和TaskTracker之间的心跳交流。

相关问答

更多
  • 为了增强Hadoop的安全机制, 从2009年起, Apache专门抽出一个团队,为Hadoop增加安全认证和授权机制,至今为止,已经可用。   Apache Hadoop 1.0.0版本和Cloudera CDH3之后的版本添加了安全机制,如果你将Hadoop升级到这两个版本,可能会导致Hadoop的一些应用不可用。   Hadoop提供了两种安全机制:Simple和Kerberos。Simple机制(默认情况,Hadoop采用该机制)采用了SAAS协议。 也就是说,用户提交作业时,你说你是XXX(在Jo ...
  • Hadoop的核心机制是通过HDFS文件系统和MapReduce算法进行存储资源、内存和程序的有效利用与管理。然后Hadoop还包括的项目: mapreduce分布式处理模型;HDFS分布式文件系统;pig数据流语言和运行环境;hive分布式按列存储的数据仓库;HBase,ZooKeeper,Sqoop
  • map分类,reduce整合,通过相同的key将需要的信心通过map整合到同一个reduce中,在reduce中实现算法
  • 这是我见过的三个处理RPC的库。 我对他们中的任何一个都没有丰富的经验,所以请大家注意我的评论。 卡斯特拉 。 最近更新,并有一个很好的自述。 抓取 。 看起来简单,甜美,可能就足够了。 Shoreleave 。 我成功地使用了这个。 它工作正常,但几年后没有更新。 Here are three libraries I've seen that handle RPC. I don't have significant experience with any of them, so take my comme ...
  • 要理解RPC忘记POST和GET,它的工作原理是不同的(从编程的角度来看,它在内部使用它,但除非你想做一些特殊的事情,否则你没有看到或不需要理解它)。 RPC的一个很好的起点是GWT文档: http : //code.google.com/webtoolkit/tutorials/1.6/RPC.html 给你一个总结。 在使用RPC时, myServiceImpl需要实现名为myService的接口的方法,除了扩展RemoveServiceServlet 。 这些方法以您想要发送给服务器的数据作为参数。 ...
  • http://www.rabbitmq.com/api-guide.html#rpc 如果没有,您可以在此处下载包含示例代码的Java API源代码。 http://www.rabbitmq.com/releases/rabbitmq-java-client/v2.0.0/rabbitmq-java-client-2.0.0.zip那里有一个示例文件夹 - 下面的代码来自HelloServer.java和HelloClient.java 服务器 import com.rabbitmq.client.AMQP ...
  • 好想象一下,您想要调用在服务器端实现的操作,例如登录用户。 服务器上有一个注册用户的数据库。 clinet(浏览器中的javascript代码)必须将用户的名称和密码发送到服务器。 然后,服务器(Java代码)联系数据库并对用户进行身份验证,并将true或false返回给客户端。 通过这种方式,您可以从客户端远程调用服务器上的操作(登录过程),并获得响应。 因此名称为RPC。 这里的关键是了解客户端和服务器端 。 在客户端你有javascript,但使用java脚本你无法访问数据库。 此外,您没有在每个客户 ...
  • 您可以使用通道来实现超时模式: import "time" c := make(chan error, 1) go func() { c <- client.Call("Service", args, &result) } () select { case err := <-c: // use err and result case <-time.After(timeoutNanoseconds): // call timed out } select将阻塞,直到timeoutN ...
  • hadoop 0.20不支持这个,请阅读本期https://issues.apache.org/jira/browse/HADOOP-6889 hadoop 0.20 doesn't support this, please read this issue https://issues.apache.org/jira/browse/HADOOP-6889
  • 好的,找到原因,我连接到纱线资源管理器的错误端口。 正确的配置是:yarn.resourcemanager.address = localhost:8032 Ok, found the reason, I connected to the wrong port for the yarn resourcemanager. The correct configuration is: yarn.resourcemanager.address=localhost:8032