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. 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 C - Monkey and Banana

    https://vjudge.net/contest/68966#problem/C [参考]http://blog.csdn.net/qinmusiyan/article/details/79862 ...

  2. gsoap创建webservice服务简单教程

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] WebServicesoapgsoap 使用gsoap创建webservice服务 下载gsop 准备待导出的服务接口定义文件比 ...

  3. C# Winform中的窗体传值

    关于C#winform窗体之间的传值有以下几种做法 1 通过构造函数传值 2 属性传值 以上两种方法不早详细介绍. 3 通过事件传值,委托传值 首先看一下通过委托传值吧. 1,创建两个窗体,分别是Fo ...

  4. Java Socket应用---通信是这样练成的

    网络基础简介 Java 中网络相关 API 的应用     Java 中的 InetAddress 的应用   Test01.java package com.imooc; import java.n ...

  5. 分布式开放消息系统(RocketMQ)的原理与实践(转)

    转自:http://www.jianshu.com/p/453c6e7ff81c 分布式消息系统作为实现分布式系统可扩展.可伸缩性的关键组件,需要具有高吞吐量.高可用等特点.而谈到消息系统的设计,就回 ...

  6. TPshop用户模块的数据库表关系

    看到后台数据库一大坨表项,不熟悉的还真难以下手(如下). 下面讲讲用户模块(User)的数据库表之间的简单关系. 如果安装TPshop官方的学习工程,可以在下面链接进入用户界面: 手机版:http:/ ...

  7. HttpClient--HttpGet使用

    最近公司在做一个爬虫工具,爬取公司现网的数据,留给方通项目使用 用到里阿帕奇的这两个类,在网上看到了一些资料结合自己的应用,这个贴出一个demo import com.alibaba.fastjson ...

  8. Struts2之2.5.10.1HelloWorld

    Struts2.5.10.1是目前为止最新的版本,struts2建议持续跟进,理由大家都懂.好了,下面步入正题. 基于struts2.5.10.1建立一个HelloWorld,基于注解的哈! 工具:e ...

  9. [刷题]算法竞赛入门经典(第2版) 4-8/UVa12108 - Extraordinarily Tired Students

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa12108 - Extraordinarily Tired Stude ...

  10. Redis学习-持久化

    Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器执行的所有写操作命令 ...