Query uitvoeren op Apache Hive via het JDBC-stuurprogramma in HDInsight

Meer informatie over het gebruik van het JDBC-stuurprogramma vanuit een Java-toepassing. Als u Apache Hive query's wilt verzenden naar Apache Hadoop in Azure HDInsight. De informatie in dit document laat zien hoe u verbinding maakt via een programma en vanuit de SQuirreL SQL client.

Zie HiveJDBCInterfacevoor meer informatie over de Hive JDBC-interface.

Vereisten

JDBC-verbindingsreeks

JDBC-verbindingen met een HDInsight-cluster in Azure worden gemaakt via poort 443. Het verkeer wordt beveiligd met TLS/SSL. De openbare gateway achter de clusters leidt het verkeer om naar de poort waar HiveServer2 daadwerkelijk naar luistert. In de connection string ziet u de indeling die moet worden gebruikt voor HDInsight:

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

Vervang CLUSTERNAME door de naam van uw HDInsight-cluster.

U kunt de verbinding ook via de Ambari-gebruikersinterface > Hive > Configs > Advanced.

JDBC-connection string via Ambari

Hostnaam in connection string

Hostnaam 'CLUSTERNAME.azurehdinsight.net' in de connection string is dezelfde als uw cluster-URL. U kunt het door middel van Azure Portal.

Poort in connection string

U kunt poort 443 alleen gebruiken om verbinding te maken met het cluster vanaf sommige plaatsen buiten het virtuele Azure-netwerk. HDInsight is een beheerde service, wat betekent dat alle verbindingen met het cluster worden beheerd via een beveiligde gateway. U kunt hiveServer 2 niet rechtstreeks verbinden via poorten 10001 of 10000. Deze poorten worden niet aan de buitenwereld blootgesteld.

Verificatie

Gebruik bij het tot stand brengen van de verbinding de beheerdersnaam en het wachtwoord van het HDInsight-cluster om te verifiëren. Voer vanuit JDBC-clients, zoals SQuirreL SQL, de beheerdersnaam en het wachtwoord in clientinstellingen in.

Vanuit een Java-toepassing moet u de naam en het wachtwoord gebruiken bij het tot stand brengen van een verbinding. Met de volgende Java-code wordt bijvoorbeeld een nieuwe verbinding geopend:

DriverManager.getConnection(connectionString,clusterAdmin,clusterPassword);

Verbinding maken SQuirreL-SQL client

SQuirreL SQL is een JDBC-client die kan worden gebruikt om Hive-query's op afstand uit te voeren met uw HDInsight-cluster. In de volgende stappen wordt ervan uitgenomen dat u SQuirreL al hebt SQL.

  1. Maak een map die bepaalde bestanden bevat die moeten worden gekopieerd uit uw cluster.

  2. Vervang in het volgende script sshuser door de naam van het SSH-gebruikersaccount voor het cluster. Vervang CLUSTERNAME door de naam van het HDInsight-cluster. Wijzig vanaf een opdrachtregel uw werkmap in de map die u in de vorige stap hebt gemaakt en voer vervolgens de volgende opdracht in om bestanden te kopiëren vanuit een HDInsight-cluster:

    scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hadoop-client/{hadoop-auth.jar,hadoop-common.jar,lib/log4j-*.jar,lib/slf4j-*.jar,lib/curator-*.jar} .
    
    scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hive-client/lib/{commons-codec*.jar,commons-logging-*.jar,hive-*-*.jar,httpclient-*.jar,httpcore-*.jar,libfb*.jar,libthrift-*.jar} .
    
  3. Start de SQuirreL-SQL toepassing. Selecteer stuurprogramma's aan de linkerkant van het venster.

    Tabblad Stuurprogramma's aan de linkerkant van het venster

  4. Selecteer in de pictogrammen bovenaan het dialoogvenster Stuurprogramma's het + pictogram om een stuurprogramma te maken.

    Pictogram van SQuirreL SQL-toepassingsst stuurprogramma's

  5. Voeg in het dialoogvenster Stuurprogramma toevoegen de volgende informatie toe:

    Eigenschap Waarde
    Naam Hive
    Voorbeeld-URL jdbc:hive2://localhost:443/default;transportMode=http;ssl=true;httpPath=/hive2
    Extra klassepad Gebruik de knop Toevoegen om alle JAR-bestanden toe te voegen die u eerder hebt gedownload.
    Klassenaam org.apache.hive.jdbc.HiveDriver

    dialoogvenster stuurprogramma toevoegen met parameters

    Selecteer OK om deze instellingen op te slaan.

  6. Selecteer aan de linkerkant van het venster SQuirreL SQL aliassen. Selecteer vervolgens het pictogram + om een verbindingsalias te maken.

    Dialoogvenster 'SQuirreL SQL alias toevoegen'

  7. Gebruik de volgende waarden voor het dialoogvenster Alias toevoegen:

    Eigenschap Waarde
    Naam Hive in HDInsight
    Stuurprogramma Gebruik de vervolgkeuzerij om het Hive-stuurprogramma te selecteren.
    URL jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2. Vervang CLUSTERNAME door de naam van uw HDInsight-cluster.
    Gebruikersnaam De naam van het aanmeldingsaccount voor het cluster voor uw HDInsight-cluster. De standaardwaarde is admin.
    Wachtwoord Het wachtwoord voor het aanmeldingsaccount voor het cluster.

    dialoogvenster Alias toevoegen met parameters

    Belangrijk

    Gebruik de knop Testen om te controleren of de verbinding werkt. Wanneer Verbinding maken het dialoogvenster Hive in HDInsight wordt weergegeven, selecteert u Verbinding maken de test uit te voeren. Als de test is geslaagd, ziet u het dialoogvenster Verbinding gemaakt. Zie Problemen oplossen als er een fout optreedt.

    Als u de verbindingsalias wilt opslaan, gebruikt u de knop OK onder aan het dialoogvenster Alias toevoegen.

  8. Selecteer hive Verbinding maken HDInsight in de SQL boven aan SQuirreL. Selecteer Verbinding maken wanneer hierom wordt gevraagd.

    dialoogvenster verbinding met parameters

  9. Zodra u verbinding hebt, voert u de volgende query in het SQL queryvenster in en selecteert u vervolgens het pictogram Uitvoeren (een actief persoon). In het resultatengebied moeten de resultaten van de query worden weer geven.

    select * from hivesampletable limit 10;
    

    dialoogvenster sql-query, inclusief resultaten

Verbinding maken van een Java-voorbeeldtoepassing

Een voorbeeld van het gebruik van een Java-client om een query uit te voeren op Hive in HDInsight is beschikbaar op https://github.com/Azure-Samples/hdinsight-java-hive-jdbc . Volg de instructies in de opslagplaats om het voorbeeld te bouwen en uit te voeren.

Problemen oplossen

Er is een onverwachte fout opgetreden bij het openen van SQL verbinding

Symptomen: wanneer u verbinding maakt met een HDInsight-cluster met versie 3.3 of hoger, ontvangt u mogelijk een foutbericht dat er een onverwachte fout is opgetreden. De stack-trace voor deze fout begint met de volgende regels:

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)

Oorzaak: Deze fout wordt veroorzaakt door een oudere versie van het bestand commons-codec.jar in SQuirreL.

Oplossing: gebruik de volgende stappen om deze fout op te lossen:

  1. Sluit SQuirreL af en ga vervolgens naar de map waar SQuirreL op uw systeem is geïnstalleerd, bijvoorbeeld C:\Program Files\squirrel-sql-4.0.0\lib . Vervang in de map SquirreL onder de map de bestaande commons-codec.jar door de map die u hebt gedownload lib uit het HDInsight-cluster.

  2. Start SQuirreL opnieuw. De fout zou niet meer moeten optreden wanneer u verbinding maakt met Hive in HDInsight.

Verbinding verbroken door HDInsight

Symptomen: wanneer u probeert een enorme hoeveelheid gegevens (bijvoorbeeld meerdere TB's) via JDBC/ODBC te downloaden, wordt de verbinding onverwacht verbroken door HDInsight tijdens het downloaden.

Oorzaak: deze fout wordt veroorzaakt door de beperking op gatewayknooppunten. Bij het verkrijgen van gegevens uit JDBC/ODBC moeten alle gegevens via het gateway-knooppunt worden doorgeven. Een gateway is echter niet ontworpen om een enorme hoeveelheid gegevens te downloaden, dus de gateway kan de verbinding sluiten als deze het verkeer niet kan verwerken.

Oplossing: vermijd het gebruik van het JDBC-/ODBC-stuurprogramma om enorme hoeveelheden gegevens te downloaden. Kopieer gegevens in plaats daarvan rechtstreeks vanuit blobopslag.

Volgende stappen

Nu u hebt geleerd hoe u JDBC gebruikt om met Hive te werken, gebruikt u de volgende koppelingen om andere manieren te verkennen om met hiv-Azure HDInsight.