
Contrairement aux autres module SAS/ACCESS, pour utiliser SAS/ACCESS avec un serveur Hadoop, un ensemble de fichiers JAR et de configuration Hadoop doit être disponible sur la machine client SAS. Cette particularité, c’est-à-dire l’absence d’un client logiciel packagé pour effectuer la communication entre SAS et la base de données, nécessite des manipulations spécifiques pour activer le mode DEBUG. En effet, Le module SAS/ACCESS interface to Hadoop utilise Java pour communiquer avec le cluster et l’activation des traces passe par le module Log4j, l’utilitaire de journalisation basé sur Java.
Activation du mode DEBUG
Pour activer le mode DEBUG il faut donc configurer ce module Log4j. Les paramètres du module java Log4j sont spécifiés dans le fichier de configuration SAS
sas.log4j.properties
Pour localiser l’emplacement du fichier de configuration sas.log4j.properties, exécutez la commande dans une session SAS :
|
proc options option=jreoptions;run; |
Vous obtenez alors le résultat suivant :
|
JREOPTIONS=( -DPFS_TEMPLATE=/home/sas/SASHOME/SASFoundation/9.4/misc/tkjava/qrpfstpt.xml -Djava.class.path=/home/sas/SASHOME/SASVersionedJarRepository/eclipse/plugins/sas.launcher.jar -Djava.security.auth.login.config=/home/sas/SASHOME/SASFoundation/9.4/misc/tkjava/sas.login.config -Djava.security.policy=/home/sas/SASHOME/SASFoundation/9.4/misc/tkjava/sas.policy -Djava.system.class.loader=com.sas.app.AppClassLoader -Dlog4j.configuration=file:/home/sas/SASHOME/SASFoundation/9.4/misc/tkjava/sas.log4j.properties -Dsas.app.class.path=/home/sas/SASHOME/SASVersionedJarRepository/eclipse/plugins/tkjava.jar -Dsas.ext.config=/home/sas/SASHOME/SASFoundation/9.4/misc/tkjava/sas.java.ext.config -Dtkj.app.launch.config=/home/sas/SASHOME/SASVersionedJarRepository/picklist ) |
Le paramètre Dlog4j.configuration indique le chemin d’accès au fichier de configuration du module Lo4j :
|
-Dlog4j.configuration=file:/home/sas/SASHOME/SASFoundation/9.4/misc/tkjava/sas.log4j.properties |
Ce fichier se divise en deux parties :
- Loggers - Utilisé pour émettre un message avec un niveau de gravité associé.
- Appenders - Utilisé pour envoyer le message à une cible de stockage.

Pour modifier le niveau de log, il faut modifier la Valeur du logger ( de ERROR à DEBUG) et modifier la sortie pour écrire dans le fichier de log /tmp/sas_log4j.log (de A1 à F1)
Remplacez :
|
log4j.rootCategory=ERROR, A1 log4j.logger.com.sas=WARN, A1 log4j.additivity.com.sas=false |
par :
|
log4j.rootCategory=DEBUG, F1 log4j.logger.com.sas=DEBUG, F1 log4j.additivity.com.sas=true |
Une fois votre session SAS relancé, pour chaque opération SAS utilisant le JAVA, les traces seront redirigées dans le fichier /tmp/sas_log4j.log.
Attention, en fonction du niveau de log, le fichier peut devenir volumineux
Activer le mode DEBUG pour valider un test
Linux
Pour ne pas écrire de façon systématique dans la log /tmp/sas_log4j.log et surcharger le système, il est possible de spécifier un fichier de configuration log4j et de ne l’utiliser qu’en phase de test ou de debug :
|
sas -nodms -jreoptions -Dlog4j.configuration=file:/opt/sas/spre/home/SASFoundation/sas.log4j.properties |
Contenu du fichier sas.log4j.properties
|
log4j.rootCategory=DEBUG, F1 log4j.appender.F1=org.apache.log4j.RollingFileAppender log4j.appender.F1.file=/tmp/sas_log4j.log log4j.appender.F1.layout=org.apache.log4j.PatternLayout log4j.appender.F1.layout.ConversionPattern=%d{MM-dd HH:mm:ss,SSS} [%t][%-5p %c{1}] - %m%n |
Windows
Sous Windows, je vous propose la méthode suivante :
1) Télécharger le fichier
debuglog4j.properties
2) Copier ce fichier dans c:\temp\
3) Lancer SAS via la commande ci-dessous :
"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" -CONFIG "C:\Program Files\SASHome\SASFoundation\9.4\nls\fr\sasv9.cfg" -jreoptions (-Dlog4j.configuration=file:c:\temp\debuglog4j.properties)
4) Un fichier
sasjava_log4j.log est alors créé dans c:\temp\
Exemple de résultats
Soumettons le code ci-dessous :
libname test hadoop uri="jdbc:hive2://myhadoop-onpenstack.fr:10000/default;principal=impala/hdp@BIG-DATA.KB5.PRIV";
Nous obtenons l’erreur suivante dans le journal SAS :
ERROR: Error trying to establish connection: Could not open client transport
with JDBC Uri:jdbc:hive2://myhadoop-onpenstack.fr:10000/default;principal=impala/hdp@BIG-DATA.KB5.PRIV: GSS initiate failed
ERROR: Error in the LIBNAME statement.
Le mode Debug permet d’obtenir plus de détails et de comprendre la cause de l’erreur « GSS initiate failed » :
01-15 02:30:55,076 [pool-4-thread-1][DEBUG TSaslTransport] - opening transport org.apache.thrift.transport.TSaslClientTransport@6c771efd
01-15 02:30:55,079 [pool-4-thread-1][ERROR TSaslTransport] - SASL negotiation failure
javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211)
at org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage(TSaslClientTransport.java:94)
at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:271)
at org.apache.thrift.transport.TSaslClientTransport.open(TSaslClientTransport.java:37)
at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:52)
at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:49)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)