Der aktuelle exasol Connector (2.1.6) ist nicht kompatibel mit dem aktuellen exasol jdbc Treiber (24.1.1)
Kontext
Wir haben eine Spark-Datenverarbeitungspipeline, die den Exasol Connector in der Version 1.4 und einen JDBC-Treiber in der Version 7 verwendet. Alles funktionierte einwandfrei, also beschlossen wir, unsere Bibliotheken auf die oben genannten Versionen zu aktualisieren, da unsere vorheriges Setup ziemlich veraltet war (404 Aktualisierungsrichtlinie nicht gefunden).
Nachdem aber folgendes ausgeführt wurde:
val df = spark
.read
.format("exasol")
.option("host", "10.210.21.191")
.option("port", "8563")
[etc]
Gab es folgenden Fehler:
24/07/15 16:29:26 INFO ExasolRDD: Sub connection with url = jdbc:exa-worker:<IP>/<FINGERPRING>:20431;workerID=0;workertoken=7362057731359728037;debug=1 and handle = 1
24/07/15 16:29:26 DEBUG ExasolConnectionManager: Making a connection using url = jdbc:exa-worker:<IP>/<FINGERPRING>:20431;workerID=0;workertoken=7362057731359728037;debug=1
24/07/15 16:29:26 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0) java.sql.SQLException: [ERROR] Connection String does not support (workerID) argument.
Aber Warum?
Wenn wir uns den Exasol spark-connector ansehen, können wir sehen, wie der Connection String erstellt wird.
val url = s"$WORKER_CONNECTION_PREFIX:$hostWithFingerprint:$port;workerID=$idx;workertoken=$token"
Der Exasol Connector erstellt ein Exasol-Client-Objekt, um alle notwendigen Informationen über den Exasol-Cluster abzurufen, einschließlich der IP jedes Knotens und des Worker-Tokens. Hier wird auch eine Worker-ID erstellt, welcher nur ein Index für die Worker sein soll.
Doch genau hier ist die Krux. Laut der Exasol-JDBC-Dokumentation gibt es keine Treibereigenschaft namens „workerid“. Dies erklärt also die oben aufgeführte Fehlermeldung, welche ein ungültiges Argument anmerkt.
Doch wieso tritt dieser Fehler erst jetzt auf und nicht schon vorher?
Erklärung
Die Validierung der Argumente des Connection Strings ist ein neues Feature, welches in der neuen Exasol-JDBC-Treiber Version hinzugefügt wurde (Changelog). Diese Validierung war in früheren Versionen nicht vorhanden, weshalb das vorherige Setup funktionierte. Folglich ist die aktuelle Exasol JDBC-Version zum Zeitpunkt der Erstellung dieses Beitrags nicht mehr mit dem Spark Exasol Connector kompatibel, da der Connector ein Argument benötigt, welches vom JDBC-Treiber nicht validiert und somit angenommen werden kann.
Die aktuell besagte Version des JDBC-Treibers wurde im März 2024 veröffentlicht, es handelt sich also um eine recht aktuelle Änderung. Da das Exasol Spark Connector Open Source Projekt selbst sehr aktive weiter entwickelt wird, ist wahrscheinlich nur eine Frage der Zeit, bis dieses Problem thematisiert und behoben wird.