全部产品
Search
文档中心

E-MapReduce:UDFs

更新时间:Jun 24, 2025

Hive menyediakan berbagai fungsi bawaan. Jika fungsi bawaan tidak memenuhi kebutuhan komputasi Anda, Anda dapat membuat fungsi yang ditentukan pengguna (UDFs). UDFs dapat digunakan seperti fungsi bawaan umum. Topik ini menjelaskan cara mengembangkan dan menggunakan UDFs.

Informasi latar belakang

Tabel berikut menjelaskan jenis-jenis UDFs.
Jenis UDFDeskripsi
Fungsi skalar yang ditentukan pengguna (UDF)Input dan output UDF memiliki pemetaan satu-satu. Setiap kali UDF dipanggil, ia membaca satu baris data dan mengembalikan satu nilai data.
Fungsi bernilai tabel yang ditentukan pengguna (UDTF)Setiap kali UDTF dipanggil, ia mengembalikan beberapa baris data. Di antara semua jenis UDF, hanya UDTF yang dapat mengembalikan beberapa bidang.
Fungsi agregat yang ditentukan pengguna (UDAF)Input dan output UDAF memiliki pemetaan banyak-ke-satu. Setiap kali UDAF dipanggil, ia menggabungkan beberapa catatan input menjadi satu nilai output. Anda dapat menggunakan UDAF dengan klausa GROUP BY dalam pernyataan SQL.

Kembangkan kode UDF

  1. Gunakan lingkungan pengembangan terintegrasi (IDE) untuk membuat proyek Maven.
    Kode berikut menunjukkan informasi dasar proyek. Anda dapat mengonfigurasi parameter groupId dan artifactId sesuai dengan kebutuhan bisnis Anda.
    <groupId>org.example</groupId>
    <artifactId>hiveudf</artifactId>
    <version>1.0-SNAPSHOT</version>
  2. Tambahkan dependensi berikut ke file pom.xml:
    <dependency>
          <groupId>org.apache.hive</groupId>
          <artifactId>hive-exec</artifactId>
          <version>2.3.7</version>
          <exclusions>
             <exclusion>
               <groupId>org.pentaho</groupId>
               <artifactId>*</artifactId>
             </exclusion>
          </exclusions>
    </dependency>
  3. Buat kelas yang mewarisi kelas UDF Hive.
    Anda dapat menentukan nama kelas. Dalam contoh ini, nama kelas adalah MyUDF.
    package org.example;
    
    import org.apache.hadoop.hive.ql.exec.UDF;
    
    /**
     * Hello world!
     *
     */
    public class MyUDF extends UDF
    {
        public String evaluate(final String s) {
            if (s == null) { return null; }
            return s + ":HelloWorld";
        }
    }
  4. Kemas kode kustom ke dalam file JAR.
    Di direktori tempat file pom.xml disimpan, jalankan perintah berikut untuk membuat file JAR:
    mvn clean package -DskipTests
    File hiveudf-1.0-SNAPSHOT.jar muncul di direktori target. Pengembangan kode selesai.

Buat dan gunakan UDF

  1. Gunakan SSH Secure File Transfer Client untuk mengunggah file JAR yang dihasilkan ke direktori root kluster E-MapReduce (EMR) Anda.
    Pastikan bahwa SSH Secure File Transfer Client telah diinstal di komputer Anda sebelum melakukan langkah ini.
  2. Unggah file JAR ke Hadoop Distributed File System (HDFS).
    1. Masuk ke kluster Anda dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke kluster.
    2. Jalankan perintah berikut untuk mengunggah file JAR ke HDFS:
      hadoop fs -put hiveudf-1.0-SNAPSHOT.jar /user/hive/warehouse/
      Anda dapat menjalankan perintah hadoop fs -ls /user/hive/warehouse/ untuk memeriksa apakah unggahan berhasil. Jika informasi berikut dikembalikan, unggahan berhasil:
      Found 1 items
      -rw-r--r--   1 xx xx 2668 2021-06-09 14:13 /user/hive/warehouse/hiveudf-1.0-SNAPSHOT.jar
  3. Buat UDF.
    1. Jalankan perintah berikut untuk membuka CLI Hive:
      hive
    2. Jalankan perintah berikut untuk membuat UDF berdasarkan file JAR yang diunggah:
      create function myfunc as "org.example.MyUDF" using jar "hdfs:///user/hive/warehouse/hiveudf-1.0-SNAPSHOT.jar";

      Dalam perintah tersebut, myfunc adalah nama UDF, org.example.MyUDF adalah kelas yang dibuat di bagian Kembangkan Kode UDF, dan hdfs:///user/hive/warehouse/hiveudf-1.0-SNAPSHOT.jar adalah jalur HDFS ke mana file JAR diunggah.

      Jika informasi berikut dikembalikan, UDF telah dibuat:
      Added [/private/var/folders/2s/wzzsgpn13rn8rl_0fc4xxkc00000gp/T/40608d4a-a0e1-4bf5-92e8-b875fa6a1e53_resources/hiveudf-1.0-SNAPSHOT.jar] to class path
      Added resources: [hdfs:///user/hive/warehouse/myfunc/hiveudf-1.0-SNAPSHOT.jar]
      null Anda juga dapat menjalankan perintah SHOW FUNCTIONS LIKE '*myfunc*' untuk memeriksa apakah UDF telah dibuat.
  4. Jalankan perintah berikut untuk menggunakan UDF.
    Anda dapat menentukan nama UDF dalam perintah untuk menggunakan UDF seperti halnya fungsi bawaan.
    select myfunc("abc");
    Informasi berikut dikembalikan:
    OK
    abc:HelloWorld

Referensi