Aracılığıyla paylaş


Apache Beeline istemcisini Apache Hive ile kullanma

Bu makalede, bir 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çıklanmaktadı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ü Beeline istemcisine bağlanmak veya Beeline'ı yerel olarak yüklemek için Apache Beeline ile bağlantı kurmak 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. Beeline kullanarak HDInsight'ta Hive'a İnternet üzerinden uzaktan erişebilirsiniz. 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 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, wasb:// Azure Depolama, abfs:// Azure Data Lake Depolama 2. Nesil veya adl:// Azure Data Lake Depolama 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ğunda Beeline'ı bir SSH oturumundan kümeye kullandığınız varsayılır. 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. Kümenizin SSH kullanıcısı ile sshuser değerini ve kümenizin adıyla CLUSTERNAME değerini 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'
    
  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 !sqldeğerini 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 ifadeler aşağıdaki işlemleri gerçekleştirir:

    Açıklama Açıklama
    TABLOYU SİL Tablo varsa silinir.
    Harici Tablo Oluştur 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.
    TEXT DOSYASI KONUMU OLARAK DEPOLANıR Verilerin nerede ve hangi dosya biçiminde depolandığı.
    SEÇ 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 söyler.

    Uyarı

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

    Dış bir tablo bırakıldığında veriler silinmez, sadece tablo tanımı silinir.

    Bu komutun çıktısı 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. Aşağıdaki adımları kullanarak bir dosya oluşturun 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 'internal' tablosu 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 ifadeler aşağıdaki işlemleri gerçekleştirir:

    Açıklama Açıklama
    "EĞER 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 son derece iyileştirilmiş ve verimli bir biçimdir.
    EKLE ÜZERİNE YAZ ... SEÇ log4jLogs tablosundan [ERROR] içeren satırları seçer ve ardından verileri errorLogs tablosuna ekler.

    Uyarı

    Dış tablolardan farklı olarak, bir iç tablo bırakmak, temel alınan verileri de siler.

  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
    

    Uyarı

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

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

    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