Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Big Data Discussion :

Connection a hive depuis r studio


Sujet :

Big Data

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : octobre 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Connection a hive depuis r studio
    Bonjour,
    Je suis en train de configurer une connexion a hive, avec kerberos habilité, depuis rstudio local. J'ai téléchargé les jars sur mon pc.
    La chaîne de connexion est la suivante:
    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    drv1 <- JDBC("org.apache.hadoop.hive.jdbc.HiveDriver",
                list.files("C:/Users/XXXX/Desktop/JAR",pattern="jar$",all.files=TRUE,full.names=T)
    )
     
    connex <- dbConnect(drv,"jdbc:hive2://IPADRESS:PORT/default;AuthMech=1;KrbRealm=MY_REALM;KrbHostFQDN=MY_HOST;KrbServiceName=hive")

    J'obtiens ce message d'erreur:
    Error in .jcall(drv@jdrv, "Ljava/sql/Connection;", "connect", as.character(url)[1], :
    java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://XXXX:XX/default;AuthMech=1;KrbRealm=REALM;KrbHostFQDN=HOST;KrbServiceName=hive: Peer indicated failure: Unsupported mechanism type PLAIN.
    Pourriez-vous m'aider à trouver la solution s'il vous plait?
    Merci

  2. #2
    Expert Oracle confirmé

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    mars 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : mars 2003
    Messages : 412
    Points : 861
    Points
    861
    Par défaut
    Bonjour,

    Si je comprends bien, d'un côté vous diposez d'un cluster Hadoop qui est Kerbérisé.

    De l'autre côté, vous avez un PC sur lequel R Studio est installé en local.

    Puisque votre PC est une machine hors du cluster, il ne faut pas utiliser Kerberos (lequel sert uniquement à s'authentifier sur un des noeuds du cluster), mais se connecter à distance en passant par la Gateway Knox.

    Il faut donc vous rapprocher de votre administrateur Hadoop qui va vous créer sous Ranger une police Knox (au moins pour le service Hive), afin que vous puissiez vous connecter au cluster Hadoop, et qui va vous communiquer la bonne URL JDBC à utiliser dans votre code R.

    Quelle distribution de Hadoop utilisez-vous ? Cloudera, Hortonworks, MapR ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : octobre 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup Rouardg. Je ne comprends pas exactement comment fonctionne une police Knox mais je vais en parler à l'admin. Merci encore.
    Salut!

  4. #4
    Expert Oracle confirmé

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    mars 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : mars 2003
    Messages : 412
    Points : 861
    Points
    861
    Par défaut
    C'est simple

    La police Knox permet à des utilisateurs ou à des groupes d'utilisateurs d’accéder à certains services du cluster.

    Dans ton cas, comme tu fais des requêtes Hive, il faut que le service Hive soit déclaré au niveau de cette police Knox.

    Attention, il faut bien comprendre que c'est une police de type Knox, qui ne te donne que l'autorisation d'accéder à Hive. Après dans Ranger, il y a d'autres polices, notamment une police Hive pour pouvoir avoir des droits sur des bases Hive, et aussi une police HDFS puisque les bases Hive et les tables Hive utilisent l'HDFS comme système de stockage.

    Mais tout cela est encore plus compliqué, car dépend si l'impersonnation est activé ou pas au niveau de Hive (avec le paramètre doAs) et aussi de l'HDFS (avec les Proxy Users).

    C'est pour cela qu'il faut se rapprocher de son administrateur Hadoop.

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : octobre 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci Rouardg. J'ai un peu modifié le mécanisme de connexion. Je t'explique un peu la structure. Je veux accéder a l'information (objets et vues) stockée sur hadoop. J'utilise hue ou sqldbx (a travers un ticket kerberos) pour accéder à cette information a partir de requêtes hive. Je peux aussi accéder au serveur a partir d'un OS linux. J'ai la version R 3.3 installée sur le système d'exploitation. Ma tentative de connexion est la suivante:
    J'accède au cluster où se trouve les tables à travers linux
    Je m'identifie sur Kerberos avec la commande kinit
    je verifie que je peux accéder aux objet par requêtes hive (reussi)
    j'ouvre une console R et j'essaie de me connecter avec cette ligne de commande:
    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    library("DBI")
    library("rJava")
    library("RJDBC")
    drv <- JDBC("org.apache.hive.jdbc.HiveDriver", "/opt/mapr/hive/hive-0.13/lib/hive-jdbc-0.13.0-mapr-1410.jar")
    for(jar in list.files('/opt/mapr/hive/hive-0.13/lib/')){ .jaddClassPath(paste("/opt/mapr/hive/hive-0.13/lib/",jar,sep=""))}
    for(jar in list.files('/opt/mapr/lib')){ .jaddClassPath(paste("/opt/mapr/lib/",jar,sep=""))}
    conn <- dbConnect(drv, "jdbc:hive2://IPADRESS:PORT/default", "USER", "PASSWORD")
    dbGetQuery(conn, "select * from table limit 5")
    j'obtiens une erreur de class not found au moment de créer le driver
    Dois-je télécharger les jars directement sur le serveur?
    Qu'en penses tu?

  6. #6
    Expert Oracle confirmé

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    mars 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : mars 2003
    Messages : 412
    Points : 861
    Points
    861
    Par défaut
    Franchement, je ne suis pas développeur, et donc pas spécialiste.

    Mais si je regarde ces articles :
    https://mapr.com/support/s/article/H...language=en_US
    https://henning.kropponline.de/2014/07/13/hive-r/

    alors oui il faut récupérer vos Jars sur un des noeuds du cluster, et les copier en local sur votre serveur.

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : octobre 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    J'ai un peu modifié le code R:
    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    library("DBI")
    library("rJava")
    library("RJDBC")
    require("RJDBC")
    ###library("kinitr")
     
    drv1 <- RJDBC::JDBC("com.cloudera.hive.jdbc4.HS1Driver",
                 list.files("C:/Users/****/Desktop/Goodcon",pattern="jar$",all.files=TRUE,full.names=T)
    )
    con <- dbConnect(drv1,"jdbc:hive2://IP/bd_NAME;AuthMech=1;KrbRealm=****;KrbHostFQDN=******;KrbServiceName=hive")

    J'obtiens le message d'erreur suivant:
    Error in .verify.JDBC.result(jc, "Unable to connect JDBC to ", url) :
    Unable to connect JDBC to jdbc:hive2://xxxxxxx:10000/bd_name;AuthMech=1;KrbRealm=xxxxx;KrbHostFQDN=xxxxxxxx;KrbServiceName=hive
    Je n'arrive pas à savoir si c'est un problème de driver ou si mon url de connexion est incorrect. Le connecteur drv1 utilise les jar que j'ai téléchargés depuis le site de cloudera.
    Help please! Merci.

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : octobre 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Salut à tous,
    J'ai pu résoudre ce problème de connexion. Voici le code qui a fonctionné:

    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    library("DBI")
    library("rJava")
    library("RJDBC")
    .jinit()
    .jaddClassPath(Sys.glob(strsplit(system("hadoop classpath",int=T),":",T)[[1]]))
    conf = .jnew("org.apache.hadoop.conf.Configuration")
    conf$set("hadoop.security.authentication", "Kerberos") 
    ugi = J("org.apache.hadoop.security.UserGroupInformation")
    ugi$setConfiguration(conf) 
    ugi$loginUserFromKeytab("user@XXXX.COM", "/home/user/user.keytab") 
    .jaddClassPath(Sys.glob("/opt/cloudera/parcels/CDH/lib/hive/lib/*.jar"))
    j=JDBC("org.apache.hive.jdbc.HiveDriver")
    c=dbConnect(j, "jdbc:hive2://SERVER:10000/bd_location;principal=hive/XXXX@XXXX.COM;KrbHostFQDN=myhost;KrbServiceName=hive;")

    J'aimerais faire la même connexion avec python. Quelqu'un aurait-il une idée de par où commencer? Merci!

Discussions similaires

  1. Impossible à se connecter au TAC depuis Talend Studio
    Par BekaBaka dans le forum Talend
    Réponses: 2
    Dernier message: 28/02/2019, 15h55
  2. connecter a hive depuis un code python
    Par ghizlanehrk dans le forum Big Data
    Réponses: 1
    Dernier message: 12/07/2018, 13h17
  3. Réponses: 9
    Dernier message: 18/04/2018, 10h55
  4. Réponses: 0
    Dernier message: 18/11/2013, 11h36
  5. se connecter à un as400 depuis linux
    Par durnik dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 28/05/2004, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo