全部产品
Search
文档中心

Elasticsearch:Gunakan ES-Hadoop untuk mengaktifkan Hive menulis data ke dan membaca data dari Alibaba Cloud Elasticsearch

更新时间:Jul 06, 2025

Elasticsearch-Hadoop (ES-Hadoop) adalah alat yang dikembangkan oleh Elasticsearch open source. Alat ini menghubungkan Elasticsearch dengan Apache Hadoop dan memungkinkan transmisi data di antara keduanya. ES-Hadoop menggabungkan kemampuan pencarian cepat dari Elasticsearch dan kemampuan pemrosesan batch dari Hadoop untuk mencapai pemrosesan data interaktif. Topik ini menjelaskan cara menggunakan ES-Hadoop untuk mengaktifkan Hive menulis data ke dan membaca data dari Alibaba Cloud Elasticsearch serta membantu Anda menggabungkan Elasticsearch dengan Hadoop untuk menerapkan analitik data yang lebih fleksibel.

Informasi latar belakang

Hadoop dapat menangani dataset besar. Namun, ketika digunakan untuk analitik interaktif, latensi tinggi terjadi. Elasticsearch memiliki keunggulan dibandingkan Hadoop dalam analitik interaktif karena dapat merespons permintaan, terutama permintaan ad hoc, dalam hitungan detik. ES-Hadoop menggabungkan keunggulan Hadoop dan Elasticsearch. ES-Hadoop memungkinkan Anda melakukan hanya beberapa modifikasi kode untuk memproses data yang disimpan di Elasticsearch, serta memberikan pengalaman query yang dipercepat.

ES-Hadoop menggunakan Elasticsearch sebagai sumber data untuk mesin pemrosesan data seperti MapReduce, Spark, dan Hive. ES-Hadoop juga menggunakan Elasticsearch sebagai penyimpanan dalam arsitektur pemisahan komputasi-penyimpanan. Elasticsearch bekerja mirip dengan sumber data lainnya dari MapReduce, Spark, dan Hive, tetapi dapat memilih dan menyaring data secara lebih cepat. Hal ini sangat penting bagi mesin analitik.ES-Hadoop架构原理图

Untuk informasi lebih lanjut tentang konfigurasi lanjutan ES-Hadoop dan Hive, lihat dokumentasi Elasticsearch open source.

Prosedur

  1. Lakukan Persiapan

    Buat kluster Elasticsearch Alibaba Cloud dan kluster E-MapReduce (EMR) di virtual private cloud (VPC) yang sama, nonaktifkan fitur Auto Indexing untuk kluster Elasticsearch, buat indeks di kluster Elasticsearch, dan konfigurasikan pemetaan untuk indeks tersebut.

  2. Langkah 1: Unggah Paket JAR ES-Hadoop ke HDFS

    Unduh paket ES-Hadoop yang kompatibel dengan versi kluster Elasticsearch, dan unggah paket ES-Hadoop ke direktori HDFS pada node master kluster EMR.

  3. Langkah 2: Buat Tabel Eksternal Hive

    Buat tabel eksternal Hive dan peta bidang dalam tabel dengan bidang dalam indeks kluster Elasticsearch.

  4. Langkah 3: Gunakan Hive untuk Menulis Data ke Indeks

    Gunakan HiveSQL untuk menulis data ke indeks kluster Elasticsearch.

  5. Langkah 4: Gunakan Hive untuk Membaca Data dari Indeks

    Gunakan HiveSQL untuk membaca data dari indeks kluster Elasticsearch.

Lakukan persiapan

  1. Buat Kluster Elasticsearch Alibaba Cloud.

    Dalam contoh ini, kluster Elasticsearch V6.7.0 dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster Elasticsearch Alibaba Cloud.

  2. Nonaktifkan Fitur Auto Indexing untuk Kluster, Buat Indeks di Kluster, dan Konfigurasikan Pemetaan untuk Indeks.

    Jika Anda mengaktifkan fitur Auto Indexing untuk kluster, indeks yang dibuat secara otomatis oleh kluster Elasticsearch mungkin tidak sesuai dengan kebutuhan Anda. Misalnya, Anda mendefinisikan bidang age dengan tipe data INT dan mengaktifkan fitur Auto Indexing. Dalam hal ini, tipe data bidang age mungkin menjadi LONG di indeks. Oleh karena itu, kami sarankan Anda menonaktifkan fitur Auto Indexing. Indeks bernama company dibuat dalam contoh ini. Kode berikut menunjukkan indeks ini dan pemetaannya:

    PUT company
    {
      "mappings": {
        "_doc": {
          "properties": {
            "id": {
              "type": "long"
            },
            "name": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            },
            "birth": {
              "type": "text"
            },
            "addr": {
              "type": "text"
            }
          }
        }
      },
      "settings": {
        "index": {
          "number_of_shards": "5",
          "number_of_replicas": "1"
        }
      }
    }
  3. Buat Kluster EMR yang Berada di VPC yang Sama dengan Kluster Elasticsearch.

    Penting

    Secara default, 0.0.0.0/0 ditentukan dalam daftar putih alamat IP privat kluster Elasticsearch. Anda dapat melihat konfigurasi whitelist pada halaman konfigurasi keamanan kluster. Jika pengaturan default tidak digunakan, Anda harus menambahkan alamat IP privat kluster EMR ke daftar putih.

Langkah 1: Unggah paket JAR ES-Hadoop ke HDFS

  1. Unduh Paket ES-Hadoop yang Kompatibel dengan Versi Kluster Elasticsearch.

    Paket elasticsearch-hadoop-6.7.0.zip digunakan dalam contoh ini.

  2. Masuk ke Konsol EMR dan peroleh alamat IP node master kluster EMR. Kemudian, gunakan SSH untuk masuk ke instance Elastic Compute Service (ECS) yang ditunjukkan oleh alamat IP tersebut.

    Untuk informasi lebih lanjut, lihat Masuk ke Kluster.

  3. Unggah paket elasticsearch-hadoop-6.7.0.zip ke node master, dan ekstrak paket tersebut untuk mendapatkan file elasticsearch-hadoop-hive-6.7.0.jar.

  4. Buat Direktori HDFS dan Unggah File elasticsearch-hadoop-hive-6.7.0.jar ke Direktori Tersebut.

    hadoop fs -mkdir /tmp/hadoop-es
    hadoop fs -put elasticsearch-hadoop-6.7.0/dist/elasticsearch-hadoop-hive-6.7.0.jar /tmp/hadoop-es

Langkah 2: Buat tabel eksternal Hive

  1. Pada tab Data Platform di Konsol EMR, buat pekerjaan HiveSQL.

    Untuk informasi lebih lanjut, lihat Konfigurasikan Pekerjaan Hive SQL.创建HiveSQL作业

  2. Konfigurasikan Pekerjaan dan Buat Tabel Eksternal Hive.

    Kode berikut menunjukkan konfigurasi pekerjaan:

    ####Tambahkan file JAR, yang hanya valid untuk sesi saat ini.########
    add jar hdfs:///tmp/hadoop-es/elasticsearch-hadoop-hive-6.7.0.jar;
    ####Buat tabel eksternal Hive dan peta tabel dengan indeks kluster Elasticsearch.####
    CREATE EXTERNAL table IF NOT EXISTS company( 
       id BIGINT,
       name STRING,
       birth STRING,
       addr STRING 
    )  
    STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' 
    TBLPROPERTIES(  
        'es.nodes' = 'http://es-cn-mp91kzb8m0009****.elasticsearch.aliyuncs.com',
        'es.port' = '9200',
        'es.net.ssl' = 'true', 
        'es.nodes.wan.only' = 'true', 
        'es.nodes.discovery'='false',
        'es.input.use.sliced.partitions'='false',
        'es.input.json' = 'false',
        'es.resource' = 'company/_doc',
        'es.net.http.auth.user' = 'elastic', 
        'es.net.http.auth.pass' = 'xxxxxx'
    );

    Tabel 1. Parameter ES-Hadoop

    Parameter

    Nilai default

    Deskripsi

    es.nodes

    localhost

    Titik akhir yang digunakan untuk mengakses kluster Elasticsearch. Kami sarankan Anda menggunakan titik akhir internal. Anda dapat memperoleh titik akhir internal pada halaman Informasi Dasar kluster Elasticsearch. Untuk informasi lebih lanjut, lihat Lihat informasi dasar kluster.

    es.port

    9200

    Nomor port yang digunakan untuk mengakses kluster Elasticsearch.

    es.net.http.auth.user

    elastic

    Nama pengguna yang digunakan untuk mengakses kluster Elasticsearch.

    Catatan

    Jika Anda menggunakan akun elastic untuk mengakses kluster Elasticsearch Anda dan mengatur ulang kata sandi akun tersebut, mungkin diperlukan waktu agar kata sandi baru berlaku. Selama periode ini, Anda tidak dapat menggunakan akun elastic untuk mengakses kluster. Oleh karena itu, kami sarankan Anda tidak menggunakan akun elastic untuk mengakses kluster Elasticsearch. Anda dapat masuk ke konsol Kibana dan membuat pengguna dengan peran yang diperlukan untuk mengakses kluster Elasticsearch. Untuk informasi lebih lanjut, lihat Gunakan mekanisme RBAC yang disediakan oleh Elasticsearch X-Pack untuk menerapkan kontrol akses.

    es.net.http.auth.pass

    /

    Kata sandi yang digunakan untuk mengakses kluster Elasticsearch.

    es.nodes.wan.only

    false

    Menentukan apakah akan mengaktifkan sniffing node ketika kluster Elasticsearch menggunakan alamat IP virtual untuk koneksi. Nilai valid:

    • true: mengaktifkan sniffing node.

    • false: menonaktifkan sniffing node.

    es.nodes.discovery

    true

    Menentukan apakah akan mengaktifkan mekanisme penemuan node. Nilai valid:

    • true: mengaktifkan mekanisme penemuan node.

    • false: menonaktifkan mekanisme penemuan node.

    Penting

    Jika Anda menggunakan Alibaba Cloud Elasticsearch, Anda harus mengatur parameter ini ke false.

    es.input.use.sliced.partitions

    true

    Menentukan apakah akan menggunakan partisi. Nilai valid:

    • true: menggunakan partisi. Dalam hal ini, mungkin diperlukan lebih banyak waktu untuk fase pembacaan indeks sebelumnya. Waktu yang diperlukan untuk fase ini mungkin lebih lama daripada waktu yang diperlukan untuk kueri data. Untuk meningkatkan efisiensi kueri, kami sarankan Anda mengatur parameter ini ke false.

    • false: tidak menggunakan partisi.

    es.index.auto.create

    true

    Menentukan apakah sistem membuat indeks di kluster Elasticsearch ketika Anda menggunakan ES-Hadoop untuk menulis data ke kluster. Nilai valid:

    • true: Sistem membuat indeks di kluster Elasticsearch.

    • false: Sistem tidak membuat indeks di kluster Elasticsearch.

    es.resource

    /

    Nama dan jenis indeks tempat operasi baca atau tulis data dilakukan.

    es.mapping.names

    /

    Pemetaan antara nama bidang dalam tabel dan nama bidang dalam indeks kluster Elasticsearch.

    es.read.metadata

    false

    Menentukan apakah akan menyertakan metadata dokumen seperti _id dalam hasil. Untuk menyertakan metadata dokumen, atur nilainya ke true.

    Untuk informasi lebih lanjut tentang item konfigurasi ES-Hadoop, lihat Konfigurasi ES-Hadoop Open Source.

  3. Simpan dan Jalankan Pekerjaan.

    保存并运行作业

    Jika pekerjaan berhasil dijalankan, hasil yang ditunjukkan pada gambar berikut dikembalikan.运行结果

Langkah 3: Gunakan Hive untuk menulis data ke indeks

  1. Buat pekerjaan penulisan data HiveSQL.

    Kode berikut menunjukkan konfigurasi pekerjaan:

    add jar hdfs:///tmp/hadoop-es/elasticsearch-hadoop-hive-6.7.0.jar;
    INSERT INTO TABLE company VALUES (1, "zhangsan", "1990-01-01","No.969, wenyixi Rd, yuhang, hangzhou");
    INSERT INTO TABLE company VALUES (2, "lisi", "1991-01-01", "No.556, xixi Rd, xihu, hangzhou");
    INSERT INTO TABLE company VALUES (3, "wangwu", "1992-01-01", "No.699 wangshang Rd, binjiang, hangzhou");
  2. Simpan dan Jalankan Pekerjaan.

    保存并运行写数据作业

  3. Jika pekerjaan berhasil dijalankan, masuk ke Konsol Kibana Kluster Elasticsearch dan kueri data dalam indeks company.

    Untuk informasi lebih lanjut tentang cara masuk ke Konsol Kibana, lihat Masuk ke Konsol Kibana. Anda dapat menjalankan perintah berikut untuk mengkueri data dalam indeks company:

    GET company/_search

    Jika perintah berhasil dijalankan, hasil yang ditunjukkan pada gambar berikut dikembalikan.写数据结果

Langkah 4: Gunakan Hive untuk membaca data dari indeks

  1. Buat Pekerjaan Pembacaan Data HiveSQL.

    Kode berikut menunjukkan konfigurasi pekerjaan:

    add jar hdfs:///tmp/hadoop-es/elasticsearch-hadoop-hive-6.7.0.jar;
    select * from company;
  2. Simpan dan Jalankan Pekerjaan.

    保存并运行读数据作业

FAQ

T: Apa yang harus saya lakukan jika pesan kesalahan berikut dilaporkan ketika Hive membaca data dari dan menulis data ke Elasticsearch?

FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Could not initialize class org.elasticsearch.hadoop.rest.commonshttp.CommonsHttpTransport.

A: Pesan kesalahan dilaporkan karena file commons-httpclient-3.1.jar tidak ada untuk komponen Hive di kluster EMR V5.6.0 Anda. Untuk menyelesaikan masalah ini, tambahkan file tersebut secara manual ke direktori lib Hive. Untuk informasi lebih lanjut, lihat commons-httpclient-3.1.