Als Hadoop von Doug Cutting geschrieben wurde, entschied er, dass die Java-Standardmethode zum Serialisieren von Java-Objekten mit Java Object Serialization (Java Serialization) nicht seinen Anforderungen für Hadoop entsprach. Und zwar waren diese Anforderungen:
- Serialize die Daten in einem kompakten Binärformat.
- Be schnell, sowohl in der Leistung und wie schnell es erlaubt, Daten übertragen werden.
- Interoperabel, damit andere Sprachen leichter in Hadoop eingesteckt werden können.
Als er Java Serialisierung beschrieben:
Es sah groß und behaart und ich brauchten wir allerdings etwas schlank und
Anstelle der Verwendung von Java Serialisierung sie ihre eigene Serialisierung Rahmen geschrieben. Die Hauptprobleme bei der Java-Serialisierung bestanden darin, dass der Klassenname jedes Objekts, das serialisiert wird, in den Stream geschrieben wird, wobei jede nachfolgende Instanz dieser Klasse anstelle des Klassennamens eine 5-Byte-Referenz auf die erste enthält.
Neben der Reduzierung der effektiven Bandbreite des Streams führt dies zu Problemen beim wahlfreien Zugriff sowie beim Sortieren von Datensätzen in einem serialisierten Datenstrom. Daher schreibt die Hadoop-Serialisierung nicht den Klassennamen oder die erforderlichen Referenzen und nimmt an, dass der Client den erwarteten Typ kennt.
Java Serialisierung erstellt auch ein neues Objekt für jedes deserialized. Hadoop-Writables, die die Hadoop-Serialisierung implementieren, können wiederverwendet werden. Dies trägt zur Verbesserung der Leistung von MapReduce bei, die Milliarden von Datensätzen serialisiert und deserialisiert.
Avro passt in Hadoop, da es die Serialisierung auf andere Weise annimmt. Der Client und der Server tauschen ein Schema aus, das den Datenstrom beschreibt. Dies macht es schnell, kompakt und vor allem macht es einfacher, Sprachen miteinander zu mischen.
So definiert Avro ein Serialisierungsformat, ein Protokoll für Clients und Server, um diese seriellen Streams zu kommunizieren und eine Möglichkeit, Daten in Dateien kompakt zu speichern.
Ich hoffe, das hilft. Ich dachte, ein bisschen Hadoop-Geschichte würde helfen zu verstehen, warum Avro ein Teilprojekt von Hadoop ist und was es helfen soll.
vielen Dank! das ist sehr hilfreich, ich denke, ich brauche ein wenig Hintergrund von Hadoop, um seine Teilprojekte zu verstehen :) – Yang