`
GQM
  • 浏览: 24253 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[笔记]avro 介绍及官网例子

阅读更多
Apache Avro是一个独立于编程语言的数据序列化系统。旨在解决Hadoop中Writable类型的不足:缺乏语言的可移植性。其强调数据的自我描述,依赖于它的schema。即支持动态加载schema,动态映射;也支持代码生成的描述性映射。
官网的介绍:
引用
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"]}
     ]
    }
    
  • Spedic Java Mapping
  • 生成java文件:
    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"}
  • Generic Java Mapping
  • 创建对象
    		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"}
  • 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不推荐)。
    类型名称描述
    null空值
    boolean二进制值
    int32位带符号整数
    long64位带符号整数
    float单精度32位浮点数IEEE754
    double双精度64位浮点数IEEE754
    bytes8位无符号字节序列
    stringUnicode字符序列
    record任意类型的一个命名字段集合,JSON对象表示
    enum一个命名的值集合
    array未排序的对象集合,对象的模式必须相同
    map未排序的对象键/值对。键必须是字符串,值可以是任何类型,但必须模式相同
    union模式的并集,可以用JSON数组表示,每个元素为一个模式
    fixed一组固定数量的8位无符号字节
    分享到:
    评论

    相关推荐

      avro-1.10.0-API文档-中文版.zip

      赠送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.11.0-API文档-中文版.zip

      赠送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的avro-tools-1.8.2的jar

      这是一个关于avro的1.8.2版本的avro-tools-1.8.2的jar包

      avro的avro-1.8.1的jar

      这是关于avro的avro-1.8.1版本的avro-tools的一个jar包

      avro-1.8.2-API文档-中英对照版.zip

      赠送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-tools-1.8.1.jar

      avro 工具类 java -jar avro-tools-1.8.1.jar tojson --pretty test.avro &gt; output.json

      avro-1.8.2-API文档-中文版.zip

      赠送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

      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 ...

      flink-avro-1.10.0-API文档-中文版.zip

      赠送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+mapreduce安装报告

      avro是hadoop中一个序列化项目,avro和mapreduce结合如何使用,可以实现数据结构化并且序列化和反序列化

      avro-ipc-1.8.2-API文档-中文版.zip

      赠送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

      avro-1.7.7.jar

      avro-tool工具jar包

      这个版本为 1.8.2,亲测有效,如果想免积分下载可以访问maven官方库: https://mvnrepository.com/artifact/org.apache.avro/avro-tools

      avro-mapred-1.7.8-SNAPSHOT-hadoop2

      在MapReduce任务中读取Avro文件,会使用到avro-mapred.jar。 然而目前的avro-mapred.jar是基于较老的版本的,使用时会报错: org.apache.hadoop.mapred.YarnChild: Error running child : java.lang....

      avro linux C++动态库

      avro序列化 linux编译动态库文件,含include和so文件。编译环境:g++4.8.5, centos

      avro-1.8.2.jar

      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 ...

      avro-1.10.0-API文档-中英对照版.zip

      赠送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-tools-1.7.4

      hadoop源码部署过程中hadoop-common中的类hadoop-common-project\hadoop-common\src\test\avro有报错,需要使用avro-tools-1.7.4进行编译。

      avro-1.7.4-API文档-中文版.zip

      赠送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文档-中文...

      parquet-avro-protobuf:例子

      通过Avro将Protobuf转换为Parquet为什么? 本示例说明如何使用Parquet的Avro对象模型和Avro对protobuf对象的支持将Protobuf文件转换为Parquet文件。 Parquet具有直接与Protobuf对象一起使用的模块,但是在为其他读取...

    Global site tag (gtag.js) - Google Analytics