RCFile - RCFile
RCFile (Record Columnar File) ist eine Datenplatzierungsstruktur, die bestimmt, wie relationale Tabellen auf Computerclustern gespeichert werden . Es wurde für Systeme entwickelt, die das MapReduce- Framework verwenden. Die RCFile-Struktur umfasst ein Datenspeicherformat, einen Datenkomprimierungsansatz und Optimierungstechniken zum Lesen von Daten. Es ist in der Lage, alle vier Anforderungen der Datenplatzierung zu erfüllen: (1) schnelles Laden von Daten, (2) schnelle Abfrageverarbeitung, (3) hocheffiziente Speicherplatznutzung und (4) starke Anpassungsfähigkeit an dynamische Datenzugriffsmuster.
RCFile ist das Ergebnis von Forschungs- und Kooperationsbemühungen von Facebook , der Ohio State University und dem Institut für Computertechnologie der Chinesischen Akademie der Wissenschaften .
Zusammenfassung
Datenspeicherformat
Eine Tabelle in einer Datenbank besteht beispielsweise aus 4 Spalten (c1 bis c4):
| c1 | c2 | c3 | c4 |
|---|---|---|---|
| 11 | 12 | 13 | 14 |
| 21 | 22 | 23 | 24 |
| 31 | 32 | 33 | 34 |
| 41 | 42 | 43 | 44 |
| 51 | 52 | 53 | 54 |
Um die Tabelle zu serialisieren, partitioniert RCFile diese Tabelle zuerst horizontal und dann vertikal, anstatt die Tabelle nur horizontal wie das zeilenorientierte DBMS (Zeilenspeicher) zu partitionieren. Bei der horizontalen Partitionierung wird die Tabelle zunächst in mehrere Zeilengruppen aufgeteilt, basierend auf der Zeilengruppengröße. Dies ist ein benutzerdefinierter Wert, der die Größe jeder Zeilengruppe bestimmt. Beispielsweise kann die oben erwähnte Tabelle in zwei Zeilengruppen aufgeteilt werden, wenn der Benutzer drei Zeilen als Größe jeder Zeilengruppe angibt.
| c1 | c2 | c3 | c4 |
|---|---|---|---|
| 11 | 12 | 13 | 14 |
| 21 | 22 | 23 | 24 |
| 31 | 32 | 33 | 34 |
| c1 | c2 | c3 | c4 |
|---|---|---|---|
| 41 | 42 | 43 | 44 |
| 51 | 52 | 53 | 54 |
Dann partitioniert RCFile in jeder Zeilengruppe die Daten vertikal wie einen Spaltenspeicher. Daher wird die Tabelle wie folgt serialisiert:
Row Group 1 Row Group 2
11, 21, 31; 41, 51;
12, 22, 32; 42, 52;
13, 23, 33; 43, 53;
14, 24, 34; 44, 54;
Spaltendatenkomprimierung
Innerhalb jeder Zeilengruppe werden Spalten komprimiert, um die Speicherplatznutzung zu reduzieren. Da Daten einer Spalte nebeneinander gespeichert werden, kann das Muster einer Spalte erfasst und somit der geeignete Komprimierungsalgorithmus für ein hohes Komprimierungsverhältnis ausgewählt werden.
Leistungsvorteile
Der Spaltenspeicher ist effizienter, wenn für eine Abfrage nur eine Teilmenge von Spalten erforderlich ist, da der Spaltenspeicher nur die erforderlichen Spalten von Datenträgern liest, der Zeilenspeicher jedoch eine ganze Zeile liest.
RCFile kombiniert die Vorteile von Zeilen- und Spaltenspeicherung über horizontal-vertikale Partitionierung. Bei der horizontalen Partitionierung platziert RCFile alle Spalten einer Zeile auf einem einzelnen Computer und kann so die zusätzlichen Netzwerkkosten beim Erstellen einer Zeile eliminieren. Bei der vertikalen Partitionierung liest RCFile für eine Abfrage nur die erforderlichen Spalten von den Festplatten und kann so die unnötigen lokalen E / A-Kosten eliminieren. Darüber hinaus kann in jeder Zeilengruppe die Datenkomprimierung mithilfe von Komprimierungsalgorithmen durchgeführt werden, die im Spaltenspeicher verwendet werden .
Eine Datenbank könnte beispielsweise folgende Tabelle haben:
| EmpId | Familienname, Nachname | Vorname | Gehalt |
|---|---|---|---|
| 10 | Schmied | Joe | 40000 |
| 12 | Jones | Maria | 50000 |
| 11 | Johnson | Cathy | 44000 |
| 22 | Jones | Bob | 55000 |
Diese einfache Tabelle enthält eine Mitarbeiter-ID (EmpId), Namensfelder (Nachname und Vorname) und ein Gehalt (Gehalt). Dieses zweidimensionale Format existiert nur theoretisch, in der Praxis erfordert Speicherhardware, dass die Daten in die eine oder andere Form serialisiert werden.
In MapReduce-basierten Systemen werden Daten normalerweise auf einem verteilten System wie dem Hadoop Distributed File System (HDFS) gespeichert, und verschiedene Datenblöcke können auf verschiedenen Computern gespeichert werden. Für das Speichern von Spalten in MapReduce können daher verschiedene Gruppen von Spalten auf verschiedenen Computern gespeichert werden, was zusätzliche Netzwerkkosten verursacht, wenn eine Abfrage Spalten projiziert, die auf verschiedenen Computern platziert sind. Bei MapReduce-basierten Systemen besteht der Vorteil des Zeilenspeichers darin, dass keine zusätzlichen Netzwerkkosten für die Erstellung einer Zeile in der Abfrageverarbeitung anfallen, und der Vorteil des Spaltenspeichers darin, dass beim Lesen von Daten keine unnötigen lokalen E / A-Kosten anfallen Festplatten.
Zeilenorientierte Systeme
Die übliche Lösung für das Speicherproblem besteht darin, jede Datenzeile wie folgt zu serialisieren.
001:10,Smith,Joe,40000;002:12,Jones,Mary,50000;003:11,Johnson,Cathy,44000;004:22,Jones,Bob,55000;
Zeilenbasierte Systeme sind so konzipiert, dass sie Daten für eine ganze Zeile oder einen gesamten Datensatz in möglichst wenigen Vorgängen effizient zurückgeben. Dies entspricht Anwendungsfällen, in denen das System versucht, alle Informationen zu einem bestimmten Objekt abzurufen, z. B. die vollständigen Informationen zu einem Kontakt in einem Rolodex- System oder die vollständigen Informationen zu einem Produkt in einem Online-Einkaufssystem.
Zeilenbasierte Systeme können im Gegensatz zu einem bestimmten Datensatz keine Operationen ausführen, die für den gesamten Datensatz gelten. Um beispielsweise alle Datensätze in der Beispieltabelle zu finden, deren Gehälter zwischen 40.000 und 50.000 liegen, müsste das zeilenbasierte System den gesamten Datensatz nach übereinstimmenden Datensätzen durchsuchen. Während die oben gezeigte Beispieltabelle möglicherweise in einen einzelnen Plattenblock passt, würde eine Tabelle mit sogar einigen hundert Zeilen nicht passen, daher wären mehrere Plattenoperationen erforderlich, um die Daten abzurufen.
Spaltenorientierte Systeme
Ein spaltenorientiertes System serialisiert alle Werte einer Spalte zusammen und dann die Werte der nächsten Spalte. In unserer Beispieltabelle würden die Daten auf diese Weise gespeichert.
10:001,12:002,11:003,22:004;Smith:001,Jones:002,Johnson:003,Jones:004;Joe:001,Mary:002,Cathy:003,Bob:004;40000:001,50000:002,44000:003,55000:004;
Der Unterschied ist deutlicher in dieser allgemeinen Modifikation zu sehen:
...;Smith:001,Jones:002,004,Johnson:003;...
Zwei der Datensätze speichern den gleichen Wert, "Jones". Daher ist es jetzt möglich, diesen Wert nur einmal statt zweimal im spaltenorientierten System zu speichern. Bei vielen gängigen Suchvorgängen wie "Alle Personen mit dem Nachnamen Jones finden" kann die Antwort jetzt in einem einzigen Vorgang abgerufen werden.
Ob ein spaltenorientiertes System im Betrieb effizienter ist oder nicht, hängt stark von den zu automatisierenden Vorgängen ab. Vorgänge, bei denen Daten für Objekte abgerufen werden, sind langsamer und erfordern zahlreiche Festplattenvorgänge, um Daten aus verschiedenen Spalten zusammenzustellen und einen Datensatz mit ganzen Zeilen zu erstellen. Solche Ganzzeilenoperationen sind jedoch im Allgemeinen selten. In den meisten Fällen wird nur eine begrenzte Teilmenge von Daten abgerufen. In einer Rolodex-Anwendung sind beispielsweise Vorgänge, bei denen Vor- und Nachnamen aus vielen Zeilen erfasst werden, um eine Kontaktliste zu erstellen, weitaus häufiger als Vorgänge, bei denen die Daten für die Heimatadresse gelesen werden.
Annahme
RCFile wurde in realen Systemen für die Big-Data-Analyse übernommen.
- RCFile wurde zur Standardstruktur für die Datenplatzierung im Hadoop-Produktionscluster von Facebook. Bis 2010 war es der weltweit größte Hadoop-Cluster, in dem täglich 40 Terabyte komprimierte Datensätze hinzugefügt werden. Darüber hinaus wurden alle vor HDFile in HDFS gespeicherten Datensätze in RCFile umgewandelt.
- RCFile wurde in Apache Hive (seit Version 0.4) übernommen, einem Open-Source-Datenspeichersystem, das auf Hadoop ausgeführt wird und in verschiedenen Unternehmen auf der ganzen Welt weit verbreitet ist, darunter verschiedene Internetdienste wie Facebook , Taobao , und Netflix .
- RCFile wurde in Apache Pig (seit Version 0.7) übernommen, einem weiteren Open-Source-Datenverarbeitungssystem, das in vielen Organisationen, einschließlich mehrerer großer Webdienstanbieter wie Twitter , Yahoo , LinkedIn , AOL und Salesforce.com, weit verbreitet ist .
- RCFile wurde zur De-facto- Standard-Datenspeicherstruktur in der Hadoop-Softwareumgebung, die vom Apache HCatalog- Projekt (früher bekannt als Howl) unterstützt wird, dem Tabellen- und Speicherverwaltungsdienst für Hadoop. RCFile wird von der Open-Source-Bibliothek Elephant Bird unterstützt, die in Twitter für die tägliche Datenanalyse verwendet wird.
In den folgenden Jahren wurden auch andere Hadoop-Datenformate populär. Im Februar 2013 wurde von Hortonworks ein ORC- Dateiformat (Optimized Row Columnar) angekündigt . Einen Monat später wurde das von Cloudera und Twitter entwickelte Apache Parquet- Format angekündigt .
Siehe auch
- Spalte (Datenspeicher)
- Spaltenorientiertes DBMS
- Karte verkleinern
- Apache Hadoop
- Apache Hive
- Große Daten