- 浏览: 24933 次
- 性别:
- 来自: 上海
最新评论
Apache Avro是一个独立于编程语言的数据序列化系统。旨在解决Hadoop中Writable类型的不足:缺乏语言的可移植性。其强调数据的自我描述,依赖于它的schema。即支持动态加载schema,动态映射;也支持代码生成的描述性映射。
官网的介绍:
官网例子:
依赖
插件
schemas:(src/main/avro/user.avsc)
Spedic Java Mapping
生成java文件:
创建对象
序列化
反序列化
{"name": "Alyssa", "favorite_number": 256, "favorite_color": null}
{"name": "Ben", "favorite_number": 7, "favorite_color": "red"}
{"name": "Charlie", "favorite_number": null, "favorite_color": "blue"}
Generic Java Mapping
创建对象
序列化
反序列化
{"name": "Alyssa", "favorite_number": 256, "favorite_color": null}
{"name": "Ben", "favorite_number": 7, "favorite_color": "red"}
Schemas介绍:
Avro依赖于schemas,schemas使用JSON定义,支持基本的类型包括null, boolean, int, long, float, double, bytes , string;支持的复合类型包括record, enum, array, map, union, fixed。avro可以通过schemas自动生成代码来表示avro的数据类型(Spedific Java mapping);也可以动态映射(Generic Java mapping)。(Reflect Java mapping不推荐)。
官网的介绍:
引用
Apache Avro™ is a data serialization system. Avro provides:
Rich data structures.
A compact, fast, binary data format.
A container file, to store persistent data.
Remote procedure call (RPC).
Simple integration with dynamic languages. Code generation is not required to read or write data files nor to use or implement RPC protocols. Code generation as an optional optimization, only worth implementing for statically typed languages.
官网例子:
依赖
<dependency> <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> <version>${avro.version}</version> </dependency>
插件
<plugin> <groupId>org.apache.avro</groupId> <artifactId>avro-maven-plugin</artifactId> <version>${avro.version}</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>schema</goal> </goals> <configuration> <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory> <outputDirectory>${project.basedir}/src/main/java/</outputDirectory> </configuration> </execution> </executions> </plugin>
schemas:(src/main/avro/user.avsc)
{"namespace": "com.sanss.hadoop.demos.avro", "type": "record", "name": "User", "fields": [ {"name": "name", "type": "string"}, {"name": "favorite_number", "type": ["int", "null"]}, {"name": "favorite_color", "type": ["string", "null"]} ] }
mvn clean compile
创建对象
User user1 = new User(); user1.setName("Alyssa"); user1.setFavoriteNumber(256); // Leave favorite color null // Alternate constructor User user2 = new User("Ben", 7, "red"); // Construct via builder User user3 = User.newBuilder().setName("Charlie") .setFavoriteColor("blue").setFavoriteNumber(null).build();
序列化
// Serialize to disk File file = new File("users.avro"); DatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>( User.class); try (DataFileWriter<User> dataFileWriter = new DataFileWriter<User>( userDatumWriter);) { dataFileWriter.create(User.SCHEMA$, file); dataFileWriter.append(user1); dataFileWriter.append(user2); dataFileWriter.append(user3); dataFileWriter.close(); }
反序列化
// Deserialize Users from disk DatumReader<User> userDatumReader = new SpecificDatumReader<User>( User.class); try (DataFileReader<User> dataFileReader = new DataFileReader<User>( file, userDatumReader);) { User user = null; while (dataFileReader.hasNext()) { // Reuse user object by passing it to next(). This saves us from // allocating and garbage collecting many objects for files with // many items. user = dataFileReader.next(user); System.out.println(user); } }
{"name": "Alyssa", "favorite_number": 256, "favorite_color": null}
{"name": "Ben", "favorite_number": 7, "favorite_color": "red"}
{"name": "Charlie", "favorite_number": null, "favorite_color": "blue"}
Schema schema = new Schema.Parser().parse(new File( GenericJavaMappingDemo.class.getClassLoader() .getResource("user.avsc").toURI())); GenericRecord user1 = new GenericData.Record(schema); user1.put("name", "Alyssa"); user1.put("favorite_number", 256); // Leave favorite color null GenericRecord user2 = new GenericData.Record(schema); user2.put("name", "Ben"); user2.put("favorite_number", 7); user2.put("favorite_color", "red");
序列化
// Serialize users to disk File file = new File("users.avro"); DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>( schema); try (DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>( datumWriter);) { dataFileWriter.create(schema, file); dataFileWriter.append(user1); dataFileWriter.append(user2); dataFileWriter.close(); }
反序列化
// Deserialize users from disk DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>( schema); try (DataFileReader<GenericRecord> dataFileReader = new DataFileReader<GenericRecord>( file, datumReader);) { GenericRecord user = null; while (dataFileReader.hasNext()) { // Reuse user object by passing it to next(). This saves us from // allocating and garbage collecting many objects for files with // many items. user = dataFileReader.next(user); System.out.println(user); } }
{"name": "Alyssa", "favorite_number": 256, "favorite_color": null}
{"name": "Ben", "favorite_number": 7, "favorite_color": "red"}
类型名称 | 描述 |
null | 空值 |
boolean | 二进制值 |
int | 32位带符号整数 |
long | 64位带符号整数 |
float | 单精度32位浮点数IEEE754 |
double | 双精度64位浮点数IEEE754 |
bytes | 8位无符号字节序列 |
string | Unicode字符序列 |
record | 任意类型的一个命名字段集合,JSON对象表示 |
enum | 一个命名的值集合 |
array | 未排序的对象集合,对象的模式必须相同 |
map | 未排序的对象键/值对。键必须是字符串,值可以是任何类型,但必须模式相同 |
union | 模式的并集,可以用JSON数组表示,每个元素为一个模式 |
fixed | 一组固定数量的8位无符号字节 |
发表评论
-
[实验]avro与non-avro的mapred例子-wordcount改写
2013-09-03 16:15 1052avro非常适合用于hadoop。在开发的时候可能有这样的场景 ... -
[实验]hadoop例子 trackinfo数据清洗的改写
2013-09-03 10:42 1090之前的“trackinfo数据清洗”例子中为使用combine ... -
[笔记]hadoop tutorial - Reducer
2013-09-03 10:15 737引用Reducer reduces a set of inte ... -
[实验]hadoop例子 trackinfo数据清洗
2013-09-02 17:24 2568业务场景: 假设用户在某处(例如某个网页或者某个地点)的活动会 ... -
[环境] hadoop 开发环境maven管理
2013-09-02 17:02 1468贴一下整理的maven管理配置(待补充) <proj ... -
[实验]hadoop例子 在线用户分析
2013-08-30 15:54 900一个简单的业务场景和例子。由wordcount例子改写。 业 ... -
[笔记]hadoop mapred InputFormat分析
2013-08-30 13:43 1274Hadoop MapReduce的编程接口层主要有5个可编程组 ... -
[笔记]hdfs namenode FSNamesystem分析
2013-08-30 09:18 1153NameNode在内存中维护整个文件系统的元数据镜像,用于HD ... -
[笔记]hdfs namenode FSImage分析1
2013-08-29 15:10 1887元数据文件fsimage的分析 fsimage为元数据镜像文件 ... -
[实验]集群hadoop配置
2013-08-28 16:53 855环境 hadoop1.2.0 CentOS release ... -
[实验]单机hadoop配置
2013-08-28 14:16 614环境: hadoop1.2.0 配置 修改conf/core ... -
[问题解决]hadoop eclipse plugin
2013-08-27 09:22 982环境: hadoop 1.2.0 问题: eclipse报错& ...
相关推荐
Avro工具jar包是Avro的一部分,主要用于处理Avro格式的数据,包括编译Avro模式,转换数据,以及合并或拆分Avro文件等。在这个版本1.8.2中,它已经被验证为功能正常且可直接从Maven官方库免费获取。 首先,让我们...
这是关于avro的avro-1.8.1版本的avro-tools的一个jar包
赠送jar包:avro-1.10.0.jar; 赠送原API文档:avro-1.10.0-javadoc.jar; 赠送源代码:avro-1.10.0-sources.jar; 赠送Maven依赖信息文件:avro-1.10.0.pom; 包含翻译后的API文档:avro-1.10.0-javadoc-API文档-...
这是一个关于avro的1.8.2版本的avro-tools-1.8.2的jar包
**Avro C API接口库接口调用示例详解** Avro是一种数据序列化系统,它设计用于高效地处理大量数据,特别是在分布式计算环境中。Avro提供了多种语言的API,包括C,使得开发者能够轻松地在C应用程序中使用Avro数据...
在讲解如何使用AVRO定义avdl文件示例之前,我们需要先了解什么是AVRO以及AVRO的数据定义语言avdl。AVRO是一种跨语言的序列化框架,用于实现数据序列化以及远程过程调用(RPC)。它是Apache软件基金会旗下的一个项目。...
Java读写Avro所需Jar是Java开发者在处理Avro数据时必须依赖的库文件。Avro是由Apache Hadoop项目开发的一个数据序列化系统,它的设计目标是提供高效的、跨语言的数据交换方式。在这个场景中,"avro-1.7.7.jar" 和 ...
《深入理解Avro工具与Java应用:以avro-tools-1.8.2.jar为例》 在大数据处理领域,Avro扮演着至关重要的角色。它是由Apache Hadoop项目开发的一种数据序列化系统,旨在提高数据交换的效率和便利性。本文将详细探讨...
赠送jar包:parquet-avro-1.10.0.jar; 赠送原API文档:parquet-avro-1.10.0-javadoc.jar; 赠送源代码:parquet-avro-1.10.0-sources.jar; 赠送Maven依赖信息文件:parquet-avro-1.10.0.pom; 包含翻译后的API文档...
**Avro RPC简介** Avro是Hadoop生态系统中的一个关键组件,由Apache软件基金会开发,主要用作数据序列化系统。它提供了一种高效的、语言无关的、版本化的数据序列化机制,使得不同编程语言之间可以方便地交换数据。...
avro 工具类 java -jar avro-tools-1.8.1.jar tojson --pretty test.avro > output.json
赠送jar包:flink-avro-1.10.0.jar; 赠送原API文档:flink-avro-1.10.0-javadoc.jar; 赠送源代码:flink-avro-1.10.0-sources.jar; 赠送Maven依赖信息文件:flink-avro-1.10.0.pom; 包含翻译后的API文档:flink-...
赠送jar包:avro-1.8.2.jar; 赠送原API文档:avro-1.8.2-javadoc.jar; 赠送源代码:avro-1.8.2-sources.jar; 赠送Maven依赖信息文件:avro-1.8.2.pom; 包含翻译后的API文档:avro-1.8.2-javadoc-API文档-中文...
赠送jar包:avro-1.10.0.jar; 赠送原API文档:avro-1.10.0-javadoc.jar; 赠送源代码:avro-1.10.0-sources.jar; 赠送Maven依赖信息文件:avro-1.10.0.pom; 包含翻译后的API文档:avro-1.10.0-javadoc-API文档-...
Avro是一种高效的序列化框架,由Apache开发,广泛应用于大数据处理和存储。它提供了一种紧凑、快速且可跨语言的数据交换格式,使得不同编程语言之间的数据交换变得简单。在Linux环境中,C++开发者通常会使用Avro的...
标题中的"avro_sample.rar"表明这是一个关于Avro的示例项目,Avro是一种数据序列化系统,由Apache Hadoop项目开发。它被设计用来高效地处理和交换各种语言之间的数据。Avro提供了丰富的数据模式定义,允许在不同的...
**Avro教程** 在IT行业中,数据序列化是至关重要的,它允许我们将对象的状态转换为可以在网络上传输或存储在磁盘上的字节流。Avro是Apache Hadoop项目的一部分,是一个高效的数据序列化系统,特别适用于分布式计算...
赠送jar包:avro-1.8.2.jar; 赠送原API文档:avro-1.8.2-javadoc.jar; 赠送源代码:avro-1.8.2-sources.jar; 赠送Maven依赖信息文件:avro-1.8.2.pom; 包含翻译后的API文档:avro-1.8.2-javadoc-API文档-中文...
Apache Avro是Hadoop生态系统中的一个关键组件,它是一个数据序列化系统,旨在提供高效的、易于使用的数据交换格式。Avro的数据模型与JSON类似,但更加强大且适合大规模数据处理。它的设计目标是简化分布式应用程序...
赠送jar包:avro-1.11.0.jar; 赠送原API文档:avro-1.11.0-javadoc.jar; 赠送源代码:avro-1.11.0-sources.jar; 赠送Maven依赖信息文件:avro-1.11.0.pom; 包含翻译后的API文档:avro-1.11.0-javadoc-API文档-...