作为典型的分布式系统,Hadoop中各个实体间存在着大量的交互,远程过程调用让用户可以像调用本地方法一样调用另外一个应用程序提供的服务,而不必设计和开发相关的信息发送、处理和接收等具体代码,是一种重要的分布式计算技术,它提高了程序的互操作性,在Hadoop的实现中得到广泛的应用。
Hadoop没有使用Java RMI,而是实现了一套自己独有的节点间通信机制,理由是有效的IPC(Inter-Process Communication,进程间通信)对于Hadoop来说是至关重要的,Hadoop需要精确控制进程间通信中比如连接、超时、缓存等通信细节。
如下是Hadoop 框架中实现了客户端调用JobTracker服务器端方法的一个具体应用,功能是返回分配给新作业的ID串。接下来从客户端调用、服务器端接口及功能实现和服务器端的监听来展现这一功能。
1 客户端调用类JobClient
publicclass JobClient extends Configured implements MRConstants, Tool {
private JobSubmissionProtocol jobSubmitClient;
// 客户端通过代理对象直接进行方法调用。
public RunningJob submitJobInternal(final JobConf job) {
... ...
JobID jobId = jobSubmitClient.getNewJobId();
... ...
}
// 如下是代理对象的构造方法,首先判断当前hadoop环境是否是本地的,如果不是本地的则构造一个要请求服务器的网络地址(IP和端口),网络地址的信息来自于配置文件中属性mapred.job.tracker的配置,如果配置文件没有该项配置,则取默认值local。
publicvoid init(JobConf conf) throws IOException {
String tracker = conf.get("mapred.job.tracker", "local");
if ("local".equals(tracker)) {
conf.setNumMapTasks(1);
this.jobSubmitClient = new LocalJobRunner(conf);
} else {
this.jobSubmitClient = createRPCProxy(JobTracker.getAddress(conf), conf);
}
}
在IPC中,使用RPC.getProxy()方法获取到一个JobSubmissionProtocol代理对象。
privatestatic JobSubmissionProtocol createRPCProxy(InetSocketAddress addr,Configuration conf) throws IOException {
return (JobSubmissionProtocol) RPC.getProxy(JobSubmissionProtocol.class,
JobSubmissionProtocol.versionID, addr,
UserGroupInformation.getCurrentUser(), conf,
NetUtils.getSocketFactory(conf, JobSubmissionProtocol.class));
}
2 接口JobSubmissionProtocol
如下是服务器端服务接口定义:
interface JobSubmissionProtocol extends VersionedProtocol {
publicstaticfinallongversionID = 28L;
/**
* Allocate a name for the job.
* @return a unique job name for submitting jobs.
* @throws IOException
*/
public JobID getNewJobId() throws IOException;
}
3 实现类JobTracker
如下是服务器端服务实现类定义:
publicclass JobTracker implements MRConstants, InterTrackerProtocol,
JobSubmissionProtocol, TaskTrackerManager, RefreshUserMappingsProtocol,
RefreshAuthorizationPolicyProtocol, AdminOperationsProtocol,
JobTrackerMXBean {
/**
* Allocates a new JobId string.
*/
publicsynchronized JobID getNewJobId() throws IOException {
returnnew JobID(getTrackerIdentifier(), nextJobId++);
}
}
4 服务器监听类
在服务器端先构造一个要提供服务的网络地址addr,传递到RPC.getServer()方法中。服务器端使用RPC.getServer()方法创建服务器端对象interTrackerServer。
Server端的Handler实例(线程)的个数为由配置文件的属性mapred.job.tracker.handler.count指定。
publicclass JobTracker implements MRConstants, InterTrackerProtocol,
JobSubmissionProtocol, TaskTrackerManager, RefreshUserMappingsProtocol,
RefreshAuthorizationPolicyProtocol, AdminOperationsProtocol,
JobTrackerMXBean {
JobTracker(final JobConf conf, String identifier, Clock clock, QueueManagerqm) {
... ...
InetSocketAddress addr = getAddress(conf);
... ...
inthandlerCount = conf.getInt("mapred.job.tracker.handler.count", 10);
this.interTrackerServer =
RPC.getServer(this, addr.getHostName(), addr.getPort(), handlerCount,
false, conf, secretManager);
... ...
}
publicstatic InetSocketAddress getAddress(Configuration conf) {
String jobTrackerStr =
conf.get("mapred.job.tracker", "localhost:8012");
return NetUtils.createSocketAddr(jobTrackerStr);
}
}
相关推荐
04_Hadoop_概论_大数据的应用场景.mp4 06_Hadoop_概论_未来工作内容.mp4 07_Hadoop_入门_课程介绍.mp4 11_Hadoop_入门_Hadoop优势.mp4 13_Hadoop_入门_HDFS概述.mp4 14_Hadoop_入门_YARN概述.mp4 16_Hadoop_入门_...
大数据之Hadoop学习教程+笔记合计_超详细完整.zip
Netflix基于AWS的大数据平台Hadoop架构解析.docxNetflix基于AWS的大数据平台Hadoop架构解析.docxNetflix基于AWS的大数据平台Hadoop架构解析.docxNetflix基于AWS的大数据平台Hadoop架构解析.docxNetflix基于AWS的...
本系统利用大数据技术,合理的为用户做出推荐,推荐的结果可靠程度很高,这就是我的优势所在,因为它和一般的推荐系统的推荐算法不太一样,我的推荐算法是利用Hadoop技术写的,我们可以利用Hadoop集群的高吞吐量,一...
该文档简要介绍了大数据与Hadoop的概念及相关大数据框架,对于在大数据的初学者来说有一定的帮助,可以指导如何学习,以及学习各个框架的步骤
《Hadoop大数据技术原理与应用》课后习题答案
hadoop大数据平台技术与应用 --课后习题参考答案.pdf
大数据系列内部培训经典内容,包括大数据系列架构,大数据Hadoop系列、Spark、Hive、Storm、Hbase、Sqoop......
Netflix基于AWS的大数据平台Hadoop架构解析.pdfNetflix基于AWS的大数据平台Hadoop架构解析.pdfNetflix基于AWS的大数据平台Hadoop架构解析.pdfNetflix基于AWS的大数据平台Hadoop架构解析.pdfNetflix基于AWS的大数据...
1.大数据框架hadoop; 2.根据表名,获取全部数据,支持翻页; 3.获取数据总条数; 4.根据表名、上次查询最后一条记录的rowkey,获取下一页数据; 5.数据支持jsonarray/list等;
大数据之hadoop,spart全套全技术栈视频课程,包含spark,hadoop,storm,kafka,mllib等组件的安装,编程等,依次从基础,进阶直到实际实践。
尚硅谷大数据之Hadoop入门,Hadoop是目前大数据领域的流行框架,用java编写,运行在Linux集群上,这篇笔记关于Hadoop做了详细的介绍,并且还讲解了如何搭建Hadoop本地模式,伪分布模式和完全分布式模式
《Hadoop大数据平台构建与应用》_米洪
《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf...
大数据很好的资料,欢迎大家共享资源,共同进步!
大数据Hadoop框架核心技术对比与实现.pdf
大数据专业Hadoop开发技术课程实践教学探索.pdf
大数据整理hadoop/hive