All Products
Search
Document Center

E-MapReduce:User-defined functions (UDFs)

Last Updated:Mar 27, 2026

Apache Hive menyediakan banyak fungsi bawaan untuk pemrosesan data. Jika fungsi bawaan tidak mencakup logika yang Anda butuhkan—seperti transformasi string kustom, enkripsi data, atau perhitungan spesifik domain—Anda dapat membuat user-defined function (UDF) sebagai gantinya.

Jenis UDF

Apache Hive mendukung tiga jenis UDF:

TypeFull nameBehavior
UDFUser-defined scalar functionPemetaan satu-ke-satu: membaca satu baris, mengembalikan satu nilai
UDTFUser-defined table-valued functionMengembalikan beberapa baris per input; satu-satunya jenis yang dapat mengembalikan multiple fields
UDAFUser-defined aggregate functionPemetaan banyak-ke-satu: mengagregasi beberapa baris menjadi satu nilai output; digunakan dengan GROUP BY

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster E-MapReduce (EMR) dengan akses SSH. Lihat Log on to a cluster

  • Java Development Kit (JDK) yang telah diinstal

  • Apache Maven yang telah diinstal dan dikonfigurasi

  • Lingkungan pengembangan terintegrasi (IDE) untuk pengembangan Java

Kembangkan kode UDF

Bagian ini menjelaskan langkah-langkah membuat UDF sederhana yang menambahkan :HelloWorld ke string input.

1. Buat proyek Maven

Di IDE Anda, buat proyek Maven baru dengan koordinat berikut. Sesuaikan groupId dan artifactId agar sesuai dengan organisasi dan nama proyek Anda.

<groupId>org.example</groupId>
<artifactId>hiveudf</artifactId>
<version>1.0-SNAPSHOT</version>

2. Tambahkan dependensi Hive

Tambahkan dependensi berikut ke file pom.xml Anda:

<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. Implementasikan kelas UDF

Buat kelas yang memperluas org.apache.hadoop.hive.ql.exec.UDF dan implementasikan metode evaluate(). Nama kelas dapat berupa apa saja; contoh ini menggunakan MyUDF.

package org.example;

import org.apache.hadoop.hive.ql.exec.UDF;

public class MyUDF extends UDF {
    public String evaluate(final String s) {
        if (s == null) { return null; }
        return s + ":HelloWorld";
    }
}

4. Bangun file JAR

Di direktori yang berisi file pom.xml, jalankan perintah berikut:

mvn clean package -DskipTests

File JAR hasil build, yaitu hiveudf-1.0-SNAPSHOT.jar, akan tersedia di direktori target.

Deploy dan daftarkan UDF

1. Transfer JAR ke kluster Anda

Gunakan SSH Secure File Transfer Client untuk mengunggah file hiveudf-1.0-SNAPSHOT.jar ke direktori root kluster EMR Anda.

2. Unggah JAR ke HDFS

  1. Login ke kluster Anda melalui SSH.

  2. Unggah file JAR ke Hadoop Distributed File System (HDFS):

    hadoop fs -put hiveudf-1.0-SNAPSHOT.jar /user/hive/warehouse/
  3. Verifikasi bahwa unggahan berhasil:

    hadoop fs -ls /user/hive/warehouse/

    Output yang diharapkan:

    Found 1 items
    -rw-r--r--   1 xx xx 2668 2021-06-09 14:13 /user/hive/warehouse/hiveudf-1.0-SNAPSHOT.jar

3. Daftarkan UDF di Hive

Buka Hive CLI:

hive

Daftarkan UDF sebagai fungsi permanen:

create function myfunc as "org.example.MyUDF" using jar "hdfs:///user/hive/warehouse/hiveudf-1.0-SNAPSHOT.jar";

Dalam perintah tersebut:

ParameterDescription
myfuncNama fungsi yang digunakan dalam kueri
org.example.MyUDFNama kelas lengkap dari JAR
hdfs:///user/hive/warehouse/hiveudf-1.0-SNAPSHOT.jarPath HDFS ke file JAR

Jika pendaftaran berhasil, outputnya akan mirip dengan:

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]

4. Uji UDF

Panggil UDF dalam kueri seperti fungsi bawaan lainnya:

select myfunc("abc");

Output yang diharapkan:

OK
abc:HelloWorld

Untuk memastikan fungsi telah terdaftar, jalankan perintah berikut:

SHOW FUNCTIONS LIKE '*myfunc*';

Pemecahan Masalah

Perintah `create function` gagal dengan error class not found

Pastikan nama kelas dalam pernyataan create function sesuai dengan nama kelas lengkap di file JAR Anda, termasuk awalan paketnya. Misalnya, jika kelas Anda adalah MyUDF dalam paket org.example, referensinya harus berupa org.example.MyUDF, bukan hanya MyUDF.

UDF mengembalikan `null` untuk semua input

Periksa logika penanganan nilai null pada metode evaluate(). Implementasi contoh mengembalikan null ketika inputnya null. Jika fungsi Anda seharusnya menangani nilai null secara berbeda, perbarui metode tersebut sesuai kebutuhan.

Referensi