最近领导发话,搞了三周的web项目,整个人都不好了,加班加点,终于还是做到了自己喜欢的样子,从各种热启动,各种配置灵活,可惜没有用到JMX来管理,不过好的一点是能做到各种切换,各种配置,还是给自己打个50分。 总结项目中用到的技术,其实想想也就那么点 SpringMVC的 Json和XML的viewResover,Quartz2.x和Spring的整合来控制定时任务的调度重启什么的,还有正式环境测试环境的检测和自动切换,好吧 ,这么点东西搞了那么久 给自己40分。。
当然 期间也不能间断学习。
接下来就开始今天的主题吧。
从Reactor说起。Reactor是现在高并发的通用理论了,也是异步调用的很好的应用,很多著名的服务器都是用Reactor模式来做的,好的 简单说下这个模式的论文。。。。(好高深)
Reactor由以下几部分组成:(转xxx)
Handles:
-----------------------------------我是分割线------------------------------------------------
但是想学习这个模式 不能看论文吧,听说Hadoop的RPC 中,Server端就是利用了这个模型,我们拨开来看看
1.RPC 远程 producer call 我也不知道怎么翻译 ,
首先说说Server端负责什么,当然是处理client端的请求,其中还有为了实现R 远程这个而有的 反射和代理这里就不罗嗦了。。只说我看到的关键吧
进入ipc.Server类中
Server端做的就是 1.接收请求,2.处理请求,3,返回结果,(大象放入冰箱的三个步骤)
这其中怎么体现Reactor的设计模型呢?
(1) 接收请求阶段,
首先 所有的请求都会放入一个内部类Call中然后放入一个队列里面,东西有了。然后怎么处理呢?Hadoop这里用的是一个内部类Listerner来建立连接,一个Reader来读取请求,
先说Listerner 吧 ,其实就是轮询监听有没有新的请求
public Listener() throws IOException { //这里监听Server的请求 address = new InetSocketAddress(bindAddress, port); // Create a new server socket and set to non blocking mode acceptChannel = ServerSocketChannel.open(); acceptChannel.configureBlocking(false); //设置成异步执行 // Bind the server socket to the local host and port bind(acceptChannel.socket(), address, backlogLength, conf, portRangeConfig); port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port // create a selector; selector= Selector.open(); //这里的readThreads是设置中的默认为1,修改这里的配置可以提高性能哦 readers = new Reader[readThreads]; for (int i = 0; i < readThreads; i++) { Reader reader = new Reader( "Socket Reader #" + (i + 1) + " for port " + port); readers[i] = reader; //启动reader线程 reader.start(); } // Register accepts on the server socket with the selector. acceptChannel.register(selector, SelectionKey.OP_ACCEPT); this.setName("IPC Server listener on " + port); this.setDaemon(true); }
说了Listerner是一个线程,初始化完了要启动,代码中只有一个doAccept(key);方法。可以理解 就是吧连接放到一个queue里面 然后reader已经启动啦 就可以开始干活了。
其中这段代码:是doaccept中
Reader reader = getReader(); Connection c = connectionManager.register(channel); key.attach(c); // so closeCurrentConnection can get the object reader.addConnection(c);
就是将一个事件绑定到这个Key上 然后 设置一下最后联系的时间 呃呃呃。。我理解的这个attach在这里的用途就是这个。。额 可能我看不懂吧。。
Connection c = (Connection)key.attachment();
c.setLastContact(Time.now());
然后 不是Reader线程已经再跑了么。那run方法中:
先是给Connection注册 read事件conn.channel.register(readSelector, SelectionKey.OP_READ, conn);
然后再doread中 调用 count = c.readAndProcess(); 关键方法 开始读了。。这其中用了两个Seletor 分别是listener和reader 这个selector设置了异步就是通过socketchannel向selector注册实现的,额 这就是NIO部分的内容了,然后 就进入那个方法 就到了connection内部类调用handler内部类的时候了。。下次再看吧
相关推荐
基于Hadoop2.5.0的集群搭建 本文详细记录了基于Hadoop2.5.1的集群安装过程,包括JDK、Hadoop、Hive、ZK、MySql、Sqoop等组件的安装和配置。该集群由一主节点和多个从节点组成,实现了高可用性和高性能的数据处理...
Hadoop 2.5.0-Eclipse 插件是针对Hadoop开发环境的一种增强工具,它使得在Eclipse集成开发环境中可以直接管理和调试Hadoop项目变得更为便捷。此插件是Hadoop开发者的重要辅助,尤其对于那些希望在本地环境中模拟...
hadoop2.5.0集群环境部署文档.txt 是公司在部署hadoop 原生版本总结的资料,方便大家在今后部署hadoop 大数据平台的时候手忙脚乱的去从网上收部署资料,而且部署资料有的也不大全面,在此把总结上传一份。...
而Hadoop-2.5.0-eclipse插件则是为Eclipse集成开发环境(IDE)设计的一个扩展,帮助开发者在Eclipse中直接编写、调试和运行Hadoop MapReduce程序。 该插件的安装非常简单,只需将`hadoop-eclipse-plugin-2.5.0.jar`...
在IT行业中,尤其是在大数据处理领域,Hadoop是一个至关重要的开源框架,它允许分布式存储和处理大规模数据集。本文将详细讲解如何在CentOS 6.5系统上编译Hadoop 2.5.0 - CDH5.3.6与Snappy的源码,以生成适用于该...
在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。而Snappy则是一款高效的压缩和解压缩库,常用于提升数据在Hadoop环境中的传输速度。在Hadoop 2.5.0版本中,为了优化性能,用户...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在大规模集群中高效处理和存储大量数据。在Hadoop 2.5.0版本中,引入了对Snappy压缩算法的支持,以提升数据读写速度。Snappy是一款快速的、无损的数据...
本篇将深入探讨Hadoop 2.5.0-cdh5.3.6版本的源码,解析其设计理念、架构以及主要功能,旨在帮助读者全面理解这一版本的特点和应用场景。 1. Hadoop概述: Hadoop是Apache软件基金会开发的一个开源分布式计算框架,...
标题 "native(hadoop-2.5.0-cdh5.2.0).tar" 提供的是一个针对Hadoop 2.5.0 CDH5.2.0版本的本地库文件集合,它已经过编译,可以用于在特定操作系统上支持Hadoop运行。CDH(Cloudera Distribution Including Apache ...
这是spring的一个jar包,必不可少,必须需要,自取吧,我用了,还行
Hadoop 2.5.0是这个项目在2014年8月发布的一个重要版本,针对Windows 64位操作系统进行了优化,为在Windows环境下运行Hadoop提供了可能性。 在Windows上运行Hadoop的传统挑战在于其主要设计是面向Linux环境的,因此...
Hadoop RPC(Remote Procedure Call,远程过程调用)是 Hadoop 项目中的一个重要组件,用于实现分布式系统中的通信和数据交换。下面是对 Hadoop RPC 的详细分析。 RPCInterface Hadoop RPC 的核心是 RPCInterface...
6. 其他组件:Hadoop 2.5.0还包含了其他一些组件,如Hadoop Oozie工作流管理系统、Hadoop Hive数据仓库工具、Hadoop Pig脚本语言以及Hadoop HBase分布式数据库等,它们共同构建了一个完整的大数据处理生态系统。...
在大数据领域,Hadoop是一个广泛使用的开源框架,用于存储和处理海量数据。Hadoop的高效性和可扩展性使其成为许多企业的首选。在这个过程中,编译Hadoop的native库是优化性能的关键步骤,尤其是在运行C++应用程序...
hadoop-2.5.0-src.tar.gzhadoop-2.5.0-src.tar.gzhadoop-2.5.0-src.tar.gzhadoop-2.5.0-src.tar.gzhadoop-2.5.0-src.tar.gz
spark-assembly-1.3.0-hadoop2.5.0-cdh5.3.0.jar的下载地址和提取码
Hadoop是大数据处理领域的一个核心框架,主要用于分布式存储和计算。在这个特定的“hadoop-2.5.0-cdh5.3.1centos6.4本地库”压缩包中,包含的是针对CentOS 6.4 64位系统优化的Hadoop本地库。这些本地库对于Hadoop在...
在本文提到的情况下,可能需要一个修改过的`NativeIO.java`类,按照文档说明进行操作。 5. **注意事项** 在测试和调试过程中,确保Windows和Linux之间的网络通信畅通,SSH连接正常。同时,保持JDK版本与Hadoop...
在Hadoop中,远程过程调用(RPC)是核心组件之一,它使得节点间的通信变得高效且可靠。本文将深入探讨Hadoop的RPC机制,解析其工作原理,并结合源码分析其内部实现。 一、RPC简介 RPC是一种让程序能够调用运行在...
public class RpcServer { public static void main(String[] args) throws IOException { MyServiceImpl service = new MyServiceImpl(); Server server = RPC.getServer(service, "localhost", 9999, 1, true, ...