Hadoop record I/O 包含class文件以及record描述语言解释器用于简化records的序列化和反序列化。

介绍

任何显著复杂性的软件系统都需要与外界进行数据交换的机制。数据交互通常涉及到输入输出数据逻辑单元的封包和解包(如文件、网络连接、内存缓冲区等等。)。应用程序通常嵌套了操作代码用于序列化和反序列化数据类型。序列化的工作有几个特性,它可以使得代码自动化生成。给你一个特别的输出编码格式(比如二进制、XML等等),基本数据类型以及由基本数据类型构成的组合的序列化将是一个机械化的工作。人工编写序列化代码容易造成bugs特别是当records有很多字段或者一个record在不同版本之间定义的不同。最后它在通过不同编程语言编写的应用程序之间进行数据的交互是很有用的。通过以一种语言无关的方式来描述由应用程序操作的数据records,并使用描述来派生出不同目标语言的实现,会变得更加容易。本文档描述Hadoop Record I/O,一种机制目的在于:

1)提供简单的序列化数据类型的规范

2)提供上述类型的封装和解包的不同目标语言的代码生成

3)提供特定于目标预研的支持,使应用程序编程人员能够将生成的代码集成到应用程序中。

Hadoop Record I/O的目标有点类型XDR, ASN.1, PADS and ICE的机制。虽然这些系统都包含一个大多数record类型的规范DDL文件,他们在其他方面还是有很多不同的。Hadoop Record I/O聚焦于数据的序列化和多语言的支持。我们可以基于翻译器的方式进行序列化。Hadoop的用户必须使用一个简单的数据描述语言来描述他们的数据。Hadoop DDL 翻译器rcc生成代码,用户可以通过调用简单的读写数据流抽象来进行数据的读写。接下来我们我们会罗列Hadoop Record I/O的一些目标和非目标。

目标:

1)支持常用的基本类型。Hadoop应该包含我们希望支持的常用内置类型。

2)支持复合类型(包括递归复合)。Hadoop应该支持复合类型如structs或者vectors。

3)不同目标语言的代码生成。Hadoop应该能支持生成不同目标语言的序列化代码,同时能很好地进行扩展。初步目标是C++和JAVA。

4)目标语言的支持。Hadoop应该内置支持目标的头文件、库或者包,以便能很好地内置到应用程序当中。

5)支持多种不同输出编码格式。可以是封装好的二进制、逗号分隔的文本或者是XML等等。

6)支持向后或向前兼容的记录类型。

非目标:

1)序列化任意的C++文件。

2)序列化复杂的数据结构如trees、linked list等等。

3)内建的索引、压缩或校验和。

4)从XML生成的动态构造实体。

后续的文档主要在细节上描述Hadoop record I/O 的特性。第2部分描述系统支持的数据类型,第3部分描述简单记录例子的DDL语法,第4部分描述使用rcc代码生成的过程,第5部分描述目标语言的映射和对Hadoop类型的支持,我们已经有一个C++映射的相对完整的描述,在即将到来的文档更新中将会包含Java以及其他语言。最后一部分描述输出编码的支持。

ZooKeeper源码分析-Jute-第一部分的更多相关文章

  1. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  2. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  3. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  4. Zookeeper 源码分析-启动

    Zookeeper 源码分析-启动 博客分类: Zookeeper   本文主要介绍了zookeeper启动的过程 运行zkServer.sh start命令可以启动zookeeper.入口的main ...

  5. storm操作zookeeper源码分析-cluster.clj

    storm操作zookeeper的主要函数都定义在命名空间backtype.storm.cluster中(即cluster.clj文件中).backtype.storm.cluster定义了两个重要p ...

  6. zookeeper源码分析之leader选举

    zookeeper提供顺序一致性.原子性.统一视图.可靠性保证服务zookeeper使用的是zab(atomic broadcast protocol)协议而非paxos协议zookeeper能处理并 ...

  7. zookeeper源码分析三LEADER与FOLLOWER同步数据流程

    根据二)中的分析,如果一台zookeeper服务器成为集群中的leader,那么一定是当前所有服务器中保存数据最多的服务器,所以在这台服务器成为leader之后,首先要做的事情就是与集群中的其它服务器 ...

  8. ZooKeeper源码分析:Quorum请求的整个流程(转)

    Quorum请求是转发给Leader处理,并且需要得一个Follower Quorum确认的请求.这些请求包括: 1)znode的写操作(OpCode.create,OpCode.delete,OpC ...

  9. zookeeper源码分析之二客户端启动

    ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...

  10. zookeeper源码分析二FASTLEADER选举算法

    如何在zookeeper集群中选举出一个leader,zookeeper使用了三种算法,具体使用哪种算法,在配置文件中是可以配置的,对应的配置项是"electionAlg",其中1 ...

随机推荐

  1. 京东商城首页jquery轮播特效

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  2. app测试特点

    一.安装与卸载1.软件安装后是否可以正常运行:2.安装过程中是否可以中断3.安装空间不足时是否有相应的提示4.是否可以卸载应用(桌面卸载和应用卸载)二.权限测试1.扣费风险:包括发送短信.拨打电话.连 ...

  3. JQuery使用mousedown和mouseup简单判断鼠标按下与释放位置是否相同

    在JQuery中,我们可以利用mousedown.mouseup来跟踪页面的鼠标按下与释放事件. 如何获取鼠标的位置信息呢?事件event的pageX和pageY属性可以让我们获得鼠标在页面中的具体位 ...

  4. Openstack Swift 原理、架构与 API 介绍

    OpenStack Swift 开源项目提供了弹性可伸缩.高可用的分布式对象存储服务,适合存储大规模非结构化数据.本文将深入介绍 Swift 的基本设计原理.对称式的系统架构和 RESTful API ...

  5. SQL SERVER 的前世今生--各版本功能对比

    背景 今天举办的 Data Amp 大会上,微软向开发者们强调了 数据如何影响他们的应用和服务 ,顺道还宣布了几个小新闻.这个免费的线上研讨会不仅展示了未来的机器学习远景,还发布了 SQL Serve ...

  6. http工具类

    /** * 发送post请求工具方法 * * @Methods Name HttpPost * @Create In 2014年10月28日 By wangfei * @param url * @pa ...

  7. Java核心技术 卷I chapter05 继承

    2017年4月10日19:41:44 仅仅用于打好基础 1. 在Java中,所有的继承都是公有继承,而没有C++中的私有继承和保护继承! 2.关键字super的使用方法: (1) 子类中想调用父类中的 ...

  8. JavaScript之onXXXX事件和addEventListener的区别

    JavaScript之onXXXX事件和addEventListener的区别 1.首先介绍两者的用法: 1.1onXXXX的用法:以onclick为例 第一种: obj.onclick = func ...

  9. linux c++爬虫(一)

    int main(int argc, void *argv[]) { ]; ; char ch; ) { switch(ch) { case 'v': version(); break; case ' ...

  10. java的List分页 取出数据后使用List分页

    以前一直是在DAO层直接从数据库里分页,但是今天因为有些数据,需要混合展示,就是根据条件取出了多个对象的集合,然后把这些多个List放到一个List里,然后在从这个List里进行分页. MemberA ...