Menggunakan klien Apache Beeline dengan Apache Hive

Artikel ini menjelaskan cara menggunakan baris perintah klien Apache Beeline untuk membuat dan menjalankan kueri Apache Hive melalui koneksi SSH.

Latar belakang

Beeline adalah klien Apache Hive yang disertakan dalam simpul head kluster HDInsight Anda. Artikel ini menjelaskan cara menggunakan alat ini melalui contoh penggunaan kueri Hive dan file HiveQL.

Untuk terhubung ke klien Beeline yang diinstal pada kluster HDInsight Anda, atau menginstal Beeline secara lokal, ikuti panduan kami untuk terhubung, atau instal Apache Beeline.

Beeline menggunakan JDBC untuk terhubung ke HiveServer2, layanan yang dihosting di kluster HDInsight Anda. Anda juga dapat menggunakan Beeline untuk mengakses Apache Hive di HDInsight dari jarak jauh melalui internet. Contoh berikut menyediakan string koneksi paling umum yang digunakan untuk terhubung ke HDInsight dari Beeline.

Prasyarat untuk contoh

  • Kluster Hadoop di Azure HDInsight. Jika Anda memerlukan kluster, ikuti panduan kami untuk membuat kluster HDInsight.

  • Perhatikan skema URI untuk penyimpanan utama kluster Anda. Misalnya, wasb:// untuk Azure Storage, abfs:// untuk Azure Data Lake Storage Gen2, atau adl:// untuk Azure Data Lake Storage Gen1. Jika transfer aman diaktifkan untuk Azure Storage, URI-nya adalah wasbs://. Untuk informasi selengkapnya, lihat transfer aman.

  • Klien SSH. Untuk informasi selengkapnya, lihat Menyambungkan ke HDInsight (Apache Hadoop) menggunakan SSH. Sebagian besar langkah dalam dokumen ini mengasumsikan bahwa Anda menggunakan Beeline dari sesi SSH ke kluster. Anda juga dapat menggunakan klien Beeline lokal, tetapi langkah-langkah tersebut tidak dicakup dalam artikel ini.

Menjalankan kueri Apache Hive

Contoh ini didasarkan pada penggunaan klien Beeline dari koneksi SSH.

  1. Buka koneksi SSH ke kluster dengan kode di bawah. Ganti sshuser dengan pengguna SSH untuk kluster, dan ganti CLUSTERNAME dengan nama kluster Anda. Jika diminta, masukkan kata sandi untuk akun pengguna SSH.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Hubungkan ke HiveServer2 dengan klien Beeline Anda dari sesi SSH yang terbuka dengan memasukkan perintah berikut:

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

    Catatan

    Lihat bagian "Ke kluster HDInsight Enterprise Security Package (ESP) menggunakan Kerberos" pada bagian Sambungkan ke HiveServer2 menggunakan Beeline atau instal Beeline secara lokal untuk terhubung dari lokal Anda jika Anda menggunakan kluster berkemampuan Enterprise Security Package (ESP)

  3. Perintah Beeline dimulai dengan karakter !, misalnya !help menampilkan bantuan. Namun, ! dapat dihilangkan untuk beberapa perintah. Misalnya, help juga berfungsi.

    Ada !sql, yang digunakan untuk mengeksekusi pernyataan HiveQL. Namun, HiveQL sangat umum digunakan sehingga Anda dapat menghilangkan !sql sebelumnya. Dua pernyataan berikut setara:

    !sql show tables;
    show tables;
    

    Di kluster baru, hanya satu tabel yang tercantum: hivesampletable.

  4. Gunakan perintah berikut untuk menampilkan skema untuk hivesampletable:

    describe hivesampletable;
    

    Perintah ini menampilkan informasi berikut:

    +-----------------------+------------+----------+--+
    |       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     |          |
    +-----------------------+------------+----------+--+
    

    Informasi ini menjelaskan kolom dalam tabel.

  5. Masukkan pernyataan berikut untuk membuat tabel bernama log4jLogs dengan menggunakan data sampel yang disediakan dengan kluster HDInsight: (Direvisi sesuai kebutuhan berdasarkan skema URI Anda.)

    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;
    

    Pernyataan ini melakukan tindakan berikut:

    Pernyataan Deskripsi
    DROP TABLE Jika ada, tabel akan dihapus.
    CREATE EXTERNAL TABLE Membuat tabel eksternal di Apache Hive. Tabel eksternal hanya menyimpan definisi tabel di Apache Hive. Data tetap berada di lokasi asal.
    ROW FORMAT Cara data diformat. Dalam hal ini, bidang di setiap log dipisahkan oleh spasi.
    STORED AS TEXTFILE LOCATION Tempat data disimpan dan dalam format file apa.
    SELECT Memilih jumlah semua baris tempat kolom t4 berisi nilai [ERROR] . Kueri ini menampilkan nilai 3 karena ada tiga baris yang berisi nilai ini.
    INPUT__FILE__NAME LIKE '%.log' Apache Hive mencoba menerapkan skema ke semua file dalam direktori. Dalam hal ini, direktori berisi file yang tidak cocok dengan skema. Untuk mencegah data sampah dalam hasil, pernyataan ini memberi tahu Apache Hive bahwa hanya data dari file yang berakhiran .log yang akan ditampilkan.

    Catatan

    Tabel eksternal akan digunakan saat Anda mengharapkan data yang mendasarinya untuk diperbarui oleh sumber eksternal. Misalnya, proses pengunggahan data otomatis atau operasi MapReduce.

    Menghilangkan tabel eksternal tidak akan menghapus data, hanya definisi tabel.

    Output perintah ini sama dengan teks berikut:

    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. Keluar dari Beeline:

    !exit
    

Menjalankan file HiveQL

Contoh ini merupakan kelanjutan dari contoh sebelumnya. Gunakan langkah-langkah berikut untuk membuat file, lalu jalankan menggunakan Beeline.

  1. Gunakan perintah berikut untuk membuat file bernama query.hql:

    nano query.hql
    
  2. Gunakan teks berikut sebagai konten file. Kueri ini membuat tabel 'internal' baru bernama errorLogs:

    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';
    

    Pernyataan ini melakukan tindakan berikut:

    Pernyataan Deskripsi
    CREATE TABLE IF NOT EXISTS Jika belum ada, tabel akan dibuat. Karena kata kunci EXTERNAL tidak digunakan, pernyataan ini membuat tabel internal. Tabel internal disimpan di gudang data Apache Hive dan dikelola oleh Apache Hive.
    STORED AS ORC Menyimpan data dalam format Kolom Baris yang Dioptimalkan (ORC). Format ORC adalah format yang sangat optimal dan efisien untuk menyimpan data Apache Hive.
    INSERT OVERWRITE ... SELECT Memilih baris dari tabel log4Logs yang berisi [ERROR] , lalu memasukkan data ke dalam tabel errorLogs.

    Catatan

    Tidak seperti tabel eksternal, menghilangkan tabel internal juga akan menghapus data yang mendasarinya.

  3. Untuk menyimpan file, gunakan Ctrl+X, lalu masukkan Y, dan akhirnya Enter.

  4. Gunakan berikut untuk menjalankan file menggunakan Beeline:

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

    Catatan

    Parameter -i memulai Beeline dan menjalankan pernyataan dalam file query.hql. Setelah kueri selesai, Anda tiba di perintah jdbc:hive2://headnodehost:10001/>. Anda juga dapat menjalankan file menggunakan parameter -f, yang keluar dari Beeline setelah kueri selesai.

  5. Untuk memverifikasi bahwa tabel errorLogs dibuat, gunakan pernyataan berikut untuk menampilkan semua baris dari errorLogs:

    SELECT * from errorLogs;
    

    Tiga baris data akan ditampilkan, yang semuanya berisi [ERROR] kolom t4:

    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
    | 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)
    

Langkah berikutnya