HDInsight’ta JDBC sürücüsü üzerinden Apache Hive’ı sorgulama

Java uygulamasından JDBC sürücüsünü kullanmayı öğrenin. Azure HDInsight'ta Apache Hadoop'a Apache Hive sorguları göndermek için. Bu belgedeki bilgiler, program aracılığıyla ve istemciden SQuirreL SQL nasıl bağlanılacağını gösterir.

Hive JDBC Arabirimi hakkında daha fazla bilgi için bkz . HiveJDBCInterface.

Önkoşullar

JDBC bağlantı dizesi

Azure'da bir HDInsight kümesine JDBC bağlantıları 443 numaralı bağlantı noktası üzerinden yapılır. Trafiğin güvenliği TLS/SSL kullanılarak sağlanır. Kümelerin arkasında yer aldığı ortak ağ geçidi, trafiği HiveServer2'nin gerçekten dinlediği bağlantı noktasına yönlendirir. Aşağıdaki bağlantı dizesi HDInsight için kullanılacak biçimi gösterir:

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

CLUSTERNAME değerini HDInsight kümenizin adıyla değiştirin.

bağlantı dizesi ana bilgisayar adı

bağlantı dizesi 'CLUSTERNAME.azurehdinsight.net' ana bilgisayar adı, küme URL'nizle aynıdır. Bunu Azure portalından alabilirsiniz.

bağlantı dizesi'de bağlantı noktası

Kümeye azure sanal ağının dışındaki bazı yerlerden bağlanmak için yalnızca 443 numaralı bağlantı noktasını kullanabilirsiniz. HDInsight yönetilen bir hizmettir ve bu da kümeye yapılan tüm bağlantıların güvenli bir Ağ Geçidi üzerinden yönetildiği anlamına gelir. HiveServer 2'ye doğrudan 10001 veya 10000 bağlantı noktaları üzerinden bağlanamazsınız. Bu bağlantı noktaları dışarıdan kullanıma sunulmaz.

Kimlik Doğrulaması

Bağlantıyı kurarken kimlik doğrulaması yapmak için HDInsight kümesi yönetici adını ve parolasını kullanın. SQuirreL SQL gibi JDBC istemcilerinden, istemci ayarlarına yönetici adı ve parola girin.

Bir Java uygulamasında bağlantı kurarken adı ve parolayı kullanmanız gerekir. Örneğin, aşağıdaki Java kodu yeni bir bağlantı açar:

DriverManager.getConnection(connectionString,clusterAdmin,clusterPassword);

SQuirreL SQL istemcisiyle Bağlan

SQuirreL SQL, HDInsight kümenizle Hive sorgularını uzaktan çalıştırmak için kullanılabilen bir JDBC istemcisidir. Aşağıdaki adımlarda, SQuirreL SQL'i zaten yüklediğiniz varsayılır.

  1. Kümenizden kopyalanacak belirli dosyaları içeren bir dizin oluşturun.

  2. Aşağıdaki betikte değerini kümenin SSH kullanıcı hesabı adıyla değiştirin sshuser . değerini HDInsight küme adıyla değiştirin CLUSTERNAME . Bir komut satırından, iş dizininizi önceki adımda oluşturulan dizinle değiştirin ve hdInsight kümesindeki dosyaları kopyalamak için aşağıdaki komutu girin:

    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. SQuirreL SQL uygulamasını başlatın. Pencerenin sol tarafından Sürücüler'i seçin.

    Drivers tab on the left of the window.

  4. Sürücüler iletişim kutusunun üst kısmındaki simgelerden bir sürücü oluşturmak için simgeyi + seçin.

    SQuirreL SQL application drivers icon.

  5. Sürücü Eklendi iletişim kutusunda aşağıdaki bilgileri ekleyin:

    Özellik Değer
    Veri Akışı Adı Hive
    Örnek URL jdbc:hive2://localhost:443/default;transportMode=http;ssl=true;httpPath=/hive2
    Ek Sınıf Yolu Daha önce indirilen tüm jar dosyalarını eklemek için Ekle düğmesini kullanın.
    Sınıf Adı org.apache.hive.jdbc.HiveDriver

    add driver dialog with parameters.

    Bu ayarları kaydetmek için Tamam'ı seçin.

  6. SQuirreL SQL penceresinin sol tarafında Diğer Adlar'ı seçin. Ardından simgeyi + seçerek bir bağlantı diğer adı oluşturun.

    `SQuirreL SQL add new alias dialog`.

  7. Diğer Ad Ekle iletişim kutusu için aşağıdaki değerleri kullanın:

    Özellik Değer
    Veri Akışı Adı HDInsight üzerinde Hive
    Sürücü Hive sürücüsünü seçmek için açılan listeyi kullanın.
    URL jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2. CLUSTERNAME değerini HDInsight kümenizin adıyla değiştirin.
    User Name HDInsight kümenizin küme oturum açma hesabı adı. Varsayılan değer yöneticidir.
    Parola Küme oturum açma hesabının parolası.

    add alias dialog with parameters.

    Önemli

    Bağlantının çalıştığını doğrulamak için Test düğmesini kullanın. Bağlan: HDInsight'ta Hive iletişim kutusu görüntülendiğinde testi gerçekleştirmek için Bağlan seçin. Test başarılı olursa, başarılı Bağlan iletişim kutusu görürsünüz. Hata oluşursa bkz . Sorun giderme.

    Bağlantı diğer adını kaydetmek için Diğer Ad Ekle iletişim kutusunun altındaki Tamam düğmesini kullanın.

  8. SQuirreL SQL'in en üstündeki Bağlan açılan listesinden HDInsight'ta Hive'ı seçin. İstendiğinde Bağlan'ı seçin.

    connection dialog with parameters.

  9. Bağlandıktan sonra SQL sorgusu iletişim kutusuna aşağıdaki sorguyu girin ve çalıştır simgesini (çalışan bir kişi) seçin. Sonuçlar alanında sorgunun sonuçları gösterilmelidir.

    select * from hivesampletable limit 10;
    

    sql query dialog, including results.

Örnek bir Java uygulamasından Bağlan

HDInsight'ta Hive'ı sorgulamak için Java istemcisi kullanma örneği adresinde https://github.com/Azure-Samples/hdinsight-java-hive-jdbcbulunabilir. Örneği derlemek ve çalıştırmak için depodaki yönergeleri izleyin.

Sorun giderme

SQL bağlantısı açmaya çalışırken Beklenmeyen Hata oluştu

Belirtiler: Sürüm 3.3 veya üzeri bir HDInsight kümesine bağlanırken beklenmeyen bir hata oluştuğuna ilişkin bir hata alabilirsiniz. Bu hatanın yığın izlemesi aşağıdaki satırlarla başlar:

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)

Neden: Bu hata, SQuirreL'de bulunan eski bir sürüm commons-codec.jar dosyasından kaynaklanır.

Çözüm: Bu hatayı düzeltmek için aşağıdaki adımları kullanın:

  1. SQuirreL'dan çıkın ve sisteminizde SQuirreL'in yüklü olduğu dizine (belki de C:\Program Files\squirrel-sql-4.0.0\lib) gidin. SquirreL dizinindeki dizinin altında lib , var olan commons-codec.jar HDInsight kümesinden indirilen ile değiştirin.

  2. SQuirreL'i yeniden başlatın. Hata artık HDInsight üzerinde Hive'a bağlanırken oluşmamalıdır.

HDInsight bağlantıyı kesti

Belirtiler: HDInsight, JDBC/ODBC aracılığıyla çok büyük miktarda veri indirmeye çalışırken (birkaç GB gibi) beklenmedik şekilde bağlantının bağlantısını kesmektedir.

Neden: Ağ geçidi düğümlerinin sınırlaması bu hataya neden olur. JDBC/ODBC'den veri alırken tüm verilerin Ağ Geçidi düğümünden geçmesi gerekir. Ancak ağ geçidi çok büyük miktarda veri indirecek şekilde tasarlanmamıştır, bu nedenle ağ geçidi trafiği işleyemiyorsa bağlantıyı kapatabilir.

Çözüm: Çok miktarda veri indirmek için JDBC/ODBC sürücüsü kullanmaktan kaçının. Bunun yerine verileri doğrudan blob depolamadan kopyalayın.

Sonraki adımlar

Hive ile çalışmak için JDBC kullanmayı öğrendiğinize göre, Azure HDInsight ile çalışmanın diğer yollarını keşfetmek için aşağıdaki bağlantıları kullanın.