Hive 플러그인
Hive 플러그인 (Plugins) - 커스텀 UDF 만들기
Hive에서 사용자 정의 함수(UDF)를 만들어 플러그인처럼 확장하는 방법을 설명해요. UDF 클래스를 작성하고 jar로 배포·등록하는 전체 흐름을 다룹니다.
출처: 문서
본문
커스텀 UDF 만들기 (Creating Custom UDFs)
먼저 UDF를 상속하고 evaluate라는 이름의 메서드를 하나 이상 가진 새 클래스를 만들어야 합니다.
package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public final class Lower extends UDF {
public Text evaluate(final Text s) {
if (s == null) { return null; }
return new Text(s.toString().toLowerCase());
}
}
(이 기능에는 이미 내장 함수가 있으니, 이건 쉬운 예시일 뿐입니다).
코드를 jar로 컴파일한 뒤에는 이것을 Hive 클래스패스에 추가해야 합니다. 아래의 jar 배포 섹션을 참고하세요.
Hive가 jar를 클래스패스에 두고 시작되면, 마지막 단계는 Create Function에서 설명한 대로 함수를 등록하는 것입니다:
create temporary function my_lower as 'com.example.hive.udf.Lower';
이제 사용할 수 있습니다:
hive> select my_lower(title), sum(freq) from titles group by my_lower(title);
...
Ended Job = job_200906231019_0006
OK
cmo 13.0
vp 7.0
더 복잡한 예시는 이 페이지를 참고하세요.
Hive 0.13부터는 현재 데이터베이스나 지정된 데이터베이스에 함수를 영구 UDF로 등록할 수 있습니다(Permanent Functions 참고). 예를 들어:
create function my_db.my_lower as 'com.example.hive.udf.Lower';
사용자 정의 함수와 SerDe용 jar 배포 (Deploying Jars for User Defined Functions and User Defined SerDes)
UDF를 사용하려면 먼저 코드를 클래스패스에 추가해야 합니다:
hive> add jar my_jar.jar;
Added my_jar.jar to class path
기본적으로 현재 디렉터리에서 찾습니다. 전체 경로를 지정할 수도 있습니다:
hive> add jar /tmp/my_jar.jar;
Added my_jar.jar to class path
그러면 그 세션에서 시작된 모든 작업의 클래스패스에 jar가 놓입니다. 클래스패스에 추가된 jar 목록을 보려면:
hive> list jars;
my_jar.jar
전체 구문과 더 많은 예시는 Hive CLI를 참고하세요.
Hive 0.13부터 UDF는 CREATE FUNCTION 문에서 필요한 jar를 지정할 수도 있습니다:
CREATE FUNCTION myfunc AS 'myclass' USING JAR 'hdfs:///path/to/jar';
이것은 그 jar에 ADD JAR를 호출한 것처럼 클래스패스에 추가합니다.
더 알아보기 (Learn more)
커스텀 UDF는 UDF를 상속받아 evaluate 메서드를 구현하고, jar로 컴파일한 뒤 add jar로 클래스패스에 넣고 create temporary function으로 등록해 사용해요. Hive 0.13부터는 영구 등록이나 CREATE FUNCTION ... USING JAR로 jar를 함께 지정할 수도 있습니다.