完全なAvroデータのシーケンス化例
1.環境準備:
Avroの公式サイトでAvroのjarファイルをダウンロードし、最新バージョン1.7.4を例に、それぞれavro-1.7.4をダウンロードした.JArとavro-tool-1.7.4.jar;JSONのjarファイルcore-aslとmapper-aslをダウンロードします.以上の4つのファイルを${HADOOP_HOME}/libディレクトリの下に入れます(現在は/usr/local/hadoop/libで、後でhadoopプロジェクトが便利になります).
2.パターンの定義(Schema):
次のように編集してファイルuserを生成します.avsc:
3.コンパイルモード:
現在のディレクトリで次のコマンドを実行します.
現在のディレクトリの下にexample/avro/Userが生成されます.JAvaディレクトリとファイル.
4テストファイルの作成
以下の内容を編集する、ファイルTestを生成する.java:
以上の出力結果からavroのシーケンス化機能を直感的に感じることができる.
参考資料:
http://avro.apache.org/docs/1.7.4/gettingstartedjava.html
http://blog.csdn.net/zhumin726/article/details/8467805
wzw0114
2013.07.17
本文は“wzw 0114の技術のブログ”のブログから出て、転載して作者と連絡してください!
Avroの公式サイトでAvroのjarファイルをダウンロードし、最新バージョン1.7.4を例に、それぞれavro-1.7.4をダウンロードした.JArとavro-tool-1.7.4.jar;JSONのjarファイルcore-aslとmapper-aslをダウンロードします.以上の4つのファイルを${HADOOP_HOME}/libディレクトリの下に入れます(現在は/usr/local/hadoop/libで、後でhadoopプロジェクトが便利になります).
2.パターンの定義(Schema):
次のように編集してファイルuserを生成します.avsc:
{
"namespace": "example.avro",
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["int", "null"]},
{"name": "favorite_color", "type": ["string", "null"]}
]
}
3.コンパイルモード:
現在のディレクトリで次のコマンドを実行します.
java -jar ${HADOOP_HOME}/lib/avro-tools-1.7.4.jar compile schema user.avsc .
現在のディレクトリの下にexample/avro/Userが生成されます.JAvaディレクトリとファイル.
4テストファイルの作成
以下の内容を編集する、ファイルTestを生成する.java:
/**
* @Author wzw
* @Date 2013.07.17
*/
import java.io.*;
import java.lang.*;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.io.DatumReader;
import org.apache.avro.specific.SpecificDatumWriter;
import org.apache.avro.specific.SpecificDatumReader;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.file.DataFileReader;
import example.avro.User;
public class Test {
public static void main(String args[]) {
User user1 = new User();
user1.setName("Arway");
user1.setFavoriteNumber(3);
user1.setFavoriteColor("green");
User user2 = new User("Ben", 7, "red");
//construct with builder
User user3 = User.newBuilder().setName("Charlie").setFavoriteColor("blue").setFavoriteNumber(100).build();
//Serialize user1, user2 and user3 to disk
File file = new File("users.avro");
DatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>(User.class);
DataFileWriter<User> dataFileWriter = new DataFileWriter<User>(userDatumWriter);
try {
dataFileWriter.create(user1.getSchema(), new File("users.avro"));
dataFileWriter.append(user1);
dataFileWriter.append(user2);
dataFileWriter.append(user3);
dataFileWriter.close();
} catch (IOException e) {
}
//Deserialize Users from dist
DatumReader<User> userDatumReader = new SpecificDatumReader<User>(User.class);
DataFileReader<User> dataFileReader = null;
try {
dataFileReader = new DataFileReader<User>(file, userDatumReader);
} catch (IOException e) {
}
User user = null;
try {
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);
}
} catch (IOException e) {
}
}
}
5. :
, compile.sh, :
#!/usr/bin/env bash
javac -classpath /usr/local/hadoop/lib/avro-1.7.4.jar:/usr/local/hadoop/lib/avro-tools-1.7.4.jar:/usr/local/hadoop/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/lib/jackson-mapper-asl-1.9.13.jar example/avro/User.java Test.java
6. :
, run.sh, :
#!/usr/bin/env bash
java -classpath /usr/local/hadoop/lib/avro-1.7.4.jar:/usr/local/hadoop/lib/avro-tools-1.7.4.jar:/usr/local/hadoop/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/lib/jackson-mapper-asl-1.9.13.jar:User.jar:. Test
7. :
(1). :
compile.sh , example/avro/User.java Test.java , 。
(2). User :
jar cvf ./example .
(2). :
run.sh , 。
(3). avro :
Test.java for , user( 100 ) user.avro, run.sh user.plain , user.avro user.plain :
-rw-r--r-- 1 hadoop hadoop 245 2013-07-17 17:18 user.avsc
-rw-r--r-- 1 hadoop hadoop 5486 2013-07-17 18:39 User.jar
-rw-r--r-- 1 hadoop hadoop 1737 2013-07-17 19:11 users.avro
-rw-r--r-- 1 hadoop hadoop 6892 2013-07-17 19:12 users.plain
以上の出力結果からavroのシーケンス化機能を直感的に感じることができる.
参考資料:
http://avro.apache.org/docs/1.7.4/gettingstartedjava.html
http://blog.csdn.net/zhumin726/article/details/8467805
wzw0114
2013.07.17
本文は“wzw 0114の技術のブログ”のブログから出て、転載して作者と連絡してください!