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

Bir Java uygulamasından JDBC sürücüsünü nasıl kullanacağınızı öğrenin. Azure HDInsight 'ta Apache Hadoop Apache Hive sorguları göndermek için. bu belgedeki bilgiler, programlama yoluyla ve squırrel SQL istemcisinden nasıl bağlanabileceğinizi 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. Trafik, TLS/SSL kullanılarak güvenli hale getirilir. Kümelerin arkasındaki genel ağ geçidi, trafiği HiveServer2 'in 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.

Ya da bağlantıyı, ambarı Kullanıcı arabirimi > Hive > configs > gelişmiş' i aracılığıyla bulabilirsiniz.

Ambarı aracılığıyla JDBC bağlantı dizesi al

Bağlantı dizesinde konak adı

Bağlantı dizesindeki ' CLUSTERNAME.azurehdinsight.net ' konak adı, küme URL 'niz ile aynı. Azure portal aracılığıyla edinebilirsiniz.

Bağlantı dizesinde bağlantı noktası

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

Kimlik Doğrulaması

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

Bir Java uygulamasından 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);

squırrel SQL istemcisiyle Bağlan

SQUIRREL SQL, HDInsight kümeniz ile Hive sorgularını uzaktan çalıştırmak için kullanılabilen bir JDBC istemcidir. Aşağıdaki adımlarda, SQUIRREL SQL zaten yüklemiş olduğunuz varsayılır.

  1. Kümeinizden kopyalanacak belirli dosyaları içerecek bir dizin oluşturun.

  2. Aşağıdaki betikte, ' ın sshuser küme IÇIN SSH kullanıcı hesabı adıyla değiştirin. CLUSTERNAMEHDInsight kümesi adıyla değiştirin. Bir komut satırından, çalışma dizininizi önceki adımda oluşturulan bir şekilde değiştirin ve ardından bir HDInsight kümesinden dosya 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/hive-client/lib/{commons-codec*.jar,commons-logging-*.jar,hive-*-*.jar,httpclient-*.jar,httpcore-*.jar,libfb*.jar,libthrift-*.jar} .
    
  3. squırrel SQL uygulamasını başlatın. Pencerenin sol tarafında, 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.

    squırrel SQL uygulama sürücüleri simgesi

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

    Özellik Değer
    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ü iletişim kutusu Ekle

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

  6. squırrel SQL penceresinin sol tarafında diğer adlar' ı seçin. Ardından + bir bağlantı diğer adı oluşturmak için simgeyi seçin.

    ' squırrel SQL yeni diğer ad ekle iletişim kutusu '

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

    Özellik Değer
    Ad HDInsight üzerinde Hive
    Sürücü Hive sürücüsünü seçmek için açılan eklentiyi 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ümeniz için küme oturum açma hesabı adı. Yönetici varsayılandır.
    Parola Küme oturum açma hesabının parolası.

    parametrelerle diğer ad iletişim kutusu Ekle

    Önemli

    Bağlantının çalıştığını doğrulamak için Test düğmesini kullanın. Bağlan: hdınsight 'ta Hive iletişim kutusu göründüğünde, testi gerçekleştirmek için Bağlan öğesini seçin. Sınama başarılı olursa başarılı bir bağlantı iletişim kutusu görürsünüz. Bir 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. squırrel SQL en üstündeki Bağlan aşağı açılan listeden hdınsight 'ta Hive öğesini seçin. istendiğinde Bağlan' yi seçin.

    parametrelerle bağlantı iletişim kutusu

  9. bağlandıktan sonra, SQL sorgu iletişim kutusuna aşağıdaki sorguyu girin ve sonra ç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 dahil SQL sorgu iletişim kutusu

örnek Java uygulamasından Bağlan

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

Sorun giderme

SQL bağlantısı açılmaya çalışılırken beklenmeyen bir hata oluştu

Belirtiler: 3,3 veya üzeri bir HDInsight kümesine bağlanırken beklenmeyen bir hata oluştuğunu belirten bir hata alabilirsiniz. Bu hata için 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 'e dahil edilen eski bir Commons-codec. jar dosyası nedeniyle oluşur.

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

  1. SQUIRREL programından çıkın ve sonra da bilgisayarınızda SQUIRREL 'in yüklü olduğu dizine gidin C:\Program Files\squirrel-sql-4.0.0\lib . SQUIRREL dizininde, dizin altında, lib var olan Commons-codec. jar dosyasını HDInsight kümesinden indirilen ile değiştirin.

  2. SQuirreL'i yeniden başlatın. HdInsight üzerinde Hive'a bağlanırken artık hata oluşmaz.

HDInsight bağlantısı kesildi

Belirtiler: JDBC/ODBC aracılığıyla çok büyük miktarda veri (örneğin birkaç GB) indirmeye çalışırken, indirme sırasında HDInsight bağlantısı beklenmedik bir şekilde kesiliyor.

Neden: Bu hata, Ağ geçidi düğümlerinde oluşan sınırlamadan kaynaklandır. JDBC/ODBC'den veri almak için tüm verilerin Ağ Geçidi düğümünden geçmesi gerekir. Ancak ağ geçidi çok fazla miktarda veri indiren bir ağ geçidi tasarlanmaysa da ağ geçidi trafiği işleyene kadar bağlantıyı kapatıyor olabilir.

Çö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'yi kullanmayı öğrendiğinize göre, aşağıdaki bağlantıları kullanarak bu kaynaklarla çalışmanın diğer Azure HDInsight.