apache avro 简介

 

 

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文件:


			org.apache.avro
			avro
			1.7.7
		
		
			org.apache.avro
			avro-ipc
			1.7.7
		




		
			
				org.apache.avro
				avro-maven-plugin
				1.7.7
				
					
						generate-sources
						
							schema 指定generate-sources生成方式格式参看schema格式
						
						
							${project.basedir}/src/main/avro/
							${project.basedir}/src/main/java/
						
					
				
			
			
			
				org.apache.maven.plugins
				maven-compiler-plugin
				2.3.2
				
					UTF-8
					1.6
					1.6
					true
				
			
		
	

 

c) 创建文件夹,注意是文件夹

src/main/avro/

将创建的user.avsc拷贝在里面去,保证文件夹内只有这一个文件,这样在生成代码时,

就会只将此文件生成JavaBean

这块配置在如下文件中体现到:

 
        ${project.basedir}/src/main/avro/
        ${project.basedir}/src/main/java/
      

 

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

 

工程代码见附件:

 

你可能感兴趣的:(hadoop1)