Dotazování Apache Hivu prostřednictvím ovladače JDBC v HDInsightuQuery Apache Hive through the JDBC driver in HDInsight

Naučte se používat ovladač JDBC z aplikace Java.Learn how to use the JDBC driver from a Java application. Odeslání dotazů Apache Hive do Apache Hadoop ve službě Azure HDInsight.To submit Apache Hive queries to Apache Hadoop in Azure HDInsight. Informace v tomto dokumentu ukazují, jak se připojit prostřednictvím kódu programu a z klienta SQL SQuirreL.The information in this document demonstrates how to connect programmatically, and from the SQuirreL SQL client.

Další informace o rozhraní JDBC podregistru najdete v tématu HiveJDBCInterface.For more information on the Hive JDBC Interface, see HiveJDBCInterface.

PožadavkyPrerequisites

Připojovací řetězec JDBCJDBC connection string

Připojení JDBC k clusteru HDInsight v Azure se provádí přes port 443.JDBC connections to an HDInsight cluster on Azure are made over port 443. Přenosy se zabezpečují pomocí protokolu TLS/SSL.The traffic is secured using TLS/SSL. Veřejná brána, kterou cluster zaznamená, přesměruje provoz na port, na kterém HiveServer2 skutečně naslouchá.The public gateway that the clusters sit behind redirects the traffic to the port that HiveServer2 is actually listening on. Následující připojovací řetězec ukazuje formát, který se má použít pro HDInsight:The following connection string shows the format to use for HDInsight:

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

Parametr CLUSTERNAME nahraďte názvem vašeho clusteru HDInsight.Replace CLUSTERNAME with the name of your HDInsight cluster.

Nebo můžete získat připojení prostřednictvím uživatelského rozhraní Ambari > > konfiguracích registru > Upřesnit.Or you can get the connection through Ambari UI > Hive > Configs > Advanced.

Získání připojovacího řetězce JDBC prostřednictvím Ambari

Název hostitele v připojovacím řetězciHost name in connection string

Název hostitele CLUSTERNAME.azurehdinsight.net v připojovacím řetězci je stejný jako adresa URL clusteru.Host name 'CLUSTERNAME.azurehdinsight.net' in the connection string is the same as your cluster URL. Můžete ji získat prostřednictvím Azure Portal.You can get it through Azure portal.

Port v připojovacím řetězciPort in connection string

Port 443 můžete použít jenom pro připojení ke clusteru z některých míst mimo virtuální síť Azure.You can only use port 443 to connect to the cluster from some places outside of the Azure virtual network. HDInsight je spravovaná služba, která znamená, že všechna připojení ke clusteru se spravují přes zabezpečenou bránu.HDInsight is a managed service, which means all connections to the cluster are managed via a secure Gateway. K HiveServer 2 se nemůžete připojit přímo na portech 10001 nebo 10000.You can't connect to HiveServer 2 directly on ports 10001 or 10000. Tyto porty nejsou vystavené vně.These ports aren't exposed to the outside.

AuthenticationAuthentication

Při navazování připojení použijte k ověření název správce clusteru HDInsight a heslo.When establishing the connection, use the HDInsight cluster admin name and password to authenticate. Z JDBC klientů, jako je SQuirreL SQL, zadejte do nastavení klienta jméno správce a heslo.From JDBC clients such as SQuirreL SQL, enter admin name and password in client settings.

Z aplikace Java je nutné použít při navazování připojení jméno a heslo.From a Java application, you must use the name and password when establishing a connection. Například následující kód Java otevírá nové připojení:For example, the following Java code opens a new connection:

DriverManager.getConnection(connectionString,clusterAdmin,clusterPassword);

Připojení pomocí klienta SQL SQuirreLConnect with SQuirreL SQL client

SQuirreL SQL je klient JDBC, který se dá použít pro vzdálenou spouštění dotazů na podregistry v clusteru HDInsight.SQuirreL SQL is a JDBC client that can be used to remotely run Hive queries with your HDInsight cluster. V následujících krocích se předpokládá, že jste už nainstalovali SQuirreL SQL.The following steps assume that you have already installed SQuirreL SQL.

  1. Vytvořte adresář, který bude obsahovat určité soubory, které se mají zkopírovat z clusteru.Create a directory to contain certain files to be copied from your cluster.

  2. V následujícím skriptu nahraďte sshuser názvem uživatelského účtu SSH pro daný cluster.In the following script, replace sshuser with the SSH user account name for the cluster. Nahraďte CLUSTERNAME názvem clusteru HDInsight.Replace CLUSTERNAME with the HDInsight cluster name. Z příkazového řádku změňte pracovní adresář na ten vytvořený v předchozím kroku a potom zadejte následující příkaz ke zkopírování souborů z clusteru HDInsight:From a command line, change your work directory to the one created in the prior step, and then enter the following command to copy files from an 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. Spusťte aplikaci SQuirreL SQL.Start the SQuirreL SQL application. V levé části okna vyberte možnost ovladače.From the left of the window, select Drivers.

    Karta ovladače na levé straně okna

  4. Z ikon v horní části dialogového okna ovladače vyberte + ikonu pro vytvoření ovladače.From the icons at the top of the Drivers dialog, select the + icon to create a driver.

    SQuirreL – ikona ovladačů aplikace SQL

  5. V dialogovém okně Přidat ovladač přidejte následující informace:In the Add Driver dialog, add the following information:

    VlastnostProperty HodnotaValue
    NázevName HiveHive
    Příklad adresy URLExample URL jdbc:hive2://localhost:443/default;transportMode=http;ssl=true;httpPath=/hive2
    Cesta k nadbytečné tříděExtra Class Path Pomocí tlačítka Přidat přidejte všechny soubory jar stažené dříve.Use the Add button to add the all of jar files downloaded earlier.
    Název třídyClass Name org. Apache. podregistr. JDBC. HiveDriverorg.apache.hive.jdbc.HiveDriver

    Dialog Přidat ovladač s parametry

    Kliknutím na tlačítko OK tato nastavení uložte.Select OK to save these settings.

  6. Na levé straně okna SQuirreL SQL vyberte aliasy.On the left of the SQuirreL SQL window, select Aliases. Pak vyberte + ikonu pro vytvoření aliasu připojení.Then select the + icon to create a connection alias.

    Dialog SQuirreL SQL přidat nový alias

  7. V dialogovém okně Přidat alias použijte následující hodnoty:Use the following values for the Add Alias dialog:

    VlastnostProperty HodnotaValue
    NázevName Podregistr v HDInsightHive on HDInsight
    OvladačDriver Pomocí rozevíracího seznamu vyberte ovladač podregistru .Use the drop-down to select the Hive driver.
    URLURL jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2.jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2. Nahraďte CLUSTERNAME názvem clusteru HDInsight.Replace CLUSTERNAME with the name of your HDInsight cluster.
    Uživatelské jménoUser Name Název přihlašovacího účtu clusteru pro cluster HDInsight.The cluster login account name for your HDInsight cluster. Výchozí hodnota je admin (správce).The default is admin.
    HesloPassword Heslo pro přihlašovací účet clusteruThe password for the cluster login account.

    Dialog Přidat alias s parametry

    Důležité

    K ověření, že připojení funguje, použijte tlačítko test .Use the Test button to verify that the connection works. Když se připojíte k: zobrazí se dialogové okno pro zobrazení podregistru v HDInsight , vyberte připojit a proveďte test.When Connect to: Hive on HDInsight dialog appears, select Connect to perform the test. Pokud je test úspěšný, zobrazí se dialogové okno připojení bylo úspěšné .If the test succeeds, you see a Connection successful dialog. Pokud dojde k chybě, přečtěte si téma Poradce při potížích.If an error occurs, see Troubleshooting.

    Pokud chcete uložit alias připojení, použijte tlačítko OK v dolní části dialogu Přidat alias .To save the connection alias, use the Ok button at the bottom of the Add Alias dialog.

  8. Z rozevíracího seznamu připojit k v horní části SQuirreL SQL vyberte podregistr v HDInsight.From the Connect to dropdown at the top of SQuirreL SQL, select Hive on HDInsight. Po zobrazení výzvy vyberte připojit.When prompted, select Connect.

    Dialogové okno připojení s parametry

  9. Po připojení zadejte následující dotaz do dialogového okna dotazu SQL a pak vyberte ikonu Spustit (spuštěná osoba).Once connected, enter the following query into the SQL query dialog, and then select the Run icon (a running person). V oblasti výsledků by se měly zobrazit výsledky dotazu.The results area should show the results of the query.

    select * from hivesampletable limit 10;
    

    Dialogové okno dotazu SQL, včetně výsledků

Připojení z ukázkové aplikace JavaConnect from an example Java application

Příklad použití klienta Java k dotazování na podregistr v HDInsight je k dispozici na adrese https://github.com/Azure-Samples/hdinsight-java-hive-jdbc .An example of using a Java client to query Hive on HDInsight is available at https://github.com/Azure-Samples/hdinsight-java-hive-jdbc. Podle pokynů v úložišti Sestavte a spusťte ukázku.Follow the instructions in the repository to build and run the sample.

Řešení potížíTroubleshooting

Při pokusu o otevření připojení SQL došlo k neočekávané chybě.Unexpected Error occurred attempting to open an SQL connection

Příznaky: při připojování ke clusteru HDInsight, který má verzi 3,3 nebo vyšší, se může zobrazit chyba, že došlo k neočekávané chybě.Symptoms: When connecting to an HDInsight cluster that is version 3.3 or greater, you may receive an error that an unexpected error occurred. Trasování zásobníku pro tuto chybu začíná na následujících řádcích:The stack trace for this error begins with the following lines:

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)

Příčina: Tato chyba je způsobená starším souborem. jar Commons-Codec verze, který je součástí SQuirreL.Cause: This error is caused by an older version commons-codec.jar file included with SQuirreL.

Řešení: Pokud chcete tuto chybu opravit, použijte následující postup:Resolution: To fix this error, use the following steps:

  1. Ukončete SQuirreL a potom v systému vyhledejte adresář, ve kterém je SQuirreL nainstalovaný, třeba C:\Program Files\squirrel-sql-4.0.0\lib .Exit SQuirreL, and then go to the directory where SQuirreL is installed on your system, perhaps C:\Program Files\squirrel-sql-4.0.0\lib. V adresáři SquirreL v lib adresáři v adresáři nahraďte existující Commons-Codec. jar jedním staženým z clusteru HDInsight.In the SquirreL directory, under the lib directory, replace the existing commons-codec.jar with the one downloaded from the HDInsight cluster.

  2. Restartujte SQuirreL.Restart SQuirreL. Tato chyba by se už neměla vyskytnout při připojování k podregistru v HDInsight.The error should no longer occur when connecting to Hive on HDInsight.

Připojení odpojené službou HDInsightConnection disconnected by HDInsight

Příznaky: při pokusu o stažení obrovských objemů dat (například několik GB) prostřednictvím JDBC/ODBC se při stahování neočekávaně odpojí připojení ke službě HDInsight.Symptoms: When trying to download huge amount of data (say several GBs) through JDBC/ODBC, the connection is disconnected by HDInsight unexpectedly while downloading.

Příčina: Tato chyba je způsobená omezením u uzlů brány.Cause: This error is caused by the limitation on Gateway nodes. Při získávání dat z JDBC/ODBC musí všechna data projít uzlem brány.When getting data from JDBC/ODBC, all data needs to pass through the Gateway node. Brána však není navržena tak, aby stahoval velké množství dat, takže brána může připojení ukončit, pokud nemůže zpracovat provoz.However, a gateway isn't designed to download a huge amount of data, so the Gateway might close the connection if it can't handle the traffic.

Řešení: Vyhněte se použití ovladače JDBC/ODBC ke stahování velkých objemů dat.Resolution: Avoid using JDBC/ODBC driver to download huge amounts of data. Místo toho zkopírujte data přímo z úložiště objektů BLOB.Copy data directly from blob storage instead.

Další krokyNext steps

Teď, když jste se naučili, jak používat JDBC k práci s podregistrem, použijte následující odkazy k prozkoumání dalších způsobů, jak pracovat s Azure HDInsight.Now that you've learned how to use JDBC to work with Hive, use the following links to explore other ways to work with Azure HDInsight.