2017-10-21 2 views
2

In der NameNode von CDH, wenn ich die Abfrage über odbc Skript (PHP/Perl oder Python), kann ich fetchAll Ergebnisse (9.2M) in einer variablen in etwa 30 Sekunden, aber wenn ich mit der gleichen Skript/Abfrage auf einem anderen Remote-2-Server versuchte, war die Ausführungszeit in dem ersten Server 28 min und in der zweiten 17 min.Impala ODBC/JDBC schlechte Leistung - Zeilen fetch ist sehr langsam von einem Remote-Server im Vergleich zu NN

Um die Annahme auszuschließen, dass es ein Netzwerkgeschwindigkeitsproblem ist, hole ich das Ergebnis für eine Datei und dann kopierte ich es mit dem Befehl scp auf den ersten Remote-Server und endete in ~ 40 Sekunden.

Was beobachte ich in Query Info in CM, dass es zwischen den Themen einem großen Unterschied ist: Netzwerkwartezeit Werte in den 3 Anfragen senden:
in NN-Abfrage: 9.40s
1. Remote-Server : 16.7m
2. Remote-Server: 26,8

Und ich versuche auch einen Java-Skript mit Impala JDBC, aber die Ergebnisse in NN stimulieren bereits nicht fortzusetzen.

Aber bis jetzt kann ich nicht finden, wo das Problem ist und wie ich es lösen kann.
NB: Ich arbeite an CDH 5.12.0/Impala 2.9.0, ich installierte Impala ODBC 2.5.37.1014.

Antwort

1

Die verwendete JDBC-Connector-Version wird nicht erwähnt.

Es gibt möglicherweise mehr als einen Server in Ihrem Cluster, auf dem Impala-Daemons ausgeführt werden. Bitte nehmen Sie die entsprechenden Änderungen in Ihrer JDBC-Verbindungs-URL vor und überprüfen Sie die Leistung auch auf diesen Servern.

Gerade falls Sie in der Dokumentation entnehmen verpasst (https://www.cloudera.com/documentation/enterprise/5-12-x/topics/impala_jdbc.html), achten Sie auf diesem Extrakt:

die neuesten JDBC-Treiber, entsprechend 0,13 bis Hive bietet erhebliche Leistungsverbesserungen für Impala-Abfragen, die zurückkehren große Ergebnismengen. Impala 2.0 und höher sind mit dem Hive 0.13 Treiber kompatibel. Wenn Sie bereits einen älteren JDBC-Treiber installiert haben und Impala 2.0 oder höher ausführen, sollten Sie einen Upgrade auf den neuesten Hive JDBC-Treiber durchführen, um die beste Leistung mit JDBC-Anwendungen zu erzielen.

Da Sie eine Remote-Computer verwenden Impala zuzugreifen, auf diese Informationen beziehen sich auch:

Wenn Sie JDBC-fähigen Anwendungen auf Hosts außerhalb des CDH Cluster verwenden, können Sie nicht die CDH verwenden Installationsprozedur auf den Nicht-CDH Hosts. Installieren Sie den JDBC-Treiber auf mindestens einem CDH-Host .... Dann laden Sie die JAR-Dateien auf jeden Client-Rechner, der JDBC mit Impala verwenden wird, ...

Falls noch nicht geschehen, aktualisieren Sie den JDBC-Connector und vergewissern Sie sich, dass alle Impalad-Instanzen ausgeführt werden. Vergleichen Sie dann die Leistungsergebnisse von ODBC und JDBC.

Dieser Link ist auch wert beziehen: https://www.cloudera.com/documentation/enterprise/5-12-x/topics/impala_troubleshooting.html

Update 1:

Referenz # 1: https://community.cloudera.com/t5/Interactive-Short-cycle-SQL/Impala-JDBC-10x-Slower-Vs-Shell/m-p/51779

Wie in der Referenz empfohlen, versuchen Sie die folgenden Parameter an die JDBC-Verbindung Hinzufügen Zeichenfolge und überprüfen Sie das Protokoll:

; LogLevel = 6; LogPath =/path/to/directory

Referenz # 2: https://issues.apache.org/jira/browse/IMPALA-2651 Sie möglicherweise die unten Einstellung berücksichtigen:

SET disable_codegen = true;

Update 2: Ich denke, man schon diese unten genannten Gläser in mindestens einem Impala-Server haben, in Ihrem Cluster.

commons-logging-X.X.X.jar 
hadoop-common.jar 
hive-common-X.XX.X-cdhX.X.X.jar 
hive-jdbc-X.XX.X-cdhX.X.X.jar 
hive-metastore-X.XX.X-cdhX.X.X.jar 
hive-service-X.XX.X-cdhX.X.X.jar 
httpclient-X.X.X.jar 
httpcore-X.X.X.jar 
libfb303-X.X.X.jar 
libthrift-X.X.X.jar 
log4j-X.X.XX.jar 
slf4j-api-X.X.X.jar 
slf4j-logXjXX-X.X.X.jar 

Bitte kopieren Sie diese Gläser an die Maschine, von wo aus Sie versuchen, Impala über JDBC-Code zuzugreifen. Stellen Sie sicher, dass diese Dateien in Ihrem Klassenpfad sind, und führen Sie den JDBC-Code aus.

+0

Ich werde das testen. –

+0

Ich kann Hive-JDBC in meinem Centos 6.9 nicht installieren. Es gibt: Kein Paket Hive-JDBC verfügbar. Rmq: Ich glaube nicht, dass ich von den Referenz # 1 & # 2 betroffen bin, weil meine Abfragen ohne Fehler ausgeführt werden. Das Problem besteht in fetchAll-Zeilen, die auf einem externen Clusterserver sehr langsam sind. –

+1

Aktualisierte die Antwort. Bei der Untersuchung geht es um die Verzögerung, und die Protokolle könnten zeigen, was Zeit braucht. – Marco99

Verwandte Themen