2016-11-02 5 views
0

현재 Java MapReduce 작업을 수행하고 있습니다.이 작업은 양동이가 된 하이브 테이블에 데이터를 출력해야합니다.Java MapReduce 작업에서 하이브에 쓰기

나는 두 가지 방법을 생각 :

먼저 직접 HCatalog를 통해 하이브 물품. 문제는이 접근 방식이 양동이로 된 하이브 테이블에 쓰는 것을 지원하지 않는다는 것입니다. 따라서 버킷 하이브 테이블을 사용할 때 먼저 버킷이없는 테이블에 작성한 다음 버킷 된 테이블에 복사해야합니다.

두 번째 옵션은 텍스트 파일에 출력을 쓰고 나중에이 데이터를 하이브에로드하는 것입니다.

가장 좋은 방법은 무엇입니까?

방대한 양의 데이터 (메모리 및 소요 시간과 관련하여)에서 어떤 접근 방식이 더 효과적입니까?

양동이가 아닌 하이브 테이블을 사용할 수 있다면 어떤 방법이 더 좋을까요?

고맙습니다.

+0

내가 제대로 이해하는지 확실하지 않습니다. 필요한 경우 버킷 출력을 생성 한 다음 mapreduce 여러 출력 형식을 사용하여 버킷을 만듭니다. 또는 내부적으로 버킷을 만드는 하이브 버킷 테이블에 데이터를 직접로드하십시오. –

답변

1

버킷이없는 테이블의 경우 MapReduce 출력을 테이블 저장 위치에 저장할 수 있습니다. 그런 다음 MSCK REPAIR TABLE을 실행하여 메타 데이터를 새 파티션으로 업데이트하면됩니다.

하이브로드 명령은 실제로 데이터를 테이블 저장 위치에 복사합니다. HIVE documentation에서 또한

: 생성 명령에 의해

클러스터 BY

및 SORTED 테이블에 삽입하는 방법을 데이터에 영향을주지 않는 -이 읽기 전용 방법에 대해 설명합니다. 즉, 사용자는 버킷 수와 같은 축소 자 수를 지정하고 쿼리에 CLUSTER BY 및 SORT BY 명령을 사용하여 데이터를 올바르게 삽입해야합니다.

이러한 제약 사항에 맞게 MapReduce 출력을 조정해야합니다.

+0

감사합니다. @Alex L.! 버킷 팅을 이해함에 따라 하나의 열에 값을 해시하여 버킷 중 하나에 저장되는 해시 기능을 수행합니다. 그럼 어떻게 든 맵핑과 줄이기 사이의 셔플 단계에서이 값을 이미 어떻게 든 해시해야하고 감속기의 버킷에 따라 값을 줄여야합니까? – tralala

+0

그럴 것 같습니다. HIVE를 사용하여 MapReduce 작업을 쉽게 리버스 엔지니어링 할 수 있도록 일부 샘플 버켓 테이블을 생성합니다. –

관련 문제