Sqoop-Exportkarte100 % reduzieren0 % steckt aus verschiedenen Gründen und Lösungen fest

Sqoop-Exportkarte100 % reduzieren0 % steckt aus verschiedenen Gründen und Lösungen fest

Ich nenne diese Art von Fehler einen typischen „Hamlet“-Fehler. Das ist die Art von Fehler, bei dem „die Fehlermeldung die gleiche ist, es aber im Internet verschiedene Lösungen gibt“, sodass wir uns fragen, welche davon der Kern des Problems ist.

Schauen wir uns zunächst den Importbefehl an:

[root@host25 ~]# 
sqoop export --connect "jdbc:mysql://172.16.xxx.xxx:3306/dbname?useUnicode=true&characterEncoding=utf-8" 
--username=root --password=xxxxx --table Regeltag --update-key Regelcode 
--update-mode allowinsert 
--export-dir /user/hive/warehouse/lmj_test.db/rule_tag --input-fields-terminated-by '\t' 
--input-null-string '\\N' --input-null-non-string '\\N' -m1

Dieser Importbefehl ist syntaktisch korrekt.

Als nächstes kommt der Fehler:

#Teil extrahieren 19/06/11 09:39:57 INFO mapreduce.Job: Die URL zum Verfolgen des Jobs: http://dthost25:8088/proxy/application_1554176896418_0537/
19/06/11 09:39:57 INFO mapreduce.Job: Laufender Job: job_1554176896418_0537
19/06/11 09:40:05 INFO mapreduce.Job: Job job_1554176896418_0537 wird im Uber-Modus ausgeführt: false
19/06/11 09:40:05 INFO mapreduce.Job: map 0% reduzieren 0%
19/06/11 09:40:19 INFO mapreduce.Job: map 100% reduzieren 0%
19/06/11 09:45:34 INFO mapreduce.Job: Task-ID: attempt_1554176896418_0537_m_000000_0, Status: FEHLGESCHLAGEN
AttemptID:attempt_1554176896418_0537_m_000000_0 Zeitüberschreitung nach 300 Sekunden
19/06/11 09:45:36 INFO mapreduce.Job: map 0% reduzieren 0%
19/06/11 09:45:48 INFO mapreduce.Job: map 100% reduzieren 0%
19/06/11 09:51:04 INFO mapreduce.Job: Aufgaben-ID: attempt_1554176896418_0537_m_000000_1, Status: FEHLGESCHLAGEN
AttemptID:attempt_1554176896418_0537_m_000000_1 Zeitüberschreitung nach 300 Sekunden
19/06/11 09:51:05 INFO mapreduce.Job: map 0% reduzieren 0%
19/06/11 09:51:17 INFO mapreduce.Job: map 100% reduzieren 0%
19/06/11 09:56:34 INFO mapreduce.Job: Aufgaben-ID: attempt_1554176896418_0537_m_000000_2, Status: FEHLGESCHLAGEN
AttemptID:attempt_1554176896418_0537_m_000000_2 Zeitüberschreitung nach 300 Sekunden
19/06/11 09:56:35 INFO mapreduce.Job: map 0% reduzieren 0%
19/06/11 09:56:48 INFO mapreduce.Job: map 100% reduzieren 0%
19/06/11 10:02:05 INFO mapreduce.Job: Job job_1554176896418_0537 ist mit dem Status FAILED fehlgeschlagen aufgrund von: Task fehlgeschlagen task_1554176896418_0537_m_000000
Der Auftrag ist fehlgeschlagen, da die Aufgaben fehlgeschlagen sind. failedMaps:1 failedReduces:0
19/06/11 10:02:05 INFO mapreduce.Job: Zähler: 9
 Jobzähler 
 Fehlgeschlagene Kartenaufgaben=4
 Gestartete Kartenaufgaben=4
 Andere lokale Kartenaufgaben = 3
 Datenlokale Map-Aufgaben=1
 Gesamtzeit aller Karten in belegten Slots (ms) = 2624852
 Gesamtzeit, die alle Reduzierten in belegten Zeitschlitzen verbringen (ms) = 0
 Gesamtzeitaufwand aller Kartenaufgaben (ms) = 1312426
 Gesamtzahl der von allen Map-Aufgaben benötigten Vcore-Sekunden = 1312426
 Gesamtanzahl Megabyte-Sekunden, die von allen Kartenaufgaben benötigt werden = 2687848448
19/06/11 10:02:05 WARN mapreduce.Counters: Die Gruppe FileSystemCounters ist veraltet. Verwenden Sie stattdessen org.apache.hadoop.mapreduce.FileSystemCounter
19/06/11 10:02:05 INFO mapreduce.ExportJobBase: 0 Bytes in 1.333,3153 Sekunden übertragen (0 Bytes/Sek.)
19/06/11 10:02:05 WARN mapreduce.Counters: Gruppe org.apache.hadoop.mapred.Task$Counter ist veraltet. Verwenden Sie stattdessen org.apache.hadoop.mapreduce.TaskCounter
19/06/11 10:02:05 INFO mapreduce.ExportJobBase: 0 Datensätze exportiert.
19/06/11 10:02:05 FEHLER tool.ExportTool: Fehler beim Export: Exportauftrag fehlgeschlagen!
Dauer: 1340 s 
Aufgabe IDE_TASK_ADE56470-B5A3-4303-EA75-44312FF8AA0C_20190611093945147 ist abgeschlossen.

Es ist ersichtlich, dass die Importaufgabe bei INFO mapreduce.Job: map 100% reduce 0% angehalten und für 5 Minuten angehalten wurde. Dann wurde die Aufgabe automatisch neu gestartet und blieb für weitere 5 Minuten hängen. Schließlich meldete die Aufgabe einen Timeout-Fehler.

Offensichtlich ist die direkte Ursache für den Taskfehler ein Timeout, aber der Grund für das Timeout liegt darin, dass der MapReduce-Task des Importvorgangs hängen bleibt. Warum bleibt MapReduce hängen? Dies wird im Fehlerprotokoll nicht erwähnt, was bei der Suche nach der Ursache am problematischsten ist.

Lassen Sie mich Ihnen zunächst das Ergebnis mitteilen. Nach langer Suche stellte ich fest, dass es daran lag, dass die Datenlänge einer Zeile die von MySQL festgelegte Feldlänge überschritt. Das heißt, beim Importieren der Zeichenfolge „Die Zeichenfolge ist sehr lang, sehr lang, sehr lang, sehr lang, sehr lang, sehr lang, sehr lang“ in das Feld varchar(50) wird die Aufgabe blockiert.

Hier fasse ich die verschiedenen Gründe im Internet zusammen. Sie können sie einzeln überprüfen.

Mögliche Gründe für das Hängenbleiben bei „Map 100 % – Reduzieren 0 %“: (am Beispiel des MySQL-Exports)

1. Längenüberlauf. Die importierten Daten überschreiten die in der MySQL-Tabelle festgelegte Feldlänge

Lösung: Setzen Sie die Feldlänge zurück

2. Codierungsfehler. Die importierten Daten liegen nicht im MySQL-Kodierungszeichensatz vor

Lösung: Tatsächlich ist die Kodierung, die dem UTF-8-Zeichensatz in der MySQL-Datenbank entspricht, nicht utf8, sondern utf8mb4. Wenn Ihre importierten Daten Emoji-Ausdrücke oder ungewöhnliche chinesische Schriftzeichen enthalten, werden sie daher nicht importiert und blockiert. Dabei musst Du auf zwei Punkte achten:

(1) In der Importanweisung ist UseUnicode=true&characterEncoding=utf-8 angegeben, was bedeutet, dass der Export im UTF-8-Format erfolgt.

(2) In der Anweisung zur MySQL-Tabellenerstellung wird ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 festgelegt.

3. Nicht genügend Speicher. Möglicherweise ist die zu importierende Datenmenge zu groß oder der zugewiesene Speicher zu klein.

Lösung: Importieren Sie entweder in Stapeln oder weisen Sie der Aufgabe mehr Speicher zu.

4. Der Hostname ist falsch.

Lösung: Dies scheint ein Problem mit der Hostnamenkonfiguration zu sein

5. Der Primärschlüssel wird wiederholt.

Lösung: Dies liegt daran, dass die von Ihnen importierten Daten doppelte Primärschlüsselwerte enthalten. Sie müssen die Daten entsprechend verarbeiten.

Ergänzung: Lösung für MapReduce, das hängen bleibt, wenn Sqoop Daten aus der Datenbank nach HDFS exportiert

Beim Exportieren von Daten aus der Datenbank während Sqoop bleibt MapReduce hängen

Nach einer Suche auf Baidu scheint es, dass ich die Konfigurationselemente für Speicher und virtuellen Speicher in Yarn festlegen muss. Ich habe diese Elemente vorher nicht konfiguriert und es hat problemlos funktioniert. Aber dieses Mal scheint es in einem größeren Maßstab abzulaufen. Dieser Fehler kann auftreten, weil die jedem Docker zugewiesenen Speicher- und CPU-Ressourcen zu klein sind, um die Standardressourcenanforderungen zum Ausführen von Hadoop und Hive zu erfüllen.

Die Lösung lautet wie folgt:

Fügen Sie die folgende Konfiguration zu yarn-site.xml hinzu:

<Eigenschaft> 
 <name>Garn.NodeManager.Ressource.Speicher-MB</name> 
 <Wert>20480</Wert> 
</Eigenschaft> 
<Eigenschaft> 
 <name>Garn.scheduler.Minimum-Allocation-MB</name> 
 <Wert>2048</Wert> 
</Eigenschaft> 
<Eigenschaft> 
 <name>yarn.nodemanager.vmem-pmem-ratio</name> 
 <Wert>2,1</Wert> 
</Eigenschaft> 

Fahren Sie Yarn einfach herunter und starten Sie es neu! ! !

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Tutorial zur Installation und Konfiguration von Sqoop für MySQL in einer Hadoop-Clusterumgebung
  • Lösen Sie das Problem, dass sqoop Daten aus postgresql zieht und TCP/IP-Verbindungsfehler meldet
  • Implementierung von Sqoop zum Lesen von PostgreSQL-Datenbanktabellen und Importieren in HDFS
  • Lösen Sie das Problem des zunehmenden Datenvolumens nach dem Sqoop-Import in Hive
  • Sqoop implementiert den Import von PostgreSQL-Tabellen in Hive-Tabellen
  • So verwenden Sie Shell-Skripte zum Ausführen von Hive- und Sqoop-Befehlen
  • Detailliertes Tutorial zur Installation und Verwendung von Sqoop

<<:  So installieren Sie Redis im Docker, legen das Kennwort fest und stellen eine Verbindung her

>>:  Vue3 (Teil 2) Integration von Ant Design Vue

Artikel empfehlen

So verwenden Sie den Linux-Befehl „basename“

01. Befehlsübersicht Basisname - entfernt Verzeic...

Details zu Linux-Dateideskriptoren, Dateizeigern und Inodes

Inhaltsverzeichnis Linux - Dateideskriptor, Datei...

Vue implementiert Fuzzy-Abfrage-MySQL-Datenbankdaten

Inhaltsverzeichnis 1. Nachfrage 2. Umsetzung 3. E...

So verwenden Sie Cron-Jobs, um PHP regelmäßig unter Cpanel auszuführen

Öffnen Sie das cPanel-Verwaltungs-Backend. Unter ...

So führen Sie ein Python-Skript auf Docker aus

Erstellen Sie zunächst ein spezielles Projektverz...

Nicht alle Pop-ups sind betrügerisch. Tipps zum Entwerfen von Website-Pop-ups

Popup-Nachrichten sind bei inländischen Internetd...

Zusammenfassung einiger effizienter magischer Operatoren in JS

JavaScript veröffentlicht mittlerweile jedes Jahr...