Apache Beeline istemcisini Apache Hive ile kullanma

Bu makalede, SSH bağlantısı üzerinden Apache Hive sorguları oluşturmak ve yürütmek için komut satırı Apache Beeline istemcisinin nasıl kullanılacağı açıklanır.

Arka Plan

Beeline, HDInsight kümenizin baş düğümlerine dahil edilen bir Hive istemcisidir. Bu makalede, hive sorgusu ve HiveQL dosyası kullanarak örnekler aracılığıyla bu aracın nasıl kullanılacağı açıklanmaktadır.

HDInsight kümenizde yüklü Olan Beeline istemcisine bağlanmak veya Beeline'ı yerel olarak yüklemek için Apache Beeline'a bağlanmak veya yüklemek için kılavuzumuzu izleyin.

Beeline, HDInsight kümenizde barındırılan HiveServer2 hizmetine bağlanmak için JDBC kullanır. HdInsight'ta Hive'a İnternet üzerinden uzaktan erişmek için de Beeline kullanabilirsiniz. Aşağıdaki örnekler, Beeline'dan HDInsight'a bağlanmak için kullanılan en yaygın bağlantı dizelerini sağlar.

Örnekler için önkoşullar

  • Azure HDInsight üzerinde bir Hadoop kümesi. Bir kümeye ihtiyacınız varsa HDInsight kümesi oluşturmak için kılavuzumuzu izleyin.

  • Kümenizin birincil depolama alanı için URI şemasına dikkat edin. Örneğin Azure Depolama, wasb://abfs:// Azure Data Lake Storage 2. Nesil veya adl:// Azure Data Lake Storage 1. Nesil için. Azure Depolama için güvenli aktarım etkinleştirildiyse, URI olur wasbs://. Daha fazla bilgi için bkz. güvenli aktarım.

  • Bir SSH istemcisi. Daha fazla bilgi için bkz. SSH kullanarak HDInsight'a (Apache Hadoop) bağlanma. Bu belgedeki adımların çoğu, beeline'ı bir SSH oturumundan kümeye kullandığınızı varsayar. Yerel bir Beeline istemcisi de kullanabilirsiniz, ancak bu adımlar bu makalede ele alınmamıştır.

Hive sorgusu çalıştırma

Bu örnek, SSH bağlantısından Beeline istemcisini kullanmayı temel alır.

  1. Aşağıdaki kodla kümeye bir SSH bağlantısı açın. sshuser değerini, kümenizin SSH kullanıcısı ile, CLUSTERNAME değerini kümenizin adıyla değiştirin. İstendiğinde, SSH kullanıcı hesabının parolasını girin.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Aşağıdaki komutu girerek açık SSH oturumunuzdan Beeline istemcinizle HiveServer2'ye bağlanın:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
    

    Not

    Beeline kullanarak HiveServer2'ye bağlanma bölümündeki "Kerberos kullanarak HDInsight Kurumsal Güvenlik Paketi (ESP) kümesine" bölümüne bakın veya Kurumsal Güvenlik Paketi (ESP) özellikli bir küme kullanıyorsanız yerel kümenizden bağlanmak için Beeline'ı yerel olarak yükleyin

  3. Beeline komutları bir ! karakterle başlar, örneğin !help yardım görüntüler. ! Ancak bazı komutlar için atlanabilir. Örneğin, help aynı zamanda çalışır.

    !sqlHiveQL deyimlerini yürütmek için kullanılan vardır. Ancak HiveQL o kadar yaygın olarak kullanılır ki, önceki !sqlöğesini atlayabilirsiniz. Aşağıdaki iki deyim eşdeğerdir:

    !sql show tables;
    show tables;
    

    Yeni kümede yalnızca bir tablo listelenir: hivesampletable.

  4. hivesampletable şemasını görüntülemek için aşağıdaki komutu kullanın:

    describe hivesampletable;
    

    Bu komut aşağıdaki bilgileri döndürür:

    +-----------------------+------------+----------+--+
    |       col_name        | data_type  | comment  |
    +-----------------------+------------+----------+--+
    | clientid              | string     |          |
    | querytime             | string     |          |
    | market                | string     |          |
    | deviceplatform        | string     |          |
    | devicemake            | string     |          |
    | devicemodel           | string     |          |
    | state                 | string     |          |
    | country               | string     |          |
    | querydwelltime        | double     |          |
    | sessionid             | bigint     |          |
    | sessionpagevieworder  | bigint     |          |
    +-----------------------+------------+----------+--+
    

    Bu bilgiler tablodaki sütunları açıklar.

  5. HDInsight kümesiyle sağlanan örnek verileri kullanarak log4jLogs adlı bir tablo oluşturmak için aşağıdaki deyimleri girin: (URI şemanıza göre gerektiği gibi düzeltin.)

    DROP TABLE log4jLogs;
    CREATE EXTERNAL TABLE log4jLogs (
        t1 string,
        t2 string,
        t3 string,
        t4 string,
        t5 string,
        t6 string,
        t7 string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
    STORED AS TEXTFILE LOCATION 'wasbs:///example/data/';
    SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs
        WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log'
        GROUP BY t4;
    

    Bu deyimler aşağıdaki eylemleri gerçekleştirir:

    Deyim Açıklama
    DROP TABLE Tablo varsa silinir.
    DıŞ TABLO OLUŞTURMA Hive'da bir dış tablo oluşturur. Dış tablolar tablo tanımını yalnızca Hive'da depolar. Veriler özgün konumda bırakılır.
    SATıR BIÇIMI Verilerin nasıl biçimlendirildiğini. Bu durumda, her günlükteki alanlar bir boşlukla ayrılır.
    TEXTFILE KONUMU OLARAK DEPOLANıR Verilerin nerede ve hangi dosya biçiminde depolandığı.
    SELECT t4 sütununun [ERROR] değerini içerdiği tüm satırların sayısını seçer. Bu değeri içeren üç satır olduğundan bu sorgu 3 değerini döndürür.
    INPUT__FILE__NAME LIKE '%.log' Hive, şemayı dizindeki tüm dosyalara uygulamayı dener. Bu durumda, dizin şemayla eşleşmeyen dosyalar içerir. Sonuçlarda çöp verilerini önlemek için bu deyim Hive'a yalnızca .log ile biten dosyalardan veri döndürmesi gerektiğini bildirir.

    Not

    Temel alınan verilerin bir dış kaynak tarafından güncelleştirilmesini beklediğiniz durumlarda dış tablolar kullanılmalıdır. Örneğin, otomatik veri yükleme işlemi veya MapReduce işlemi.

    Dış tablo bırakılıyorsa veriler silinmez , yalnızca tablo tanımı silinir.

    Bu komutun çıkışı aşağıdaki metne benzer:

    INFO  : Tez session hasn't been created yet. Opening session
    INFO  :
    
    INFO  : Status: Running (Executing on YARN cluster with App id application_1443698635933_0001)
    
    INFO  : Map 1: -/-      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0(+1)/1  Reducer 2: 0/1
    INFO  : Map 1: 0(+1)/1  Reducer 2: 0/1
    INFO  : Map 1: 1/1      Reducer 2: 0/1
    INFO  : Map 1: 1/1      Reducer 2: 0(+1)/1
    INFO  : Map 1: 1/1      Reducer 2: 1/1
    +----------+--------+--+
    |   sev    | count  |
    +----------+--------+--+
    | [ERROR]  | 3      |
    +----------+--------+--+
    1 row selected (47.351 seconds)
    
  6. Beeline'dan çık:

    !exit
    

HiveQL dosyası çalıştırma

Bu örnek, önceki örnekten bir devamdır. Bir dosya oluşturmak için aşağıdaki adımları kullanın ve beeline kullanarak çalıştırın.

  1. query.hql adlı bir dosya oluşturmak için aşağıdaki komutu kullanın:

    nano query.hql
    
  2. Dosyanın içeriği olarak aşağıdaki metni kullanın. Bu sorgu errorLogs adlı yeni bir 'iç' tablo oluşturur:

    CREATE TABLE IF NOT EXISTS errorLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) STORED AS ORC;
    INSERT OVERWRITE TABLE errorLogs SELECT t1, t2, t3, t4, t5, t6, t7 FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log';
    

    Bu deyimler aşağıdaki eylemleri gerçekleştirir:

    Deyim Açıklama
    YOKSA TABLO OLUŞTUR Tablo henüz yoksa oluşturulur. EXTERNAL anahtar sözcüğü kullanılmadığından bu deyim bir iç tablo oluşturur. İç tablolar Hive veri ambarında depolanır ve tamamen Hive tarafından yönetilir.
    ORC OLARAK DEPOLANIYOR Verileri İyileştirilmiş Satır Sütunu (ORC) biçiminde depolar. ORC biçimi, Hive verilerini depolamak için yüksek oranda iyileştirilmiş ve verimli bir biçimdir.
    INSERT OVERWRITE ... SEÇİN log4jLogs tablosundan [ERROR] içeren satırları seçer ve ardından verileri errorLogs tablosuna ekler.

    Not

    Dış tablolardan farklı olarak, iç tablo bırakılıyorsa temel alınan veriler de silinir.

  3. Dosyayı kaydetmek için Ctrl+X tuşunu kullanın, ardından Y yazın ve son olarak Enter tuşuna basın.

  4. Beeline kullanarak dosyayı çalıştırmak için aşağıdakileri kullanın:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
    

    Not

    -i parametresi Beeline'ı başlatır ve dosyasındaki query.hql deyimleri çalıştırır. Sorgu tamamlandıktan sonra istemine jdbc:hive2://headnodehost:10001/> ulaşırsınız. Sorgu tamamlandıktan sonra Beeline'dan çıkan parametresini kullanarak -f da bir dosya çalıştırabilirsiniz.

  5. errorLogs tablosunun oluşturulduğunu doğrulamak için, errorLogs içindeki tüm satırları döndürmek için aşağıdaki deyimi kullanın:

    SELECT * from errorLogs;
    

    T4 sütununda [ERROR] içeren üç veri satırı döndürülmelidir:

    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
    | errorlogs.t1  | errorlogs.t2  | errorlogs.t3  | errorlogs.t4  | errorlogs.t5  | errorlogs.t6  | errorlogs.t7  |
    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
    | 2012-02-03    | 18:35:34      | SampleClass0  | [ERROR]       | incorrect     | id            |               |
    | 2012-02-03    | 18:55:54      | SampleClass1  | [ERROR]       | incorrect     | id            |               |
    | 2012-02-03    | 19:25:27      | SampleClass4  | [ERROR]       | incorrect     | id            |               |
    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
    3 rows selected (0.813 seconds)
    

Sonraki adımlar