深入理解hadoop(二)
hadoop RPC
网络通信是hadoop的核心模块之一,他支撑了整个Hadoop的上层分布式应用(HBASE、HDFS、MapReduce), Hadoop RPC具有以下几个特性,透明性(用户本身不应该感觉到跨机器调用的细节)、高性能(高吞吐、高并发)、可控性(轻量级、网络链接、超时、缓冲区设计可定制可扩展)。
RPC框架实现分为四个层面:
序列化层
这里序列化特指将结构化的对象转为字节流以便在网络中传输或者持久化存储、hadoop 实现了自己的序列化框架(hadoop子项目Avro),良好的序列化框架应该有以下特点,压缩,序列化应该压缩数据以便在网络中传输和存储;可扩展性,理论上结构化对象的属性变化,不影响反序列化;良好的兼容性,支持多语言;高效性,序列化或者反序列化速率高效。java本身也有自己的序列化框架,但是java的序列化框架不够灵活,不能控制序列化的整个流程,序列化算法也不标准,没有做一定的压缩,java序列化首先写类名,然后再是整个类的数据,而且成员对象在序列化中只存引用,成员对象的可以出现的位置很随机,既可以在序列化的对象前,也可以在其后面,这样就对随机访问造成影响,一旦出错,整个后面的序列化就会全部错误。
Avro是个支持多语言的数据序列化框架,支持c,c++,c#,python,java,php,ruby,java。他的诞生主要是为了弥补Writable只支持java语言的缺陷。很多人会问类似的框架还有Thrift和Protocol,那为什么不使用这些框架,而要重新建一个框架呢,或者说Avro有哪些不同。首先,Avro和其他框架一样,数据是用与语言无关的schema描述的,不同的是Avro的代码生成是可选的,schema和数据存放在一起,而schema使得整个数据的处理过程并不生成代码、静态数据类型等,为了实现这些,需要假设读取数据的时候模式是已知的,这样就会产生紧耦合的编码,不再需要用户指定字段标识。
Avro的schema是JSON格式的,而编码后的数据是二进制格式(当然还有其他可选项)的,这样对于已经拥有JSON库的语言可以容易实现。
Avro还支持扩展,写的schema和读的schema不一定要是同一个,也就是说兼容新旧schema和新旧客户端的读取,比如新的schema增加了一个字段,新旧客户端都能读旧的数据,新客户端按新的schema去写数据,当旧的客户端读到新的数据时可以忽略新增的字段。
Avro还支持datafile文件,schema写在文件开头的元数据描述符里,Avro datafile支持压缩和分割,这就意味着可以做Mapreduce的输入。
函数调用层
函数调用层的主要功能是定位要调用的函数并执行该函数、Hadoop RPC 采用反射和动态代理来实现函数调用。
网络传输层
网络传输层主要描述了server与client之间的消息传输方式、Hadoop RPC 采用了基于TCP/IP的socket调用。
服务端处理框架
服务端处理框架可被抽象为网络I/O 模型,他的设计直接影响PRC的处理能力,常见的网路I/O模型分为,阻塞、非阻塞、事件驱动等、Hadoop RPC的服务端处理采用了基于Reactor模式的事件驱动I/O模型。
最新文章
- 转载---javascript 定时器总结
- JavaEE学习文章汇总-ssm框架
- 关于chart.js 设置canvas的宽度为父级元素的宽度的百分百 以及 X轴上面刻度数据太多如何处理
- qthread 使用 signal 方法通信
- mvc图片上传到服务器
- 使用模板技术处理ASP.NET中GridView额外序号列的问题
- AD设计中,三种大面积覆铜的区别
- POJ 2635 The Embarrassed Cryptographer 大数模
- iOS常用的开源类库
- SUBTOTAL 函数与所在行
- Delphi之TDrawGrid绘制
- snowflake主键生成策略
- ActiveMQ、Stomp、SockJS入门级应用
- MySQL中横表和竖表相互转换
- RobotFramework环境配置:默认以管理员权限运行cmd
- MyBatis-Spring开发记录贴(新手)
- Complete Binary Search Tree
- bzoj2434 阿狸的打字机
- javaScript函数立即执行《1》
- go sync.once用法
热门文章
- String的用法——其他功能
- 工作中js和jquery 函数收集
- 关于Android软键盘把布局顶上去的问题(一)
- iOS - - JSON 和 XML解析
- 迅为I.MX6开发板工业级嵌入式开发平台
- 转:谈谈iOS中粘性动画以及果冻效果的实现
- 火狐加载用户配置文件 ";C:\XXX\Mozilla Firefox\firefox.exe"; http://192.168.1.1:8080 -profile ../kkk
- VC++检测硬件设备状态
- Spring Data Redis整体介绍 (一)
- 如何判断页面是在移动端还是PC端打开的呢