1 rpc简介:
a) 远程过程调用,本质是不同机器之间socket通讯
b) 具体实现产品:rmi xml-rpc avro-rpc 等,
前两者使用时,实现比较复杂,并且相同数据量下序列化后的数量较大 影响机器之间的传输速度
c) rpc数据序列化在Hadoop圈子中比较出名的两个工具:
apache avro和google的protocol buffer
前者在Hadoop1中使用到, 后者在Hadoop2中使用到
此两者都支持多语言,传输数据速率也快,但是前者使用maven能直接生成代码,
后者生成代码麻烦使用自己工具还需要手工挪动
2 apache avro学习地址:
http://avro.apache.org/docs/current/gettingstartedjava.html
apache avro是说在rpc通讯时,使用avro这种数据序列化系统方式来实现数据传输
3 apache avro specification:
a) avro的规范 ,用于定义好序列化的格式
b) 写法解释:
user.avsc: 定义avro记录 文件结尾后缀为 .avsc {"namespace": "example.avro", 定义包名 "type": "record", 定义类型 类比于Java的 interface class等形式 "name": "User", 定义类名 "fields": [ 定义属性 {"name": "name", "type": "string"}, 类比于 String name {"name": "favorite_number", "type": ["int", "null"]}, 类比于 数组名favorite_number,数组值["int", "null"] {"name": "favorite_color", "type": ["string", "null"]} 类比于 数组名favorite_color,数组值["string", "null"] ] }
c) 如果定义更复杂格式的,参看: http://avro.apache.org/docs/current/spec.html#schema_primitive
d) avro序列化数据和java.io.serilized的区别:
avro ---> 顺丰
java.io.serilized ---> 平邮
4) 使用MAVEN生成user.avsc文件对应的Java对象:
a) eclipse内创建maven工程
b) 在pom.xml内增加 avro依赖和avro build文件:
<dependency> <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro-ipc</artifactId> <version>1.7.7</version> </dependency> <build> <plugins> <plugin> <groupId>org.apache.avro</groupId> <artifactId>avro-maven-plugin</artifactId> <version>1.7.7</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>schema</goal> 指定generate-sources生成方式格式参看schema格式 </goals> <configuration> <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory> <outputDirectory>${project.basedir}/src/main/java/</outputDirectory> </configuration> </execution> </executions> </plugin> <!-- compiler插件, 设定JDK版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <encoding>UTF-8</encoding> <source>1.6</source> <target>1.6</target> <showWarnings>true</showWarnings> </configuration> </plugin> </plugins> </build>
c) 创建文件夹,注意是文件夹
src/main/avro/
将创建的user.avsc拷贝在里面去,保证文件夹内只有这一个文件,这样在生成代码时,
就会只将此文件生成JavaBean
这块配置在如下文件中体现到:
<configuration> <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory> <outputDirectory>${project.basedir}/src/main/java/</outputDirectory> </configuration>
e) 工程右键/run as/8Maven generate-sources 生成代码;
此时在src/main/java/example.avro下生成Java类 User,打开如下:
/** * Autogenerated by Avro * * DO NOT EDIT DIRECTLY */ package example.avro; @SuppressWarnings("all") ........
f) 测试如下:
public static void main(String[] args) { User user = new User("zm",30,"red"); System.out.println(user); } {"name": "zm", "favorite_number": 30, "favorite_color": "red"}
上述案例和介绍参考官网链接: http://avro.apache.org/docs/current/gettingstartedjava.html
工程代码见附件:
相关推荐
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 ...
Apache Avro是一个面向数据序列化的开源框架,由Apache软件基金会开发,主要应用于大数据处理和分布式系统。它提供了高效的、跨语言的数据交换格式和API,特别适合远程过程调用(RPC)以及存储和处理大规模数据集。...
avsc 是 Apache Avro 的纯 JavaScript 实现。特性:完整的 Avro 架构支持,包括递归架构, sort order, 以及 schema evolution.快速!速度相当于 JSON 的两倍,同时更少的编码(varies per schema).无依赖, avsc 甚至...
什么是Apache Avro? 来自:“ Avro是数据序列化系统” Avro提供: 丰富的数据结构。 一种紧凑,快速的二进制数据格式。 容器文件,用于存储持久性数据。 远程过程调用(RPC)。 与动态语言的简单集成。 读取或写入...
avro-example ## 示例:使用 Java 的 Apache Avro Apache Avro:trade_mark: 是一个数据序列化系统。 这是一个简短的练习,用于举例说明如何使用 Java 来使用 Apache Avro:trade_mark:。 文档:
运行Sqoop报错:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/avro/LogicalType,下载此资源放到Sqoop的lib目录下即可
Apache Avro模式工具用于Tarantool的模式工具,从零开始在Lua中实现。 显着特点: Avro默认值; Avro别名; 由于运行时代码生成,数据转换速度很快; 扩展,例如内置的可为空的类型。avro_schema = require ( ' avro...
test_avro 使用 jetty 和 apache avro 进行 Spring Boot 概念验证 使用 jetty 运行 spring boot 项目: mvn spring-boot: run Avro 的概念证明在测试中,所以使用:mvn test 结尾。-
Apache Avro是Hadoop生态系统中的一个关键组件,它主要用于数据序列化和远程过程调用(RPC)。这个"avro-in-action: RPC与Apache Avro示例"项目显然旨在帮助开发者理解如何在实际应用中利用Avro进行高效的数据交互。...
适用于Golang的Apache Avro 请注意,该项目仍处于早期测试阶段,可能会随时更改。 安装很简单,如下所示: go get github.com/elodina/go-avro 一些用法示例位于: go-avro现在还支持从Avro模式生成代码,该模式...
Apache Avro:trade_mark: Apache Avro:trade_mark:是一个数据序列化系统。 要了解有关Avro的更多信息,请访问我们的网站: 要为Avro做出贡献,请阅读:
Apache Avro:trade_mark: 是一个数据序列化系统。 有关更多信息,请参阅此。 你能在这个项目中找到什么? 1.如何序列化java对象并存入文件 2.如何从文件中检索对象 3.如何将你的对象转化为字节流,然后你可以...
标签:flink、apache、avro、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,...
Maven坐标:org.apache.avro:avro:1.8.2; 标签:apache、avro、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...
Maven坐标:org.apache.avro:avro:1.10.0; 标签:apache、avro、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...
Maven坐标:org.apache.avro:avro:1.8.2; 标签:apache、avro、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...
Maven坐标:org.apache.avro:avro:1.11.0; 标签:apache、avro、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...