2015-06-25 10 views
6

Ich versuche mein Gehirn um Hadoop wickeln und lesen this excellent tutorial sowie die official Hadoop docs. Jedoch in keinen dieser Literatur finde ich eine einfache Erklärung für etwas ziemlich rudimentär: „Hallo WeltWie erhält Hadoop Eingabedaten, die nicht in HDFS gespeichert sind?

In allen gekünstelt (Wortzahl) einleitende MR Beispiele, die Eingangsdaten gespeichert direkt in Textdateien. Aber für mich ist es fühlt wie dies würde selten der Fall in der realen Welt sein. Ich würde vorstellen, dass die Eingangsdaten existieren würden in großen Datenspeichern, wie ein relationale DB, Mongo, Cassandra in Wirklichkeit, oder nur über REST API zur Verfügung, usw.

Also frage ich: In der realen Welt , wie erhält Hadoop seine Eingabedaten? Ich sehe, dass es Projekte wie Sqoop und Flume gibt und frage mich, ob der Sinn dieser Frameworks darin besteht, einfach ETL-Daten in HDFS einzugeben, um MR-Jobs auszuführen.

+1

gute Frage, aber es gibt auch viele Fälle in der "realen Welt" (was auch immer das für irreale Welten bedeuten mag), in denen hadoop seine Daten von Dateien auf HDFS bezieht. Vielleicht finden Sie Hive nützlich für Ihre Bedürfnisse ... – vefthym

+1

Danke @veththym (+1) - dann denke ich die Wurzel meiner Frage ist: * Wie kommen die Daten auf die HDFS in erster Linie? * Zumindest dort Es muss * irgendeine * Art von Upfront-ETL von verschiedenen heterogenen Systemen (wieder wie Mongo, Cassandra, REST-APIs usw.) auf dem HDFS sein. Aber ich würde denken, dass diese ETL-Prozesse so langsam und arbeitsintensiv sind, dass Hadoop (oder ein begleitendes Framework) in der Lage wäre, Daten direkt aus diesen Systemen zu laden, entweder HDFS komplett zu umgehen oder sie auf HDFS JIT zu laden. – smeeb

+1

Vielleicht könnten Sie andere alternative Eingabeformate als [FileInputFormat] (https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/FileInputFormat.html) untersuchen, zum Beispiel [DBInputFormat ] (https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/lib/db/DBInputFormat.html), damit Sie auf nicht in einer Datenbank gespeicherte HDFS-Daten zugreifen können. – frb

Antwort

4

Tatsächlich wird HDFS in der Real-World-Anwendung aus vielen Gründen benötigt.

  • Sehr hohe Bandbreite zur Unterstützung von Map Reduzieren Sie Workloads und Skalierbarkeit.
  • Datenzuverlässigkeit und Fehlertoleranz. Aufgrund von Replikation und verteilter Natur. Erforderlich für kritische Datensysteme.
  • Flexibilität - Sie müssen die Daten nicht vorverarbeiten, um sie in HDFS zu speichern.

Hadoop wurde entwickelt, um einmal zu schreiben und viele Konzepte zu lesen. Kafka, Flume und Sqoop, die im Allgemeinen für die Aufnahme verwendet werden, sind selbst sehr fehlertolerant und bieten eine hohe Bandbreite für die Datenaufnahme zu HDFS. Manchmal ist es erforderlich, Daten von Tausenden für Quellen pro Minute mit Daten in GBs aufzunehmen. Dazu werden diese Tools benötigt sowie fehlertolerantes Speichersystem-HDFS.

+0

Dank @Anshul Joshi (+1) - das macht Sinn. Können Sie dann bitte bestätigen, dass es für Entwickler typisch/üblich ist, "Ingestion Tools" wie Kafka/Flume/Sqoop/etc. Eingabedaten in HDFS laden, bevor der MR-Job tatsächlich läuft? Wenn du das bestätigen kannst oder mir das klarstellst/korrigieren kannst, dann sollte alles in Ordnung sein. Danke noch einmal! – smeeb

+0

Ja, es ist üblich und wird normalerweise in allen Produktionsumgebungen verwendet. Und für alle kritischen MR-Jobs werden nur Daten aus HDFS verwendet. Um Datenverluste zu vermeiden oder einen hohen Durchsatz aufrechtzuerhalten, müssen solche Ingestion-Tools verwendet werden. Hoffe, ich habe deine Frage beantwortet. –

Verwandte Themen