Database

SAS Viya und Hadoop: Behebung des TimeoutException-Verbindungsfehlers beim Erstellen einer Caslib

Simon 9 Aufrufe

Die Integration von Massendaten zwischen SAS© Viya und einem Hadoop-Cluster ist ein gängiger Vorgang, kann aber manchmal auf subtile Konfigurationsprobleme stoßen. Eines der häufigsten Hindernisse bei der Definition einer Caslib ist das Auftreten eines Zeitüberschreitungsfehlers (Timeout) unmittelbar nach der Ausführung des Verbindungscodes.

Dieser Artikel beschreibt die Symptome dieses Fehlers und stellt eine bewährte Lösung zur Stabilisierung der Verbindung vor.

SAS Viya und Hadoop: Behebung des TimeoutException-Verbindungsfehlers beim Erstellen einer Caslib -

Das Symptom

Bei der Ausführung einer CASLIB-Anweisung zur Verbindung mit Hadoop (oft über Hive) wird der Prozess angehalten und gibt die folgenden Fehlermeldungen im Protokoll (Log) zurück:

ERROR: The connection to the data source driver failed. ERROR: General error java.util.concurrent.TimeoutException ERROR: Function failed. ERROR: The action stopped due to errors.

Dieses Problem tritt typischerweise bei der Verwendung einer expliziten Verbindungszeichenfolge auf, die die Option uri= enthält, wie im folgenden Beispiel:

1/* Code provoquant l'erreur */
2caslib hdlib datasource=(
3 srctype="hadoop",
4 dataTransferMode="serial",
5 username="{votre_user}",
6 password="{votre_mdp}",
7 /* L'option URI ci-dessous est souvent la cause du conflit */
8 uri="jdbc:hive2://{host}:2181...;serviceDiscoveryMode=zooKeeper;...",
9 hadoopjarpath="/sas_mirror/hadoopfiles/lib",
10 hadoopconfigdir="/sas_mirror/hadoopfiles/conf",
11 schema="default"
12);

Die Analyse

Der Fehler java.util.concurrent.TimeoutException deutet darauf hin, dass der SAS©-Client die Verbindung zum Cluster nicht innerhalb der vorgegebenen Zeit herstellen konnte. Obwohl man an ein Netzwerkproblem oder eine Nichtverfügbarkeit des Clusters denken könnte, liegt die eigentliche Ursache oft in einer Überkonfiguration.

Wenn Sie beides bereitstellen:

  1. Den Pfad zu den Hadoop-Konfigurationsdateien (hadoopconfigdir, das XML-Dateien wie hive-site.xml, core-site.xml usw. enthält).

  2. Eine explizite JDBC-Verbindungszeichenfolge (uri=).

kann es zu einem Konflikt oder einer Redundanz bei der Methode zur Erkennung der Zookeeper-Dienste kommen. SAS© ist in der Lage, die Zookeeper-Konfiguration direkt aus Ihren XML-Dateien zu extrahieren, was die Option uri überflüssig macht.

Die Lösung

Um dieses Problem zu lösen, besteht die empfohlene Methode darin, die Caslib-Deklaration zu vereinfachen. Es ist erforderlich, die Option uri= zu entfernen und SAS© die Verbindung allein auf der Grundlage der Konfigurationsdateien und Hadoop-Binärdateien verwalten zu lassen.

Hier ist der korrigierte und funktionierende Code:

1cas mySession sessopts=(caslib=casuser timeout=1800 locale="en_US");
2 
3caslib hdlib datasource=(
4 srctype="hadoop",
5 dataTransferMode="serial",
6 username="{votre_user}",
7 password="{votre_mdp}",
8 /* Suppression de l'option URI */
9 hadoopjarpath="/sas_mirror/hadoopfiles/lib",
10 hadoopconfigdir="/sas_mirror/hadoopfiles/conf",
11 schema="default"
12);
13 
14PROC CASUTIL;
15 list files incaslib="hdlib";
16RUN;

Indem kein Server und keine URI angegeben werden, verwendet SAS© die Informationen im Ordner, auf den hadoopconfigdir verweist, um den Zookeeper-Cluster zu lokalisieren und die Verbindung korrekt herzustellen.

Zusätzlicher Tipp: Umgang mit einem langsamen Cluster

Wenn Sie nach Anwendung der obigen Korrektur immer noch Timeout-Fehler erhalten (insbesondere bei stark ausgelasteten Clustern), ist es möglich, dass die Standard-Zeitüberschreitung zu kurz ist.

Die Standard-Verbindungs-Timeout für Hadoop beträgt normalerweise 30 Sekunden. Sie können diesen Wert erhöhen, indem Sie die Option login_timeout hinzufügen:

1caslib hdlib datasource=(
2 ...
3 login_timeout=60 /* Augmentation du délai à 60 secondes */
4 ...
5);