본문 바로가기

udaf4

[hive] collect_list()와 같은 UDAF 함수의 GC 오류 해결 방법 하이브 기본 UDAF를 사용하는 중에 Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded 오류가 발생하는 경우가 있습니다. collect_list(), collect_set()을 이용하는 경우 발생할 수 있는데 너무 많은 데이터가 집계되어 JVM의 힙사이즈를 넘어설 때 많이 발생합니다. 이럴 때는 하나의 맵에서 처리하는 데이터를 줄이고, 컨테이너의 메모리를 늘려서 문제를 해결할 수 있습니다. -- 매퍼 개수 조정 set mapreduce.input.fileinputformat.split.maxsize=8000000; set mapreduce.input.fileinputformat.split.minsize=4000000; set tez.gr.. 2020. 6. 1.
[hive] UDF에서 발생하는 argument type mismatch 오류 수정 hive udf에서 java.lang.illegalargumentexception argument type mismatch 오류가 발생하는 경우는 파라미터로 전달하는 타입이 설정과 달라서 발생합니다. 아래와 같은 경우 evaluate UDF의 입력값으로 String 이 전달되어야 하는데 다른 타입이 전달되면 오류가 발생합니다. 일반적인 경우에는 타입이 다르다는 것을 알 수 있지만 함수의 중첩으로 처리하는 경우에는 이 오류를 정확하게 확인하기가 어렵습니다. public class SampleUDF extends UDF { public Text evaluate(String text) { // 입력받은 문자를 대문자로 반환 return new Text(text.toUpperCase()); } } 함수의 중첩 .. 2020. 1. 14.
[hive] UDAF 구현 예제 UDAF는 AbstractGenericUDAFResolver를 상속하여 구현한다.Resolver 클래스전달파라미터를 체크실제 처리 프로세스 구현체(GenericUDAFEvaluator 구현)를 반환Evaluator 클래스 init(), merge(), terminatePartial() 등의 실제 처리 구현 getNewAggregationBuffer() - 집계에 사용할 AggregationBuffer 반환reset - aggregation 이 재사용될 때의 처리init - 입력 받는 아규먼트와 반환값의 타입을 지정iterate - 매퍼가 동작하는 동안 반복하는 작업terminatePartial - 부분적으로 집계작업을 종류할 때 작업merge - 집계작업의 결과를 머지할 때 terminate - 작업이 .. 2017. 3. 27.
[hive] 하이브의 UDF, UDAF, UDTF 하이브의 UDF는 UDF, UDAF, UDTF 로 구분된다. UDF: 한개의 행에서 동작한다. 입력과 출력은 하나이다. ex) TRIM()UDAF: 집계 함수이다. 여러 행의 데이터를 집계하여 하나의 결과를 출력합니다. ex) COUNT(), SUM()UDTF: 하나의 행을 입력으로 받아서 여러행의 데이터를 반환한다. ex) EXPLODE() 하이브에서 제공하는 기본 UDF를 이용할 수 있고, 사용자가 UDF 를 만들어서 적용할 수 도 있다. 사용자가 UDF를 만들어서 적용하는 방법은 다음과 같다. package sdk.hadoop.hive; import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.hadoop.io.Text; public final cl.. 2017. 3. 22.