- 浏览: 24253 次
- 性别:
- 来自: 上海
最新评论
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 999avro非常适合用于hadoop。在开发的时候可能有这样的场景 ... -
[实验]hadoop例子 trackinfo数据清洗的改写
2013-09-03 10:42 1039之前的“trackinfo数据清洗”例子中为使用combine ... -
[笔记]hadoop tutorial - Reducer
2013-09-03 10:15 702引用Reducer reduces a set of inte ... -
[实验]hadoop例子 trackinfo数据清洗
2013-09-02 17:24 2528业务场景: 假设用户在某处(例如某个网页或者某个地点)的活动会 ... -
[环境] hadoop 开发环境maven管理
2013-09-02 17:02 1431贴一下整理的maven管理配置(待补充) <proj ... -
[实验]hadoop例子 在线用户分析
2013-08-30 15:54 857一个简单的业务场景和例子。由wordcount例子改写。 业 ... -
[笔记]hadoop mapred InputFormat分析
2013-08-30 13:43 1220Hadoop MapReduce的编程接口层主要有5个可编程组 ... -
[笔记]hdfs namenode FSNamesystem分析
2013-08-30 09:18 1114NameNode在内存中维护整个文件系统的元数据镜像,用于HD ... -
[笔记]hdfs namenode FSImage分析1
2013-08-29 15:10 1832元数据文件fsimage的分析 fsimage为元数据镜像文件 ... -
[实验]集群hadoop配置
2013-08-28 16:53 812环境 hadoop1.2.0 CentOS release ... -
[实验]单机hadoop配置
2013-08-28 14:16 572环境: hadoop1.2.0 配置 修改conf/core ... -
[问题解决]hadoop eclipse plugin
2013-08-27 09:22 936环境: hadoop 1.2.0 问题: eclipse报错& ...
相关推荐
赠送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文档-...
赠送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文档-...
这是一个关于avro的1.8.2版本的avro-tools-1.8.2的jar包
这是关于avro的avro-1.8.1版本的avro-tools的一个jar包
赠送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文档-中文...
avro 工具类 java -jar avro-tools-1.8.1.jar tojson --pretty test.avro > output.json
赠送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™ is a data serialization system. To learn more about Avro, please read the current documentation. To download Avro, please visit the releases page. Developers interested in getting more ...
赠送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-...
avro是hadoop中一个序列化项目,avro和mapreduce结合如何使用,可以实现数据结构化并且序列化和反序列化
赠送jar包:avro-ipc-1.8.2.jar; 赠送原API文档:avro-ipc-1.8.2-javadoc.jar; 赠送源代码:avro-ipc-1.8.2-sources.jar; 赠送Maven依赖信息文件:avro-ipc-1.8.2.pom; 包含翻译后的API文档:avro-ipc-1.8.2-...
avro-1.7.7.jar
这个版本为 1.8.2,亲测有效,如果想免积分下载可以访问maven官方库: https://mvnrepository.com/artifact/org.apache.avro/avro-tools
在MapReduce任务中读取Avro文件,会使用到avro-mapred.jar。 然而目前的avro-mapred.jar是基于较老的版本的,使用时会报错: org.apache.hadoop.mapred.YarnChild: Error running child : java.lang....
avro序列化 linux编译动态库文件,含include和so文件。编译环境:g++4.8.5, centos
avro,avro-tools; Developers interested in getting more involved with Avro may join the mailing lists, report bugs, retrieve code from the version control system, and make ...
赠送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文档-...
hadoop源码部署过程中hadoop-common中的类hadoop-common-project\hadoop-common\src\test\avro有报错,需要使用avro-tools-1.7.4进行编译。
赠送jar包:avro-1.7.4.jar; 赠送原API文档:avro-1.7.4-javadoc.jar; 赠送源代码:avro-1.7.4-sources.jar; 赠送Maven依赖信息文件:avro-1.7.4.pom; 包含翻译后的API文档:avro-1.7.4-javadoc-API文档-中文...
通过Avro将Protobuf转换为Parquet为什么? 本示例说明如何使用Parquet的Avro对象模型和Avro对protobuf对象的支持将Protobuf文件转换为Parquet文件。 Parquet具有直接与Protobuf对象一起使用的模块,但是在为其他读取...