Aracılığıyla paylaş


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ı dizesindeki 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ı dizisinde 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ğlanma

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 sshuser değerini kümenin SSH kullanıcı hesabı adıyla değiştirin. CLUSTERNAME değerini HDInsight küme adıyla değiştirin. 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.

    Pencerenin sol tarafındaki Sürücüler sekmesi.

  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 uygulama sürücüleri simgesi.

  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

    parametrelerle sürücü ekleme iletişim kutusu.

    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 yeni takma ad ekle iletişim kutusu'.

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

    Mülk Değer
    Veri Akışı Adı HDInsight üzerinde Hive
    Sürücü Açılan listeden Hive sürücüsünü seçmek için 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.
    Kullanıcı Adı 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ı.

    Parametrelerle alias ekleme iletişim kutusu.

    Önemli

    Bağlantının çalıştığını doğrulamak için Test düğmesini kullanın. HDInsight'ta Hive'e Bağlan iletişim kutusu görüntülendiğinde, testi gerçekleştirmek için Bağlan'ı seçin. Test başarılı olursa Bağlantı başarılı 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 kısmındaki Bağlan açılır menüsünden HDInsight üzerindeki Hive'ı seçin. İstendiğinde Bağlan'ı seçin.

    parametreleriyle bağlantı iletişim kutusu.

  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;
    

    sonuçlar da dahil olmak üzere sql sorgusu iletişim kutusu.

Örnek bir Java uygulamasından bağlanma

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 dizininde, lib altındaki dizinin içine, mevcut commons-codec.jar dosyasını HDInsight kümesinden indirdiğinizle 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 aldığınızda 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.