踏着前人的脚印学hadoop——ipc中的Client
1、Client有五个内部类,分别是Call,ParallelCall,ParallelResult,Connetion,ConnectionId
其实这五个类就是去完成两件事情的,一件事情是连接,另外一件事情是调用,而连接呢主要通过Connection来完成,ConnectionId是它的辅助类。调用呢,Call为主,由于会同时和NameNode和其他DataNode通讯,所以需要一个ParallelCall来完成这件事,调用完了总有个返回值吧,所以要有ParallelResult这个类。
2、先来看ConnectionId
This class holds the address and the user ticket. The client connections to servers are uniquely identified by <remoteAddress, protocol, ticket>这个是源码的解释,
下边有10个属性,最核心也就是address,ticket,protocol,连接相关的有rpcTimeout,serverPrincipal,maxIdleTime,connectionRetryPolicy,tcpNoDelay,pingInterval
Nagle算法是以他的发明人John Nagle的名字命名的,它用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率。Nagle的算 法通常会在TCP程 序里添加两行代码,在未确认数据发送的时候让发送器把数据送到缓存里。任何数据随后继续直到得到明显的数据确认或者直到攒到了一定数量的数据了再发包。
InetSocketAddress address;
UserGroupInformation ticket;
Class<?> protocol;
private static final int PRIME = 16777619;//这个家伙也就是在hashcode里边用了一下
private int rpcTimeout;
private String serverPrincipal;
private int maxIdleTime; //connections will be culled if it was idle for maxIdleTime msecs
private final RetryPolicy connectionRetryPolicy;
private boolean tcpNoDelay; // if T then disable Nagle's Algorithm
private int pingInterval; // how often sends ping to the server in msecs
3、再来看看Connection,
Thread that reads responses and notifies callers. Each connection owns a socket connected to a remote address. Calls are multiplexed through this socket: responses may be delivered out of order.
这个家伙继承了Thread这个类,主要读取相应通知调用者,每个连接都维护一个到远端的连接。调用时多路复用:响应不是按序的?
里边也包含了一个内部类PingInputStream
This class sends a ping to the remote side when timeout on reading. If no failure is detected, it retries until at least a byte is read.
如果没有检测到失败,它会坚持重试到最后一个字节被读取
private class PingInputStream extends FilterInputStream {}
下面的属性
private InetSocketAddress server; // server ip:port,这个ConnectionId里边有
private String serverPrincipal; // server's krb5 principal name kerberos这个是一种安全认证系统,如果失败了会用SASL :简单认证与安全层(Simple Authentication And Security Layer),简单认证和安全层,简单身份验证和安全层 ?
private ConnectionHeader header; // connection header
private final ConnectionId remoteId; // connection id
private AuthMethod authMethod; // authentication method
private boolean useSasl;
private Token<? extends TokenIdentifier> token;
private SaslRpcClient saslRpcClient;
private Socket socket = null; // connected socket
private DataInputStream in;
private DataOutputStream out;
下面这几个ConnectionId里边也有
private int rpcTimeout;
private int maxIdleTime; //connections will be culled if it was idle for maxIdleTime msecs
private final RetryPolicy connectionRetryPolicy;
private boolean tcpNoDelay; // if T then disable Nagle's Algorithm
private int pingInterval; // how often sends ping to the server in msecs
// currently active calls,并发的这几个要注意下,自己不是很熟,以前自己也没见过把Exception定义为属性变量
private Hashtable<Integer, Call> calls = new Hashtable<Integer, Call>();
private AtomicLong lastActivity = new AtomicLong();// last I/O activity time
private AtomicBoolean shouldCloseConnection = new AtomicBoolean(); // indicate if the connection is closed
private IOException closeException; // close reason
4、上边的calls里边出现了Call这个类,
A call waiting for a value.
这个简单,就5个属性,分别是id,参数,返回值,异常,结束标志位,平时我们一个方法调用也不过是个参数列表,返回值,异常,只不过这个加了个id和结束标志位done。
int id; // call id
Writable param; // parameter
Writable value; // value, null if error
IOException error; // exception, null if value
boolean done; // true when call is done
5、在看看这个ParallelCall
Call implementation used for parallel calls.
这个里边就两个属性,当然它继承至Call的属性暂时忽略
private ParallelResults results;
private int index;
6、上面的第一个属性ParallelResults,看看这个内部类
Result collector for parallel calls.
三个属性,也很简单
private Writable[] values;// store the value
private int size;//if (count == size) notify(); // if all values are in then notify waiting caller
private int count; // count it
踏着前人的脚印学hadoop——ipc中的Client的更多相关文章
- 踏着前人的脚印学hadoop——ipc中的Server
1.An abstract IPC service. IPC calls take a single {@link Writable} as a parameter, and return a {@ ...
- 踏着前人的脚印学Hadoop——RPC源码
A simple RPC mechanism.A protocol is a Java interface. All parameters and return types must be one ...
- 踏着前人的脚印学Hadoop——结构、重点
HDFS作为一个分布式文件系统,是所有这些项目的基础.分析好HDFS,有利于了解其他系统.由于Hadoop的HDFS和MapReduce是同一个项目,我们就把他们放在一块,进行分析. 如果把整个had ...
- 踏着前人的脚印学Hadoop——序列化,Writerable
package org.apache.hadoop.io; import java.io.DataOutput;import java.io.DataInput;import java.io.IOEx ...
- org.apache.hadoop.ipc.RemoteException(java.io.IOException)
昨晚突然之间mr跑步起来了 jps查看 进程都在的,但是在reduce任务跑了85%的时候会抛异常 异常情况如下: 2016-09-21 21:32:28,538 INFO [org.apache.h ...
- Hadoop IPC的代码结构分析
与IPC相关的代码在org.apache.hadoop.ipc包下.共七个文件,其中4个辅助类: RemoteException Status VersionedProtocol Connection ...
- 一张图解释Hadoop IPC
基于hadoop2.6.2.... 一张图Server启动,Client访问..... RPC是IPC的一种,IPC还有另外一种LPC,相关请看参考中的3 使用hadoop ipc步骤: 1.定义RP ...
- 运行基准测试hadoop集群中的问题:org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /benchmarks/TestDFSIO/io_data/test_
在master(即:host2)中执行 hadoop jar hadoop-test-1.1.2.jar DFSCIOTest -write -nrFiles 12 -fileSize 10240 - ...
- hive运行query语句时提示错误:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.io.IOException:
hive> select product_id, track_time from trackinfo limit 5; Total MapReduce jobs = 1 Launching Jo ...
随机推荐
- MapReduce中作业调度机制
MapReduce中作业调度机制主要有3种: 1.先入先出FIFO Hadoop 中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业. 2.公平调度器(相当于时间 ...
- 20160815_Redis安装
OS: CentOS6.4(x64) 参考网址: http://www.cnblogs.com/haoxinyue/p/3620648.html http://www.codeceo.com/arti ...
- A7600官方ROM_VIBEUI_V2.5_1537联通版使用体验
A7600官方ROM_VIBEUI_V2.5_1537联通版使用体验 A7600我原来的ROM是西关少爷精简的VIBEUI1521,已经root,后来不小心恢复了出厂设置,然后就出现异常了,用twrp ...
- 【bzoj1027】合金
[bzoj1027]合金 分析 数形结合+计算几何+Floyd最小环. http://blog.csdn.net/popoqqq/article/details/40539273 虽然这样占大家的很不 ...
- C#项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标
#项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标 2012-08-25 09:11匿名 | 浏览 3286 次 C#编程 C#项目用vs2005自带的工具打包后安装的桌面快捷方式图标怎么设 ...
- js数据类型和关系运算语法
var box=; alert(typeof box); //box是Undefined类型,值是undefined,类型返回的字符串是undefined var box=true; alert(ty ...
- selenium+python笔记3
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc:学习unittest的用法 注意setUp/setUpCl ...
- VBA对象模型(2)
Excel对象模型简介 在介绍Excel对象模型之前,让我们先来看一个简单的例子.大多数工厂都是按这样的结构进行设置的:最上层为工厂总部,第二层次分为各个车间,在车间下面又分各班组.就这样组织在一起, ...
- zju 1091
// Traveling Knight Problem #include "stdafx.h" #include <string> #include <strin ...
- Css:背景色透明,内容不透明之终极方法!兼容所有浏览器
转载 http://www.cnblogs.com/jikey/archive/2012/08/31/2665880.html <!DOCTYPE html PUBLIC "-//W3 ...