2011-10-20 9 views
3

말하자면, 건설 중 로컬 파일에서 정적 데이터를로드해야하는 StaticLookupUDF라는 UDF 클래스를 작성하고 있습니다.하이브는 각 레코드에 대해 새 UDF 개체를 인스턴스화합니까?

이 경우 나는 evaluate() 메소드를 호출 할 때마다 정적 데이터를 다시로드하고 싶지 않다는 점에서 필자가 원하는 것 이상으로 작업을 복제하지 않도록하고 싶습니다.

분명히 각 매퍼는 자신의 UDF 인스턴스화를 사용하지만 분명히 처리되는 각 레코드에 대해 새 인스턴스가 생성됩니까?

예를 들어의 경우 매퍼가 3 행을 처리합니다. 그것은 하나의 StaticLookupUDF를 만들고 evaluate()을 세 번 호출합니까, 아니면 각 레코드에 대해 새로운 StaticLookupUDF를 만들고 인스턴스마다 한 번만 호출합니까?

두 번째 예가 참이라면 대체 방법으로 이것을 구조화해야합니까?

문서에서 어디에서나이 코드를 찾을 수 없지만 코드를 살펴 보겠습니다.하지만 똑똑한 사람들에게 동시에 물어볼 것이라고 생각했습니다.

+0

정적 데이터가로드되는 횟수는 확실하지 않지만 바람직하지 않은 방법으로로드 된 경우 stdin에서 읽고 stdout에 쓰는 스크립트/jar를 통해 데이터를 스트리밍 할 수 있습니다. 이 경우에는 정적 데이터가 작업자 프로세스 당 한 번로드됩니다. –

+0

내가 어떻게 처리하는지 조금 자세히 설명해 주시겠습니까? –

+0

나는이 대답 (http://stackoverflow.com/questions/6178614/custom-map-reduce-program-on-hive-whats-the-rulehow-about-input-and-output/6840802#6840802)에서 이것을 언급했다. , 그리고 당신은이 위키를 확인할 수 있습니다. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Transform –

답변

1

아직도 완전히 확신 할 수 없지만 필요한만큼 데이터를로드하는 정적 인 게으른 값을 가짐으로써이 문제를 해결했습니다.

이렇게하면 매퍼마다 정적 값의 인스턴스가 하나 있습니다. 따라서 데이터 세트를 읽고 6 회의지도 작업을 수행하면 데이터를 6 번 읽습니다. 이상적은 아니지만 레코드 당 한 번 낫다.