복붙노트

[HADOOP] 임팔라에서 하이브 UDF를 사용하여 임팔라 1.2.4에서 잘못된 결과를 제공합니다

HADOOP

임팔라에서 하이브 UDF를 사용하여 임팔라 1.2.4에서 잘못된 결과를 제공합니다

나는 작동하는 자바에서 두 하이브 UDF를 가지고 완벽하게 하이브한다.

두 기능은 서로 무료입니다.

String myUDF(BigInt)
BigInt myUDFReverso(String)

MYUDF ( "myInput")은 일부 출력을 제공하는 때 myUDFReverso (MYUDF ( "myInput")) myInput를 다시 제공해야

이 하이브에서 작동하지만 내가 사용하려고하면 그것은이 예상 부여합니다 임팔라 (버전 1.2.4)에서 MYUDF (에서 BigInt)에 대한 응답 (인쇄 정답이다) 하지만 myUDFReverso (문자열)에 전달 된 대답은 제공하지 않습니다 ) 원래 대답을 백업 할 수 있습니다.

나는 임팔라 1.2.4에 그 길이 (MYUDF ( "myInput")를) 발견했습니다 잘못된 것입니다. 그것은 모든 행에 대해 하나입니다. 다시 한번 이 하이브 또한 임시 올 (버전 2.1)

그래서, 추가되는 몇 가지 추가 (특수) 문자가 가정 임 1.2.4에서 MYUDF의 출력 단부 (정확하게 끝에 UDF를 함수에서 반환 된 텍스트 데이터 형식)의.

나는 cpp에있는 임팔라 1.2.4에 대한 유사한 UDF를 구축하고 그것을 올바르게 작동합니다.

이러한 모든 문제는 임팔라 2.1에서 해결하지만, 그럴 수 없어 그것은 내 클러스터를 업그레이드합니다.

어떻게 내가이 버그를 해결합니까?

참조 : http://www.cloudera.com/content/cloudera/en/documentation/cloudera-impala/v1/v1-2-4/Installing-and-Using-Impala/ciiu_udf.html

해결법

  1. ==============================

    1.이것은 2.1 임 고정 IMPALA-1134. 문제는 반환 값이 몇 가지 여분의 메모리가 문자열의 끝에서 반환 될 수 있도록 잘못된 방법으로 복사된다는 점이다. 이전에 우리가) 데이터 만 (getLength까지 말한다 getBytes ()를 사용하고 있던 것은 유효합니다. 나는, 출력에 다음 반전 기능의 실제 길이를 인코딩하려고 실제 길이를 가지고 만 유효 부분을 사용하는 것이 가능할 수 있다고 생각. 그러나이 꽤 힘들 것 같다. 나는 매우 많은 버그 수정 1.4 이후 있기 때문에 임팔라의 최신 버전으로 업그레이드 할 수있는 방법을 찾는 것을 권 해드립니다.

    이것은 2.1 임 고정 IMPALA-1134. 문제는 반환 값이 몇 가지 여분의 메모리가 문자열의 끝에서 반환 될 수 있도록 잘못된 방법으로 복사된다는 점이다. 이전에 우리가) 데이터 만 (getLength까지 말한다 getBytes ()를 사용하고 있던 것은 유효합니다. 나는, 출력에 다음 반전 기능의 실제 길이를 인코딩하려고 실제 길이를 가지고 만 유효 부분을 사용하는 것이 가능할 수 있다고 생각. 그러나이 꽤 힘들 것 같다. 나는 매우 많은 버그 수정 1.4 이후 있기 때문에 임팔라의 최신 버전으로 업그레이드 할 수있는 방법을 찾는 것을 권 해드립니다.

  2. from https://stackoverflow.com/questions/30125455/using-hive-udf-in-impala-gives-erroneous-results-in-impala-1-2-4 by cc-by-sa and MIT license