2016-08-08 12 views
1

Wir haben ein System, einschließlich einiger Oracle und Microsoft SQL DBMS, die Daten aus verschiedenen Quellen und in verschiedenen Formaten erhalten, speichern und verarbeiten. "Verschiedene Formate" bedeutet Dateien: dbf, xls und andere, einschließlich binärer Formate (Bilder), die mit verschiedenen Werkzeugen in DBMS importiert werden, und direkten Zugriff auf die Datenbanken. Ich möchte alle eingehenden Daten isolieren und sie "für immer" speichern und sie später nach Quelle und Erstellungszeit erhalten. Nach einigen Studien möchte ich Hadoop-Ökosystem ausprobieren, aber nicht ganz sicher, ob es eine adäquate Lösung für dieses Ziel ist. Und welche Teile des Ökosystems sollte ich verwenden? HDFS allein, Hive, könnte etwas anderes sein? Könnten Sie mir einen Rat geben?Sammeln heterogener Daten mit hadoop

Antwort

0

Ich nehme an, Sie möchten die Dateien speichern, die die Daten enthalten - effektiv ein durchsuchbares Dateiarchiv.

Die Dateien selbst können nur in HDFS gespeichert werden ... oder Sie finden ein System wie Amazon S3 billiger und flexibler. Während Sie die Dateien speichern, können Sie die anderen Daten über die Daten verwalten, nämlich Ort, Quelle und Erstellungszeit, indem Sie sie an eine andere Datei anhängen - eine einfache Tab-getrennte Datei oder mehrere andere von Hadoop unterstützte Formate machen dies einfach.

Sie können die Datei mit Hive oder anderen SQL-on-Hadoop-Tools verwalten und abfragen. In der Tat erstellen Sie ein einfaches Dateisystem mit speziellen Attributen. Sie sollten also sicherstellen, dass Sie jedes Mal, wenn Sie eine Datei schreiben, auch die Metadaten schreiben. Möglicherweise müssen Sie Fälle wie Schreibfehler behandeln, was passiert, wenn Sie Dateien löschen, umbenennen oder verschieben (ich weiß, Sie sagen "nie").

Je nach Ihren Anforderungen ist die Lösung möglicherweise einfacher. Möglicherweise ist das Speichern der Daten in Unterverzeichnissen in HDFS (oder AWS S3) noch einfacher. Vielleicht, wenn Sie DBF-Dateien von der Quelle „foo“ und XLS-Dateien von „bar“ erstellt am 1. Dezember 2015 können Sie einfach erstellen Sie eine Verzeichnisstruktur wie

/2015/12/01/foo/dbf/myfile.dbf 
/2015/12/01/bar/xls/myexcel.xls 

Diese Lösung hat den Vorteil, dass sie speichern wollen Selbsterhaltend - der Dateipfad speichert die Metadaten, was ihn sehr portabel und einfach macht und lediglich die Implementierung eines Shell-Skripts erfordert.

Ich glaube nicht, dass es einen Grund gibt, die Lösung komplizierter als nötig zu machen. Hadoop oder S3 eignen sich sowohl für Langzeitspeicher mit hoher Haltbarkeit als auch für Abfragen. Meine Firma hat festgestellt, dass das Speichern der Informationen über die Datei in Hadoop (die wir für viele andere Zwecke verwenden) und das Speichern der Dateien selbst auf AWS S3 viel einfacher, einfacher zu sichern und viel billiger ist.

+0

Danke für die Antwort. Ich möchte keine einfache Dateiablage organisieren, weil es nur ein erster Schritt ist - danach möchte ich einige Möglichkeiten für Datenanalysen hinzufügen. Das Problem ist, dass ich vorerst nicht sagen kann, was genau in all diesen Dateien steckt) Ich kann über den Teil von ihnen sagen, aber das ganze System ist ziemlich alt, kompliziert und voller Legacy-Code. Es gibt keine einzelne Person, die alle Datenquellen dafür (oder sogar alle Komponenten dieses Systems) kennt. Ein Zweck besteht also darin, alle eingehenden Daten zu berücksichtigen und zu systematisieren. – user2412517

0

Es gibt verschiedene Dinge, die Sie tun können, jeder mit seiner eigenen Lösung. Wenn mehr als 1 Anwendungsfall für Sie relevant ist, möchten Sie wahrscheinlich mehrere Lösungen parallel implementieren.

1. Speichern von Dateien für die Verwendung

Wenn Sie Dateien in einer Art und Weise gespeichert werden sollen, dass sie effizient sein können (verteilt) aufgenommen, die Lösung ist einfach: Legen Sie die Dateien auf hdfs

2. Speichern Sie die zu verwendenden Informationen.

Wenn Sie die Informationen verwenden möchten, anstatt die Dateien zu speichern, sollten Sie daran interessiert sein, die Informationen so zu speichern, dass sie effizient abgerufen werden können. Die allgemeine Lösung wäre hier: die Dateien in einem lossles Weise analysieren und speichern ihre Informationen in einer Datenbank

Sie können feststellen, dass Dateien Informationen in (partitioniert) ORC Speicherung kann für diese schön. Sie können dies mit Pive, Pig oder sogar UDFs (z.B.Python) in Schwein.

3. Halten Sie die Dateien für die Zukunft

In diesem Fall, dass Sie vor allem über die Erhaltung der Dateien, und nicht so sehr um einen leichten Zugang sorgen würde. Hier ist die empfohlene Lösung: Speichern Sie komprimierte Dateien mit geeigneten Sicherungen

Beachten Sie, dass die Replikation, die hdfs tut, effizienter mit Daten (und Hardwareproblemen) umzugehen ist. Wenn Sie Ihre Daten nur auf hdfs haben, heißt das NICHT, dass sie gesichert werden.

+0

Die ersten beiden Fälle sind relevant. Ich plane, mit dem ersten Ansatz zu beginnen und mich dann zum zweiten zu bewegen, wo es möglich wäre (zum Beispiel sind ein Teil der eingehenden Daten Bilder von gescannten Dokumenten). – user2412517