1、An abstract IPC service.  IPC calls take a single {@link Writable} as a parameter, and return a {@link Writable} as their value.  A service runs on a port and is defined by a parameter class and a value class.

2、共有5个内部类ExceptionsHandler,Call,Listener,Responder,Connection,Handler

他需要有一个线程 (Listener)来 accept socket,同时需要一些 Reader线程 来进行 socket 的 read,还有一个 Responder 来进行 socket 的 write,另外,还有若干个 handler线程 来进行业务处理。

3、很多内部属性,位置比较散乱

private final boolean authorize;
private boolean isSecurityEnabled;
private ExceptionsHandler exceptionsHandler = new ExceptionsHandler();

private String bindAddress;
  private int port;                               // port we listen on
  private int handlerCount;                       // number of handler threads
  private int readThreads;                        // number of read threads
  private Class<? extends Writable> paramClass;   // class of call parameters
  private int maxIdleTime;                        // the maximum idle time after  which a client may be disconnected
  private int thresholdIdleConnections;           // the number of idle connections after which we will start cleaning up idle   connections
  int maxConnectionsToNuke;                       // the max number of connections to nuke during a cleanup
  protected RpcInstrumentation rpcMetrics;
  private Configuration conf;
  private SecretManager<TokenIdentifier> secretManager;

private int maxQueueSize;
  private final int maxRespSize;
  private int socketSendBufferSize;
  private final boolean tcpNoDelay; // if T then disable Nagle's Algorithm

volatile private boolean running = true;         // true while server runs
  private BlockingQueue<Call> callQueue; // queued calls

private List<Connection> connectionList =
    Collections.synchronizedList(new LinkedList<Connection>());
  //maintain a list of client connections
  private Listener listener = null;
  private Responder responder = null;
  private int numConnections = 0;
  private Handler[] handlers = null;

4、这个Call和Client里边的Call是不一样的,

A call queued for handling.

private Writable param;                       // the parameter passed
private Connection connection;                // connection to client
private long timestamp;     // the time received when response is null ; the time served when response is not null
private ByteBuffer response;                      // the response for this call

5、Connection

Reads calls from a connection and queues them for handling.

private boolean rpcHeaderRead = false; // if initial rpc header is read
  private boolean headerRead = false;  //if the connection header that follows version is read.

private SocketChannel channel;
  private ByteBuffer data;
  private ByteBuffer dataLengthBuffer;
  private LinkedList<Call> responseQueue;
  private volatile int rpcCount = 0; // number of outstanding rpcs
  private long lastContact;
  private int dataLength;
  private Socket socket;// Cache the remote host & port info so that even if the socket is disconnected, we can say where it used to connect to.
  private String hostAddress;
  private int remotePort;
  private InetAddress addr;
  ConnectionHeader header = new ConnectionHeader();
  Class<?> protocol;
  boolean useSasl;
  SaslServer saslServer;
  private AuthMethod authMethod;
  private boolean saslContextEstablished;
  private boolean skipInitialSaslHandshake;
  private ByteBuffer rpcHeaderBuffer;
  private ByteBuffer unwrappedData;
  private ByteBuffer unwrappedDataLengthBuffer;
 
  UserGroupInformation user = null;
  public UserGroupInformation attemptingUser = null; // user name before auth

// Fake 'call' for failed authorization response
  private final int AUTHROIZATION_FAILED_CALLID = -1;
  private final Call authFailedCall =
    new Call(AUTHROIZATION_FAILED_CALLID, null, this);
  private ByteArrayOutputStream authFailedResponse = new ByteArrayOutputStream();
  // Fake 'call' for SASL context setup
  private static final int SASL_CALLID = -33;
  private final Call saslCall = new Call(SASL_CALLID, null, this);
  private final ByteArrayOutputStream saslResponse = new ByteArrayOutputStream();
 
  private boolean useWrap = false;

6、ExceptionsHandler manages Exception groups for special handling e.g., terse exception group for concise logging messages

7、Handles queued calls .

8、Listens on the socket. Creates jobs for the handler threads

Listener里边有一个内部类,Reader

相应的属性有

private ServerSocketChannel acceptChannel = null; //the accept channel
private Selector selector = null; //the selector that we use for the server
private Reader[] readers = null;
private int currentReader = 0;
private InetSocketAddress address; //the address we bind at
private Random rand = new Random();
private long lastCleanupRunTime = 0; //the last time when a cleanup connec-
                                     //-tion (for idle connections) ran
private long cleanupInterval = 10000; //the minimum interval between
                                      //two cleanup runs
private int backlogLength = conf.getInt("ipc.server.listen.queue.size", 128);
private ExecutorService readPool;

9、Responder

Sends responses of RPC back to clients

相应的属性有

private Selector writeSelector;
    private int pending;         // connections waiting to register
   
    final static int PURGE_INTERVAL = 900000; // 15mins

http://www.cnblogs.com/echomyecho/p/3272238.html

踏着前人的脚印学hadoop——ipc中的Server的更多相关文章

  1. 踏着前人的脚印学hadoop——ipc中的Client

    1.Client有五个内部类,分别是Call,ParallelCall,ParallelResult,Connetion,ConnectionId 其实这五个类就是去完成两件事情的,一件事情是连接,另 ...

  2. 踏着前人的脚印学Hadoop——RPC源码

    A simple RPC mechanism.A protocol  is a Java interface.  All parameters and return types must be one ...

  3. 踏着前人的脚印学Hadoop——结构、重点

    HDFS作为一个分布式文件系统,是所有这些项目的基础.分析好HDFS,有利于了解其他系统.由于Hadoop的HDFS和MapReduce是同一个项目,我们就把他们放在一块,进行分析. 如果把整个had ...

  4. 踏着前人的脚印学Hadoop——序列化,Writerable

    package org.apache.hadoop.io; import java.io.DataOutput;import java.io.DataInput;import java.io.IOEx ...

  5. org.apache.hadoop.ipc.RemoteException(java.io.IOException)

    昨晚突然之间mr跑步起来了 jps查看 进程都在的,但是在reduce任务跑了85%的时候会抛异常 异常情况如下: 2016-09-21 21:32:28,538 INFO [org.apache.h ...

  6. Hadoop IPC的代码结构分析

    与IPC相关的代码在org.apache.hadoop.ipc包下.共七个文件,其中4个辅助类: RemoteException Status VersionedProtocol Connection ...

  7. 一张图解释Hadoop IPC

    基于hadoop2.6.2.... 一张图Server启动,Client访问..... RPC是IPC的一种,IPC还有另外一种LPC,相关请看参考中的3 使用hadoop ipc步骤: 1.定义RP ...

  8. 运行基准测试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 - ...

  9. 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 ...

随机推荐

  1. linux登录mysql

    mysql  -u 用户名 -p密码 mysql -u root -psqj888

  2. 转载:最大子段和问题(Maximum Interval Sum)

    一.问题描述         给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和.       例如(-2,11,- ...

  3. Fragment的2中载入方式!

    1.静态有动态 代码如下: public class MainActivity extends AppCompatActivity { private ContentFragment cf; @Ove ...

  4. Django开发博客 入门篇

    Django是神马? Django是一个开源免费的Web框架,使用Python编写.能够让你快速写出一个Web应用, 因为它包含了绝大部分的组件,比如认证,表单,ORM,Session,安全,文件上传 ...

  5. 添加SSH密钥到GitHub

    $ clip < ~/.ssh/id_rsa.pubbash: /c/Users/UsersName/.ssh/id_rsa.pub: No such file or directory [转] ...

  6. 四位专家分享:18个网站SEO建议

    搜索引擎优化(简称SEO)对于互联网新创企业来说很重要.下面是四位相关专家给出的建议. 第一位专家是Autotrader公司的搜索市场经理Dewi Nawasari,她认为SEO就是优化网站,以吸引你 ...

  7. [redis] session 保存到 redis 简单实现

    参考资料: [session保存到redis简单实现]http://blog.csdn.net/ppt0501/article/details/46700221 [Redis学习]http://blo ...

  8. (24)odoo中模型标识汇总

    * 设置->技术->数据结构->模型                模型    模型描述    类型    瞬态模型account.account    科目    基础对象    ...

  9. jsp基础知识(基本的语法及原理)

    jsp 语法分为三种不同的类型: (1) 编译器指令: 类如: <%@ page import="java.io.*"%> (2) 脚本语法: 指定的是java代码: ...

  10. 初学java之触发响应事件

    import java.awt.*; import javax.swing.*; import java.awt.event.*; class WindowActionEvent extends JF ...