Avro通过schema自动生成java代码
2014-11-20 16:18
302 查看
今天早上一来,leader让我研究Avro和Kafka的集成。
我:“哦”。
Avro? 什么东西呀? Kafka?还没研究过
怎么办?
先学习Avro呗,然后我就分成了下面几个阶段来完成这个任务。
Task1: 首先用java代码来实现Avro的发消息和受消息的机制,测试通过。
Task2:考虑是消息从MSMQ发出后和Avro集成,再发到Kafka;还是消息从Kafka发出后,用Avro进行处理,再发到Storm呢?
Task3:如果是MSMQ-->Avro-->Kafka-->Storm,我得用java测试kafka怎么接收解析从Avro发过来的消息。
Task4: 如果是MSMQ-->Kafka-->Avro-->Storm.我觉得这个就可以直接在Storm程序里面改一下接收消息的格式,比较简单。
不管怎么说,先把Avro搞清楚怎么回事吧。
搜了半天,资料基本没有,于是就只能从官网的英文文档下手呢。
经过一天的学习,尝试,终于有了一点点小的收获,那就是在实现了通过定义Avro的schema来自动生成java代码。然后运行成功了。
下面总结了方法:(用Avro-1.7.7 Java版本)
1. 首先要下载:avro-1.7.7.jar, avro-tools-1.7.7.jar,core-asl,mapper-asl。 放在C:\Learn_docs\HadoopSoft\Avro
下载网址:http://www.trieuvan.com/apache/avro/avro-1.7.7/java/ 和http://wiki.fasterxml.com/JacksonDownload
2. 在Avro文件夹下面建一个target文件夹,我建的是java.
3. 建一个user.avsc 文件,里面定义user的schema.
{"namespace": "example.avro",
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["int", "null"]},
{"name": "favorite_color", "type": ["string", "null"]}
]
}
这个里面的格式等我完成这个任务后,会详细介绍Avro的东西再说。
4. cmd,进入C:\Learn_docs\HadoopSoft\Avro,执行:java -jar avro-tools-1.7.7.jar compile schema user.avsc java.
这样就在java里面生成了java代码。
5. 在 Eclipse里面建一个java工程Avro Test,把这个User.java拷贝到workspace的Src文件夹下。
6. 刷新Eclipse上Avro Test,可以看到代码可以看到了。
7.写一个Main.java,代码如下:
package example.avro;
import java.io.File;
import org.apache.avro.file.DataFileReader;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.io.DatumReader;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.specific.SpecificDatumReader;
import org.apache.avro.specific.SpecificDatumWriter;
public class Main {
public static void main(String[] args)throws Exception {
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 user1 and user2to disk
File file = new File("users.avro");
DatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>(User.class);
DataFileWriter<User> dataFileWriter = new DataFileWriter<User>(userDatumWriter);
dataFileWriter.create(user1.getSchema(),new File("users.avro"));
dataFileWriter.append(user1);
dataFileWriter.append(user2);
dataFileWriter.append(user3);
dataFileWriter.close();
// Deserialize Usersfrom disk
DatumReader<User> userDatumReader = new SpecificDatumReader<User>(User.class);
DataFileReader<User> dataFileReader = new DataFileReader<User>(file, userDatumReader);
User user = null;
while (dataFileReader.hasNext()) {
// Reuse user object bypassing it to next(). This saves us from
// allocating and garbagecollecting many objects for files with
// many items.
user = dataFileReader.next(user);
System.out.println(user);
}
}
}
8. 把这个Java工程转成Maven工程,bulid成功。 运行Main.java.
我:“哦”。
Avro? 什么东西呀? Kafka?还没研究过
怎么办?
先学习Avro呗,然后我就分成了下面几个阶段来完成这个任务。
Task1: 首先用java代码来实现Avro的发消息和受消息的机制,测试通过。
Task2:考虑是消息从MSMQ发出后和Avro集成,再发到Kafka;还是消息从Kafka发出后,用Avro进行处理,再发到Storm呢?
Task3:如果是MSMQ-->Avro-->Kafka-->Storm,我得用java测试kafka怎么接收解析从Avro发过来的消息。
Task4: 如果是MSMQ-->Kafka-->Avro-->Storm.我觉得这个就可以直接在Storm程序里面改一下接收消息的格式,比较简单。
不管怎么说,先把Avro搞清楚怎么回事吧。
搜了半天,资料基本没有,于是就只能从官网的英文文档下手呢。
经过一天的学习,尝试,终于有了一点点小的收获,那就是在实现了通过定义Avro的schema来自动生成java代码。然后运行成功了。
下面总结了方法:(用Avro-1.7.7 Java版本)
1. 首先要下载:avro-1.7.7.jar, avro-tools-1.7.7.jar,core-asl,mapper-asl。 放在C:\Learn_docs\HadoopSoft\Avro
下载网址:http://www.trieuvan.com/apache/avro/avro-1.7.7/java/ 和http://wiki.fasterxml.com/JacksonDownload
2. 在Avro文件夹下面建一个target文件夹,我建的是java.
3. 建一个user.avsc 文件,里面定义user的schema.
{"namespace": "example.avro",
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["int", "null"]},
{"name": "favorite_color", "type": ["string", "null"]}
]
}
这个里面的格式等我完成这个任务后,会详细介绍Avro的东西再说。
4. cmd,进入C:\Learn_docs\HadoopSoft\Avro,执行:java -jar avro-tools-1.7.7.jar compile schema user.avsc java.
这样就在java里面生成了java代码。
5. 在 Eclipse里面建一个java工程Avro Test,把这个User.java拷贝到workspace的Src文件夹下。
6. 刷新Eclipse上Avro Test,可以看到代码可以看到了。
7.写一个Main.java,代码如下:
package example.avro;
import java.io.File;
import org.apache.avro.file.DataFileReader;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.io.DatumReader;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.specific.SpecificDatumReader;
import org.apache.avro.specific.SpecificDatumWriter;
public class Main {
public static void main(String[] args)throws Exception {
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 user1 and user2to disk
File file = new File("users.avro");
DatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>(User.class);
DataFileWriter<User> dataFileWriter = new DataFileWriter<User>(userDatumWriter);
dataFileWriter.create(user1.getSchema(),new File("users.avro"));
dataFileWriter.append(user1);
dataFileWriter.append(user2);
dataFileWriter.append(user3);
dataFileWriter.close();
// Deserialize Usersfrom disk
DatumReader<User> userDatumReader = new SpecificDatumReader<User>(User.class);
DataFileReader<User> dataFileReader = new DataFileReader<User>(file, userDatumReader);
User user = null;
while (dataFileReader.hasNext()) {
// Reuse user object bypassing it to next(). This saves us from
// allocating and garbagecollecting many objects for files with
// many items.
user = dataFileReader.next(user);
System.out.println(user);
}
}
}
8. 把这个Java工程转成Maven工程,bulid成功。 运行Main.java.
相关文章推荐
- java代码通过freemarker模板实现自动生成dao,model,service,jsp
- 不通用版(从SVN取版本,通过MAVEN生成JAVA包,通过SALTSTACK传送到远程服务器并自动重启TOMCAT服务)PYTHON代码
- 用代码实现在eclipse中自动生成package_这个功能很有用_java版
- CXF 2.6.1 中WSDL2Java自动生成代码super出错
- 一个使用自定义命名空间的Schema文件,xml文件和castor生成的java代码的例子
- MyBatisGenerator 自动生成java代码(反向工具)
- 【学习笔记】--java通过数据库表名自动生成实体类
- 通过UML类图,自动生成相关代码
- 采用axis2c进行webservice发布的流程3-通过wsdl文件,自动生成C的服务端代码
- UML工具推荐 Poseidon版本 可以免费下载,自动生成代码 C++ Java C# VB.NET等 (来自德国汉堡的国际性建模软件开发商Gentleware AG的)
- 利用Velocity自动生成自定义代码_java版_源码下载
- IBM将公布能够自动生成Java代码的编程工具
- java中自动生成注册码的代码
- Lombok — Java代码自动生成 开发利器
- Java Web开发中可否自动生成结构一致的代码?
- oracle script : java 实体互相付值自动匹配 ,自动生成代码
- CXF全接触(七) --- 通过WSDL自动生成WS代码
- 【译】MVC3 20个秘方-(2)通过脚手架自动生成controller和view ----代码先行/数据库先行
- 自己写的一个代码自动生成工具_java版_源码下载
- HibernateTools工具通过hbm文件自动生成ddl、pojo等代码