Rumah >Java >javaTutorial >Fail Avro
Avro ialah sistem sosial berasaskan baris yang boleh menggunakan rangka kerja siri data yang dibangunkan oleh Apache Hadoop. Fail Avro ialah fail data yang boleh membawa siri data untuk mensiri data dalam format binari padat. Skema akan berada dalam format JSON apabila kami mencubanya dengan Apache MapReduce; kemudian, fail ini boleh menempah penanda apabila kami mempunyai set data besar yang perlu diedarkan kepada subset. Ia juga mempunyai fail bekas untuk menempah data berhati-hati yang boleh dibaca dan ditulis dengan mudah; tidak perlu melakukan konfigurasi tambahan.
Mulakan Kursus Pembangunan Perisian Percuma Anda
Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain
Fail Avro ialah sistem siri data yang boleh membekalkan struktur data yang besar dan padat, cepat, format data binari. Ia juga boleh mempunyai fail kontena, yang boleh membawa data berterusan dan menggunakan prosedur RPC. Tambahan pula, kerana ia mempunyai penyepaduan yang mudah, ia boleh digunakan dengan pelbagai bahasa, jadi penciptaan kod baharu tidak diperlukan untuk membaca atau menulis fail data di mana penciptaan kod tidak akan menjadi wajib. Ia hanya boleh digunakan dengan bahasa yang ditaip tegar.
Biasanya ia mempunyai dua segmen: yang pertama ialah skema yang boleh bersifat sukarela, dan yang kedua ialah data binari. Jadi, sebagai contoh, katakan kita ingin melihat fail avro menggunakan editor teks. Dalam kes itu, kami boleh melihat dua segmen di mana segmen pertama akan mengandungi data yang telah bermula dengan objek, dan segmen kedua akan mempunyai data yang boleh dibaca dan jenis fail yang kami perlukan. sahkan Bhoomi mana yang akan boleh membaca dan menulis.
Mari kita lihat konfigurasi fail Avro, di mana kita boleh mengubah tindakan fail data Avro dengan bantuan parameter berstruktur yang berbeza.
Apabila kami menggunakan Hadoop,
Apabila kita cuba mengkonfigurasi pemampatan, maka kita perlu menetapkan sifat berikut,
a spark.conf.set(“spark.sql.avro.compression.codec”, “deflate”)
spark.conf.set(“spark.sql.avro.deflate.level”, “4”).
Terdapat dua jenis fail Avro,
Ia termasuk null, Boolean, int, long, double, bait dan rentetan.
Schema: {"type": "null"}
{ "kind": "array" "objects": "long" }
{ "kind": "map" "values": "long" }
{ "kind": "record", "name": "---", "doc": "---", "area": [ {"name": "--", "type": "int"}, --- ] }
{ "kind": "enum", "name": "---", "doc": "---", "symbols": ["--", "--"] }
{ "kind": "fixed", "name": "---", "size": in bytes }
[ "null", "string", -- ]
Mari kita lihat contoh fail avro dengan skema dan tanpa skema,
Fail Avro menggunakan skema:
import java.util.Properties import java.io.InputStream import com.boomi.execution.ExecutionUtil import org.apache.avro.Schema; import org.apache.avro.file.DataFileStream; import org.apache.avro.generic.GenericDatumReader; import org.apache.avro.generic.GenericRecord; import org.apache.avro.io.DatumReader; logger = ExecutionUtil.getBaseLogger(); for (int j = 0; j < dataContext.getDataCount(); j++) { InputStream istm = dataContext.getStream(j) Properties prop = dataContext.getProperties(j) DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>(); DataFileStream<GenericRecord> dataFileStream = new DataFileStream<GenericRecord>(istm, datumReader); Schema sche = dataFileStream.getSchema(); logger.info("Schema utilize for: " + sche); GenericRecord rec = null; while (dataFileStream.hasNext()) { rec = dataFileStream.next(rec); System.out.println(rec); istm = new ByteArrayInputStream(rec.toString().getBytes('UTF-8')) dataContext.storeStream(istm, prop) } }
Dalam contoh di atas di mana skema telah digunakan dengan fail avro, kita boleh mengatakan bahawa ini ialah skrip yang boleh membaca fail avro, dan dalam hal ini, kita telah menghasilkan lebih daripada satu dokumen JSON. Kami telah mengimport pakej yang berkaitan, menetapkan skema dan memanggilnya dengan mencipta objek dan menulis data dalam JSON menggunakan kod seperti yang diberikan dalam skrip di atas.
Fail Avro tanpa skema:
import java.util.Properties import java.io.InputStream import com.boomi.execution.ExecutionUtil import org.apache.avro.Schema; import org.apache.avro.file.DataFileStream; import org.apache.avro.generic.GenericDatumReader; import org.apache.avro.generic.GenericRecord; import org.apache.avro.io.DatumReader; logger = ExecutionUtil.getBaseLogger(); String schemaString = '{"type":"record","name":"college","namespace":"student.avro",' + '"fields":[{"name":"title","type":"string","doc":"college title"},{"name":"exam_date","type":"string","sub":"start date"},{"name":"teacher","type":"int","sub":"main charactor is the teacher in college"}]}' for (int k = 0; k < dataContext.getDataCount(); k++) { InputStream istm = dataContext.getStream(k) Properties prop = dataContext.getProperties(k) DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>(); DataFileStream<GenericRecord> dataFileStre= new DataFileStream<GenericRecord>(istm, datumReader); Schema sche = Schema.parse(scheString) logger.info("Schema used: " + sche); GenericRecord rec = null; while (dataFileStre.hasNext()) { rec = dataFileStre.next(rec); System.out.println(rec); is = new ByteArrayInputStream(rec.toString().getBytes('UTF-8')) dataContext.storeStream(is, prop) } }
In the above example, we have written an example of reading files without schema in which we have to understand that if we have not included the schema under the avro file, then we have to perform some steps for informing the interpreter how to explain binary avro data, we also need to generate the schema which has been utilizing, in which this example can avro schema with a different name. We can also set it on another path.
In this article, we have concluded that the avro file is a data file that can work with the data serialized system utilized by Apache Hadoop. It has an open-source platform; we have also seen the configuration of the data files and examples, which helps to understand the concept.
Atas ialah kandungan terperinci Fail Avro. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!