Ich denke darüber nach, HBase als Quelle für einen meiner MapReduce-Jobs zu verwenden. Ich weiß, dass TableInputFormat eine Eingabeaufteilung (und damit einen Mapper) pro Region angibt. Dies scheint jedoch ineffizient zu sein. Ich würde wirklich gerne mehrere Mapper gleichzeitig in einer bestimmten Region arbeiten lassen. Kann ich dies erreichen, indem ich TableInputFormatBase erweitere? Kannst du mich bitte auf ein Beispiel hinweisen? Ist das überhaupt eine gute Idee?
Danke für die Hilfe.
Sie benötigen ein benutzerdefiniertes Eingabeformat, das InputFormat erweitert. Sie können sich eine Vorstellung davon machen, wie dies von der Antwort auf die Frage Ich möchte viele Daten scannen (bereichsbasierte Abfragen), welche Optimierungen ich beim Schreiben der Daten machen kann, damit der Scan schneller wird . Dies ist eine gute Idee, wenn die Zeit der Datenverarbeitung größer ist als die Zeit zum Abrufen von Daten.
Nicht sicher, ob Sie mehrere Mapper für eine bestimmte Region angeben können, aber berücksichtigen Sie Folgendes:
Wenn Sie der Meinung sind, dass ein Mapper pro Region ineffizient ist (vielleicht haben Ihre Datenknoten nicht genügend Ressourcen wie #cpus), können Sie vielleicht kleinere Regionengrößen in der Datei hbase-site.xml angeben.
Hier ist eine Seite für die Standardkonfigurationsoptionen, wenn Sie das ändern wollen: Ссылка
Bitte beachten Sie, dass Sie die Anzahl der Dateien in Ihrem DFS erhöhen, indem Sie die Größe der Region klein machen. Dies kann die Kapazität Ihres Hadoop-DFS je nach Speicher Ihres Namens begrenzen. Denken Sie daran, dass die Speichernutzung des Namensodes in direktem Zusammenhang mit der Anzahl der Dateien in Ihrem DFS steht. Dies kann für Ihre Situation relevant sein oder auch nicht, da ich nicht weiß, wie Ihr Cluster verwendet wird. Auf diese Fragen gibt es niemals eine Silberkugel!
1. Es ist absolut in Ordnung, nur sicherzustellen, dass der Schlüsselsatz sich gegenseitig zwischen den Mappern ausschließt.
Mit diesem MultipleScanTableInputFormat können Sie mithilfe der MultipleScanTableInputFormat.PARTITIONS_PER_REGION_SERVER-Konfiguration steuern, wie viele Mapper auf einem einzelnen Regionsserver ausgeführt werden sollen. Die Klasse gruppiert alle Eingabeaufteilungen nach ihrer Position (regionserver), und der RecordReader durchläuft alle aggregierten Aufteilungen für den Mapper ordnungsgemäß.
Hier ist das Beispiel
In dieser Arbeit haben Sie mehrere aggregierte Splits für einen einzelnen Mapper erstellt.
%Vor%Erstellen Sie Partition nach Regionsserver
%Vor%Dies ist nützlich, wenn Sie große Bereiche (Hunderte von Millionen Zeilen) mit konditioniertem Scan scannen möchten, der nur wenige Datensätze findet. Dies verhindert ScannerTimeoutException
%Vor%Tags und Links java hadoop mapreduce performance hbase