Eseguire una query Hive tramite il driver JDBC in HDInsight

Informazioni su come usare il driver JDBC da un'applicazione Java per inviare query Hive a Hadoop in Azure HDInsight. Questo documento illustra come eseguire la connessione a livello di programmazione e dal client SQuirrel SQL.

Per altre informazioni sull'interfaccia Hive JDBC, vedere HiveJDBCInterface.

Prerequisiti

  • Un cluster Hadoop in HDInsight. Sono adatti i cluster basati su Linux o su Windows.

    Importante

    Linux è l'unico sistema operativo usato in HDInsight versione 3.4 o successiva. Per altre informazioni, vedere Ritiro di HDInsight 3.3.

  • SQuirreL SQL. SQuirreL è un'applicazione client JDBC.

  • Java Developer Kit (JDK) versione 7 o successiva.

  • Apache Maven. Maven è un sistema di compilazione per progetti Java, usato dal progetto associato a questo articolo.

Stringa di connessione JDBC

Le connessioni JDBC a un cluster HDInsight in Azure vengono stabilite tramite la porta 443 e il traffico viene protetto usando SSL. Il gateway pubblico dietro cui si trovano i cluster reindirizza il traffico alla porta su cui HiveServer2 è attualmente in ascolto. La stringa di connessione seguente mostra il formato da usare per HDInsight:

jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2

Sostituire CLUSTERNAME con il nome del cluster HDInsight.

Autenticazione

Quando si stabilisce la connessione, è necessario usare il nome amministratore e la password del cluster HDInsight per l'autenticazione nel gateway cluster. Durante la connessione dai client JDBC come SQuirreL SQL, è necessario immettere il nome amministratore e la password nelle impostazioni del client.

Da un'applicazione Java è necessario usare il nome e la password quando viene stabilita una connessione. Ad esempio, il codice Java seguente apre una nuova connessione usando la stringa di connessione, il nome amministratore e la password:

DriverManager.getConnection(connectionString,clusterAdmin,clusterPassword);

Connettersi con il client SQuirreL SQL

SQuirreL SQL è un client JDBC che può essere usato per eseguire in modalità remota query Hive con il cluster HDInsight. I passaggi seguenti presuppongono che sia già stato installato SQuirreL SQL.

  1. Copiare i driver JDBC Hive dal cluster HDInsight.

    • Per la versione cluster 3.5 0 3.6 di HDInsight basato su Linux seguire questa procedura per scaricare i file con estensione jar necessari.

      1. Creare la directory che contiene i file. Ad esempio, mkdir hivedriver.

      2. Dalla riga di comando usare i comandi seguenti per copiare i file dal cluster HDInsight:

        scp USERNAME@CLUSTERNAME:/usr/hdp/current/hadoop-client/hadoop-common.jar .
        scp USERNAME@CLUSTERNAME:/usr/hdp/current/hadoop-client/hadoop-auth.jar .
        scp USERNAME@CLUSTERNAME:/usr/hdp/current/hadoop-client/lib/log4j-*.jar .
        scp USERNAME@CLUSTERNAME:/usr/hdp/current/hadoop-client/lib/slf4j-*.jar .
        scp USERNAME@CLUSTERNAME:/usr/hdp/current/hive-client/lib/hive-*-1.2*.jar .
        scp USERNAME@CLUSTERNAME:/usr/hdp/current/hive-client/lib/httpclient-*.jar .
        scp USERNAME@CLUSTERNAME:/usr/hdp/current/hive-client/lib/httpcore-*.jar .
        scp USERNAME@CLUSTERNAME:/usr/hdp/current/hive-client/lib/libthrift-*.jar .
        scp USERNAME@CLUSTERNAME:/usr/hdp/current/hive-client/lib/libfb*.jar .
        scp USERNAME@CLUSTERNAME:/usr/hdp/current/hive-client/lib/commons-logging-*.jar .
        

        Sostituire USERNAME con il nome dell'account utente SSH per il cluster. Sostituire CLUSTERNAME con il nome del cluster HDInsight.

    • Per HDInsight basato su Windows, seguire questa procedura per scaricare i file JAR.

      1. Nel portale di Azure selezionare il cluster HDInsight e quindi selezionare l'icona Desktop remoto.

        Icona Desktop remoto

      2. Nella sezione Desktop remoto fare clic sul pulsante Connetti per connettersi al cluster. Se Desktop remoto non è abilitato, usare il modulo per specificare un nome utente e una password, quindi selezionare Abilita per abilitare Desktop remoto per il cluster.

        Sezione Desktop remoto

        Dopo avere selezionato Connetti verrà scaricato un file con estensione rdp. Usare questo file per avviare il client Desktop remoto. Quando richiesto, usare il nome utente e la password immessi per Accesso desktop remoto.

      3. Una volta stabilita la connessione, copiare i file seguenti dalla sessione Desktop remoto nel computer locale. Inserirli in una directory locale denominata hivedriver.

        • C:\apps\dist\hive-0.14.0.2.2.9.1-7\lib\hive-jdbc-0.14.0.2.2.9.1-7-standalone.jar
        • C:\apps\dist\hadoop-2.6.0.2.2.9.1-7\share\hadoop\common\hadoop-common-2.6.0.2.2.9.1-7.jar
        • C:\apps\dist\hadoop-2.6.0.2.2.9.1-7\share\hadoop\common\lib\hadoop-auth-2.6.0.2.2.9.1-7.jar

          Nota

          I numeri di versione inclusi nei percorsi e i nomi file potrebbero essere diversi per il cluster in uso.

      4. Disconnettere la sessione di Desktop remoto al termine della copia dei file.

  2. Avviare l'applicazione SQuirreL SQL. Nella parte sinistra della finestra selezionare Drivers (Driver).

    Scheda Drivers sul lato sinistro della finestra

  3. Nella parte superiore della finestra di dialogo Drivers (Driver) selezionare l'icona + per creare un driver.

    Icone Drivers

  4. Nella finestra di dialogo di aggiunta del driver aggiungere le informazioni seguenti:

    • Name (Nome): Hive
    • Example URL (URL di esempio): jdbc:hive2://localhost:443/default;transportMode=http;ssl=true;httpPath=/hive2
    • Extra Class Path (Percorso classe extra): usare il pulsante Add (Aggiungi) per aggiungere i file JAR scaricati in precedenza
    • Class Name (Nome classe): org.apache.hive.jdbc.HiveDriver

    finestra di dialogo add driver

    Fare clic su OK per salvare le impostazioni.

  5. Nella parte sinistra della finestra di SQL SQuirreL selezionare Aliases (Alias). Fare quindi clic sull'icona + per creare un alias di connessione.

    aggiungere un nuovo alias

  6. Usare i valori seguenti per la finestra di dialogo Add Alias (Aggiungi alias).

    • Name (Nome): Hive on HDInsight

    • Driver: usare l'elenco a discesa per selezionare il driver Hive

    • URL: jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2

      Sostituire CLUSTERNAME con il nome del cluster HDInsight.

    • User Name (Nome utente): nome dell'account di accesso per il cluster HDInsight. Il valore predefinito è admin.

    • Password: password per l'account di accesso del cluster.

    finestra di dialogo add alias

    Usare il pulsante Test per verificare il funzionamento della connessione. Quando viene visualizzata la finestra di dialogo Connect to: Hive on HDInsight (Connetti a: Hive in HDInsight), selezionare Connect (Connetti) per eseguire il test. Se il test ha esito positivo, verrà visualizzata la finestra di dialogo Connection successful (Connessione riuscita). Se si verifica un errore, vedere Risoluzione dei problemi.

    Usare il pulsante OK nella parte inferiore della finestra di dialogo Add Alias (Aggiungi alias) per salvare l'alias di connessione.

  7. Nell'elenco a discesa Connect to (Connetti a) nella parte superiore di SQL SQuirreL selezionare Hive on HDInsight (Hive in HDInsight). Quando richiesto, selezionare Connect (Connetti).

    finestra di dialogo di connessione

  8. Dopo avere stabilito la connessione, immettere la query seguente nella finestra di dialogo di query SQL e quindi selezionare l'icona Run (Esegui). Nell'area dei risultati dovrebbero comparire i risultati della query.

     select * from hivesampletable limit 10;
    

    finestra della query sql, con i risultati

Connettersi da un'applicazione Java di esempio

Un esempio dell'uso di un client Java per eseguire una query Hive in HDInsight è disponibile all'indirizzo https://github.com/Azure-Samples/hdinsight-java-hive-jdbc. Seguire le istruzioni del repository per compilare ed eseguire l'esempio.

Risoluzione dei problemi

Errore imprevisto durante il tentativo di aprire una connessione SQL

Sintomi: quando ci si connette a un cluster HDInsight versione 3.3 o superiore, un errore potrebbe segnalare che si è verificato un errore imprevisto. L'analisi dello stack dell'errore inizia con le righe seguenti:

java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.<init>(I)V
at java.util.concurrent.FutureTas...(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:206)

Causa: questo errore è causato da una versione precedente del file commons-codec.jar incluso con SQuirreL.

Soluzione: per risolvere l'errore eseguire questa procedura:

  1. Scaricare il file commons-codec.jar dal cluster HDInsight.

     scp USERNAME@CLUSTERNAME:/usr/hdp/current/hive-client/lib/commons-codec*.jar ./commons-codec.jar
    
  2. Uscire da SQuirreL e passare alla directory in cui è installato SQuirreL nel sistema. Nella directory lib della directory di SquirreL sostituire il file commons-codec.jar esistente con quello scaricato dal cluster HDInsight.

  3. Riavviare SQuirreL. L'errore non dovrebbe più verificarsi quando ci si connette a Hive in HDInsight.

Passaggi successivi

Dopo avere appreso come usare JDBC con Hive, vedere i collegamenti seguenti per scoprire altre modalità di utilizzo di Azure HDInsight.