Dotazování Apache Hivu prostřednictvím ovladače JDBC v HDInsightu

Naučte se používat ovladač JDBC z aplikace Java. Odeslání dotazů Apache Hive do Apache Hadoopu ve službě Azure HDInsight Informace v tomto dokumentu ukazují, jak se připojit programově a z SQuirreL SQL klienta.

Další informace o rozhraní Hive JDBC naleznete v tématu HiveJDBCInterface.

Požadavky

Připojovací řetězec JDBC

Připojení JDBC ke clusteru HDInsight v Azure se provádí přes port 443. Provoz je zabezpečený pomocí protokolu TLS/SSL. Veřejná brána, za kterou clustery sedí, přesměruje provoz na port, na který HiveServer2 skutečně naslouchá. Následující připojovací řetězec ukazuje formát, který se má použít pro HDInsight:

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

Parametr CLUSTERNAME nahraďte názvem vašeho clusteru HDInsight.

Název hostitele v připojovací řetězec

Název hostitele CLUSTERNAME.azurehdinsight.net v připojovací řetězec je stejný jako adresa URL clusteru. Můžete ho získat prostřednictvím webu Azure Portal.

Port v připojovací řetězec

K připojení ke clusteru z některých míst mimo virtuální síť Azure můžete použít pouze port 443 . HDInsight je spravovaná služba, což znamená, že všechna připojení ke clusteru se spravují přes zabezpečenou bránu. K HiveServeru 2 se nemůžete připojit přímo na portech 10001 nebo 10000. Tyto porty nejsou vystavené vnějšímu prostředí.

Ověřování

Při navazování připojení použijte k ověření název a heslo správce clusteru HDInsight. V klientech JDBC, jako je SQuirreL SQL, zadejte název správce a heslo v nastavení klienta.

V aplikaci v Javě musíte při navazování připojení použít název a heslo. Například následující kód Java otevře nové připojení:

DriverManager.getConnection(connectionString,clusterAdmin,clusterPassword);

Připojení s klientem SQL SQuirreL

SQuirreL SQL je klient JDBC, který lze použít ke vzdálenému spouštění dotazů Hive s vaším clusterem HDInsight. Následující kroky předpokládají, že jste již nainstalovali SQuirreL SQL.

  1. Vytvořte adresář, který bude obsahovat určité soubory, které se mají zkopírovat z clusteru.

  2. V následujícím skriptu nahraďte sshuser názvem uživatelského účtu SSH pro cluster. Nahraďte CLUSTERNAME názvem clusteru HDInsight. Z příkazového řádku změňte pracovní adresář na pracovní adresář vytvořený v předchozím kroku a pak zadejte následující příkaz, který zkopíruje soubory z clusteru HDInsight:

    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/hadoop-client/{hadoop-auth.jar,hadoop-common.jar,lib/reload4j-*.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. Nalevo od okna vyberte Ovladače.

    Drivers tab on the left of the window.

  4. V horní části dialogového okna Ovladače vyberte + ikonu a vytvořte ovladač.

    SQuirreL SQL application drivers icon.

  5. V dialogovém okně Přidaný ovladač přidejte následující informace:

    Vlastnost Hodnota
    Name Hive
    Příklad adresy URL jdbc:hive2://localhost:443/default;transportMode=http;ssl=true;httpPath=/hive2
    Další cesta třídy Pomocí tlačítka Přidat přidejte všechny soubory JAR stažené dříve.
    Název třídy org.apache.hive.jdbc.HiveDriver

    add driver dialog with parameters.

    Chcete-li tato nastavení uložit, vyberte OK .

  6. Nalevo od okna SQuirreL SQL vyberte Aliasy. Pak výběrem + ikony vytvořte alias připojení.

    `SQuirreL SQL add new alias dialog`.

  7. V dialogovém okně Přidat alias použijte následující hodnoty:

    Vlastnost Hodnota
    Name Hive ve službě HDInsight
    Ovladač Pomocí rozevíracího seznamu vyberte ovladač Hive .
    Adresa URL jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2. Nahraďte CLUSTERNAME názvem clusteru HDInsight.
    Uživatelské jméno Název přihlašovacího účtu clusteru pro váš cluster HDInsight. Výchozí hodnota je správce.
    Heslo Heslo pro přihlašovací účet clusteru.

    add alias dialog with parameters.

    Důležité

    Pomocí tlačítka Test ověřte, že připojení funguje. Když Připojení do: Zobrazí se dialogové okno Hive ve službě HDInsight, vyberte Připojení k provedení testu. Pokud je test úspěšný, zobrazí se dialogové okno Připojení. Pokud dojde k chybě, přečtěte si téma Řešení potíží.

    Pokud chcete alias připojení uložit, použijte tlačítko OK v dolní části dialogového okna Přidat alias .

  8. V Připojení rozevírací seznam v horní části SQuirreL SQL vyberte Hive ve službě HDInsight. Po zobrazení výzvy vyberte Připojení.

    connection dialog with parameters.

  9. Po připojení zadejte do dialogového okna dotazu SQL následující dotaz a pak vyberte ikonu Spustit (spuštěná osoba). V oblasti výsledků by se měly zobrazit výsledky dotazu.

    select * from hivesampletable limit 10;
    

    sql query dialog, including results.

Připojení z ukázkové aplikace v Javě

Příklad použití klienta Java k dotazování Hivu ve službě HDInsight je k dispozici na adrese https://github.com/Azure-Samples/hdinsight-java-hive-jdbc. Podle pokynů v úložišti sestavte a spusťte ukázku.

Řešení problému

Při pokusu o otevření připojení SQL došlo k neočekávané chybě

Příznaky: Při připojování ke clusteru HDInsight verze 3.3 nebo vyšší může dojít k chybě, ke které došlo k neočekávané chybě. Trasování zásobníku pro tuto chybu začíná následujícími řádky:

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: Příčinou této chyby je starší verze commons-codec.jar souboru, který je součástí SQuirreL.

Řešení: Pokud chcete tuto chybu opravit, postupujte následovně:

  1. Ukončete SQuirreL a pak přejděte do adresáře, kde je V systému nainstalován SQuirreL, možná C:\Program Files\squirrel-sql-4.0.0\lib. V adresáři SquirreL v rámci lib adresáře nahraďte existující commons-codec.jar názvem staženým z clusteru HDInsight.

  2. Restartujte SQuirreL. K chybě by už nemělo dojít při připojování k Hivu ve službě HDInsight.

Zrušené připojení službou HDInsight

Příznaky: HDInsight neočekávaně odpojí připojení při pokusu o stažení obrovského množství dat (řekněme několik GB) prostřednictvím JDBC/ODBC.

Příčina: Toto omezení na uzlech brány způsobí tuto chybu. Při získávání dat z JDBC/ODBC musí všechna data projít uzlem Brány. Brána ale není navržená ke stažení velkého množství dat, takže brána může připojení zavřít, pokud nedokáže zpracovat provoz.

Řešení: Vyhněte se použití ovladače JDBC/ODBC ke stažení obrovského množství dat. Místo toho zkopírujte data přímo z úložiště objektů blob.

Další kroky

Teď, když jste se naučili používat JDBC pro práci s Hivem, můžete pomocí následujících odkazů prozkoumat další způsoby práce se službou Azure HDInsight.