因为某些原因需要把前一段时间对Hadoop(版本基于0.20.2)的学习积累搬到这里,成为一个系列。写得会很简单,只为必要时给自己提醒。

IPC框架

所有Hadoop协议接口的实现都依赖Hadoop IPC;

Hadoop IPC的目标是通过RPC完成调用者(RPC::Invoker)对被调用者(RPC::Server)的方法调用,核心是对调用(即RPC::Invocation)的传递;

一个RPC客户端可以通过getProxy方法获取到RPC::Invoker,Invoker本质上是一个(is-a)客户端Client;Client将对RPC Server的方法调用封装为一个请求Call;在另一端,Hadoop的RPC服务器通过getServer方法获取到可提供协议接口(VersionedProtocol)方法实现的Server,方法的实现依赖将请求(Call)解析为调用(Invocation)后进行反射;

Client为每个连接构造一个Connection对象,以维护与连接有关的信息;Client将Call通过Connection传递给相应的Server;在Connection上,头部ConnectionHeader包含一些协议无关的信息,比如用户信息ugi、认证信息等。

服务器模型

Hadoop IPC框架中的Server采用了线程池的服务器模型,请求处理流程如上图。

Listener线程负责监听服务端口,为为进入的请求创建连接,并交给Reader线程处理;

Reader线程从连接中读出请求,放入callQueue队列;

Handler线程从callQueue队列中取出请求,解析请求的内容,调用相应的接口实现,将response内容交给Responder线程;

Responder线程负责将response送出。

Reader的个数由ipc.server.read.threadpool.size决定,默认为1;(为什么默认只使用1个reader?猜测因jvm 1.6开始epoll已经成为默认的nio selector,1个就够了)

Handler的个数在服务器创建时由具体的应用服务器传参,Namenode的handler个数由dfs.namenode.handler.count决定,默认为10;Datanode的handler个数由dfs.datanode.handler.count决定,默认为3;JobTracker的handler个数由mapred.job.tracker.handler.count决定,默认为10;TaskTracker的handler个数由map/reduce slot个数决定,是2倍的最大slot数;

callQueue的长度由handler个数及ipc.server.handler.queue.size决定,默认是handler*100,即平均为每个handler队列100个call。

Hadoop学习笔记之一:Hadoop IPC的更多相关文章

  1. [转帖]hadoop学习笔记:hadoop文件系统浅析

    hadoop学习笔记:hadoop文件系统浅析 https://www.cnblogs.com/sharpxiajun/archive/2013/06/15/3137765.html 1.什么是分布式 ...

  2. Hadoop学习笔记—3.Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  3. Hadoop学习笔记【Hadoop家族成员概述】

    Hadoop家族成员概述 一.Hadoop简介 1.1 什么是Hadoop? Hadoop是一个分布式系统基础架构,由Apache基金会所开发,目前Yahoo!是其最重要的贡献者. Hadoop实现了 ...

  4. 吴裕雄--天生自然HADOOP学习笔记:hadoop集群实现PageRank算法实验报告

    实验课程名称:大数据处理技术 实验项目名称:hadoop集群实现PageRank算法 实验类型:综合性 实验日期:2018年 6 月4日-6月14日 学生姓名 吴裕雄 学号 15210120331 班 ...

  5. Hadoop学习笔记—6.Hadoop Eclipse插件的使用

    开篇:Hadoop是一个强大的并行软件开发框架,它可以让任务在分布式集群上并行处理,从而提高执行效率.但是,它也有一些缺点,如编码.调试Hadoop程序的难度较大,这样的缺点直接导致开发人员入门门槛高 ...

  6. [Hadoop] Hadoop学习笔记之Hadoop基础

    1 Hadoop是什么? Google公司发表了两篇论文:一篇论文是“The Google File System”,介绍如何实现分布式地存储海量数据:另一篇论文是“Mapreduce:Simplif ...

  7. Hadoop学习笔记(3) Hadoop I/O

    1. HDFS的数据完整性 HDFS会对写入的所有数据计算校验和,并在读取数据时验证校验和.datanode负责在验证收到的数据后存储数据及其校验和.正在写数据的客户端将数据及其校验和发送到由一系列d ...

  8. Hadoop学习笔记(3) Hadoop文件系统二

    1 查询文件系统 (1) 文件元数据:FileStatus,该类封装了文件系统中文件和目录的元数据,包括文件长度.块大小.备份.修改时间.所有者以及版权信息.FileSystem的getFileSta ...

  9. Hadoop学习笔记(3) Hadoop文件系统一

    1. 分布式文件系统,即为管理网络中跨多台计算机存储的文件系统.HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上.HDFS的构建思路为:一次写入.多次读取是最高效的访问模式.数据集通常由 ...

  10. 吴裕雄--天生自然Hadoop学习笔记:Hadoop简介

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储.Hadoop实现了一个分布式文件系统(H ...

随机推荐

  1. Sql server 2016 Always On 搭建Windows集群配置

    .安装WSFC群集组件 1)打开服务器管理器,选择“功能”,在右边窗口中点击“添加功能”. 2)在添加功能向导中,勾选“故障转移群集”,点击“下一步”. 3)在“确认安装选择”页面中,点击“安装”,进 ...

  2. 并发编程---死锁||递归锁---信号量---Event事件---定时器

    死锁 互斥锁:Lock(),互斥锁只能acquire一次 递归锁:  RLock(),可以连续acquire多次,每acquire一次计数器+1,只有计数为0时,才能被抢到acquire # 死锁 f ...

  3. timeUtil

    /** * 字符串的日期 格式 yyyy-MM-dd * 转入参数,添加或减去它的天数,在返回字符串 */ public static String addOrDelRq(String rq,int ...

  4. file相关方法

    File文件,getAbsolutePath方法 public String getAbsolutePath() 该方法的作用是获得当前文件或文件夹的绝对路径.例如c:\test\1.t则返回c:\t ...

  5. MySQL Split 函数

    本文地址:http://www.cnblogs.com/qiaoyihang/p/6270165.html mysql 本身并没有 split 函数,但是,我们实现累死功能的自定义函数是非常简单的 创 ...

  6. Tomcat部署及优化

    一.Tomcat安装部署 一.安装jdk和Tomcat 1.上传jdk和Tomcat mkdir -p /opt/tools/ /application ##jdk:jdk-8u131 tomcat: ...

  7. 2018-2019-1 20189221《Linux内核原理与分析》第五周作业

    2018-2019-1 20189221<Linux内核原理与分析>第五周作业 实验四 实验过程 当用户态进程调用一个系统调用时,cpu切换到内核态并开始执行一个内核函数. 在Linux中 ...

  8. js树形结构-----(BST)二叉树增删查

    function BinarySearchTree(){ var cnodes = function(key){ this.key = key; this.left = null; this.righ ...

  9. tcpdump 选项及过滤规则

    tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap (1)t ...

  10. node.js初识11

    1.EJS  Embedded JavaScript templates 模板引擎 .EJS的效率不高,因为他后台是通过字符串来处理的 <ul> <% for(var i = 0 ; ...