Top Banner
AVRO LA PUISSANCE DU BINAIRE, LA SOUPLESSE DU JSON
38

Avro, la puissance du binaire, la souplesse du JSON

Jul 19, 2015

Download

Software

alexvictoor
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Avro, la puissance du binaire, la souplesse du JSON

AVROLA PUISSANCE DU BINAIRE, LA SOUPLESSE

DU JSON

Page 2: Avro, la puissance du binaire, la souplesse du JSON

MYSELFAlexandre VictoorArchitecte à la [email protected]://github.com/alexvictoor@alex_victoor

Page 3: Avro, la puissance du binaire, la souplesse du JSON
Page 4: Avro, la puissance du binaire, la souplesse du JSON

Install-Package Microsoft.Hadoop.Avro

Page 5: Avro, la puissance du binaire, la souplesse du JSON
Page 6: Avro, la puissance du binaire, la souplesse du JSON

UN FICHIER AVRO

Page 7: Avro, la puissance du binaire, la souplesse du JSON

"type":"record", "namespace": "DevoxxFR.Example", "name":"Trade", "fields": [ "name":"ClientId", "type":"int" , "name":"Nominal", "type":"double" , "name":"Date", "type":"string" ]

Page 8: Avro, la puissance du binaire, la souplesse du JSON

"type":"record", "namespace": "DevoxxFR.Example", "name":"Trade", "fields": [ "name":"ClientId", "type":"int" , "name":"Nominal", "type":"double" , "name":"Date", "type":"string" , "name":"product", "type": ["null", "type":"record", "namespace":"DevoxxFR.Example", "name":"Product", "default":null,

Page 9: Avro, la puissance du binaire, la souplesse du JSON

java ­jar avro­tools.jar compile schema trade.avro

Page 10: Avro, la puissance du binaire, la souplesse du JSON

AVEC UN SEUL OBJECT DatumWriter<Trade> writer = new SpecificDatumWriter<Trade>();

encoder = EncoderFactory.get().binaryEncoder(outputStream, null);

writer.write(trade, encoder);

Page 11: Avro, la puissance du binaire, la souplesse du JSON

PUIS POUR LIRE DatumReader<Trade> reader = new SpecificDatumReader<Trade>();

decoder = DecoderFactory.get().binaryDecoder(inputStream, null);

trade = reader.read(null, decoder);

Page 12: Avro, la puissance du binaire, la souplesse du JSON

SANS GÉNÉRATION GenericRecord record = new GenericData.Record(SCHEMA);record.put("ProductId", 123);record.put("Nominal", 42000);

DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>(SCHEMA

DatumReader<GenericRecord> datumReader = new GenericDatumReader<>(SCHEMA

Page 13: Avro, la puissance du binaire, la souplesse du JSON

ECRIRE EN MASSE

Page 14: Avro, la puissance du binaire, la souplesse du JSON

ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream

Page 15: Avro, la puissance du binaire, la souplesse du JSON

ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream

DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>();

Page 16: Avro, la puissance du binaire, la souplesse du JSON

ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream

DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>();

DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);

Page 17: Avro, la puissance du binaire, la souplesse du JSON

ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream

DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>();

DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);

dataFileWriter.setCodec(CodecFactory.snappyCodec());

Page 18: Avro, la puissance du binaire, la souplesse du JSON

ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream

DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>();

DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);

dataFileWriter.setCodec(CodecFactory.snappyCodec());

dataFileWriter.create(TRADE_SCHEMA, avroDataFile);

Page 19: Avro, la puissance du binaire, la souplesse du JSON

ECRIRE EN MASSE File avroDataFile; // on peut aussi utiliser un OutputStream

DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>();

DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);

dataFileWriter.setCodec(CodecFactory.snappyCodec());

dataFileWriter.create(TRADE_SCHEMA, avroDataFile);

for (GenericRecord record : records) dataFileWriter.append(record);

Page 20: Avro, la puissance du binaire, la souplesse du JSON

ET POUR LIRE ?

Page 21: Avro, la puissance du binaire, la souplesse du JSON

ET POUR LIRE ? File avroDataFile; // on peut aussi utiliser un InputStream

Page 22: Avro, la puissance du binaire, la souplesse du JSON

ET POUR LIRE ? File avroDataFile; // on peut aussi utiliser un InputStream

DatumReader<GenericRecord> datumReader = new GenericDatumReader<>();

Page 23: Avro, la puissance du binaire, la souplesse du JSON

ET POUR LIRE ? File avroDataFile; // on peut aussi utiliser un InputStream

DatumReader<GenericRecord> datumReader = new GenericDatumReader<>();

DataFileReader<GenericRecord> dataFileReader = new DataFileReader(avroDataFile, datumReader);

Page 24: Avro, la puissance du binaire, la souplesse du JSON

ET POUR LIRE ? File avroDataFile; // on peut aussi utiliser un InputStream

DatumReader<GenericRecord> datumReader = new GenericDatumReader<>();

DataFileReader<GenericRecord> dataFileReader = new DataFileReader(avroDataFile, datumReader);

for (GenericRecord record : dataFileReader) // traitement sur chaque record

Page 25: Avro, la puissance du binaire, la souplesse du JSON

C'EST BIEN MAIS... "type":"record", "namespace": "DevoxxFR.Example", "name":"Trade", "fields": [ "name":"ClientId", "type":"int" , "name":"Nominal", "type":"double" , "name":"Date", "type":"string" , "name":"product", "type": ["null", "type":"record", "namespace": "DevoxxFR.Example", "name":"Product", "default":null,

Page 26: Avro, la puissance du binaire, la souplesse du JSON
Page 27: Avro, la puissance du binaire, la souplesse du JSON

LA KILLER FEATURE // la résolution de schemanew GenericDatumReader(writerSchema, readerSchema)

Writer SchemaLe schéma qui a été utilisé pour sérialiser

Page 28: Avro, la puissance du binaire, la souplesse du JSON

LA KILLER FEATURE // la résolution de schemanew GenericDatumReader(writerSchema, readerSchema)

Reader SchemaLes données dont vous avez besoin

Page 29: Avro, la puissance du binaire, la souplesse du JSON

ENTRE 2 SCHEMAS, ON PEUT- ajouter un champ- supprimer un champ- renommer un champ (avec un alias)

On ne peut pas changer le type d'un champ

Page 30: Avro, la puissance du binaire, la souplesse du JSON

COMPATIBLES ? SchemaCompatibility .checkReaderWriterCompatibility(readerSchema, writerSchema)

Page 31: Avro, la puissance du binaire, la souplesse du JSON

D'AUTRES USAGES- Event sourcing

- Echanges de messages entre applications

Page 32: Avro, la puissance du binaire, la souplesse du JSON

EVENT SOURCING

Page 33: Avro, la puissance du binaire, la souplesse du JSON

EVENT SOURCING

Page 34: Avro, la puissance du binaire, la souplesse du JSON

DEMOTRADE

productIdquantitynominaldate

TRADE

productIdquantitynominal

datetradingPlace

Page 35: Avro, la puissance du binaire, la souplesse du JSON
Page 36: Avro, la puissance du binaire, la souplesse du JSON
Page 37: Avro, la puissance du binaire, la souplesse du JSON
Page 38: Avro, la puissance du binaire, la souplesse du JSON

RESSOURCESCes slides :

Une variante "alt.net" de cette prez :

La spec avro :

Le tuto MS :

Le SDK MS Hadoop :

https://github.com/alexvictoor/AvroDevoxxFr

https://github.com/alexvictoor/AvroAltNet

http://avro.apache.org/docs/1.7.7/spec.html

http://bit.ly/1uYRX3I

http://hadoopsdk.codeplex.com/SourceControl/latest