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. css常用的属性方法 上篇

    自己是从java后台自学转前端的,所以平时一些简单的css+html就不写了,列出的都是新手常用的一些属性,会持续更新,大神勿喷,留给新手做个参考! 尤其是跟我一样自学前端的.     背景关联 ba ...

  2. IT行业能力细分

    在软件行业工作7年了,平时很懒,懒得做分享,今天特意分享一下软件行业,职业大的技术分类,同学们可根据自己职业规划补充学习知识块.

  3. CodeVS1344 线型网络

    题目描述 Description 有 N ( <=20 ) 台 PC 放在机房内,现在要求由你选定一台 PC,用共 N-1 条网线从这台机器开始一台接一台地依次连接他们,最后接到哪个以及连接的顺 ...

  4. iOS APP打包分发给远程的手机测试

    APP要打包给远程的朋友或客户测试,但又不是企业账号的情况下,我们只能根据手机的udid进行描述证书的配置,再打包分发给提供了udid的手机进行安装 一.如何得到udid? 手机连接到mac电脑,打开 ...

  5. 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home

    https://vjudge.net/contest/66569#problem/A http://blog.csdn.net/wangjian8006/article/details/7871889 ...

  6. poj2502最短路!

    have just moved from a quiet Waterloo neighbourhood to a big, noisy city. Instead of getting to ride ...

  7. 在Android Studio上测试运行,Unity发布成Android包的环境搭建步骤

      我用的是unity5.4.3版本,jdk是1.8.0_131版本,Android-SDK是r24.4.1版本,Android-NDK是r13b版本,作者是刚开始写博客,希望对在unity摸索的人有 ...

  8. MySQL用户管理和权限设置

    用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...

  9. ionic创建项目遇到的各种问题

    前提:执行创建语句的前提是ionic环境已经装好,开始执行ionic start myApp blank. 提示已经有同名项目,是否覆盖.这里创建的是一个blank(空) 的ionic项目.还要两种是 ...

  10. 【复制粘贴】silverlight网格选择日期和时间

    今天有个功能需要在网格中输入时间,本来是用文本框的,但是客户说不知道格式,要求用选择的形式,好像silverlight又没有能选择时间的控件,谷歌下得到一个曲线救国的答案,记录下 <sdk:Da ...