[HADOOP] Hive / Hadoop의 고유 한 키 생성
HADOOPHive / Hadoop의 고유 한 키 생성
큰 데이터 하이브 테이블에서 레코드 집합을 선택하는 동안 각 레코드마다 고유 한 키를 만들어야합니다. 순차적 인 연산 모드에서는 max (id)와 같은 것을 호출함으로써 고유 한 id를 생성하는 것이 쉽습니다. 하이브는 작업을 병렬로 실행하기 때문에, 어떻게 우리가 선택한 쿼리의 일부로 고유 키를 생성 할 수 있으며, hadoop의 성능을 손상시키지 않습니다. 이것은 실제로지도를 줄이는 문제입니까 아니면 이것을 해결하기 위해 순차적 인 접근 방식을 취해야합니까?
해결법
-
==============================
1.어떤 이유로 UUID를 다루지 않으려는 경우 (숫자 값을 기반으로 한)이 솔루션은 병렬 장치가 서로 "말하고"또는 무엇이든 동기화 할 필요가 없습니다. 따라서 매우 효율적이지만 정수 키가 연속적 일 수는 없습니다.
어떤 이유로 UUID를 다루지 않으려는 경우 (숫자 값을 기반으로 한)이 솔루션은 병렬 장치가 서로 "말하고"또는 무엇이든 동기화 할 필요가 없습니다. 따라서 매우 효율적이지만 정수 키가 연속적 일 수는 없습니다.
N 개의 병렬 실행 단위가 있고 N을 알고 있고 각 단위에 0에서 N - 1까지의 ID가 할당 된 경우 모든 단위에서 고유 한 정수를 간단히 생성 할 수 있습니다
Unit #0: 0, N, 2N, 3N, ... Unit #1: 1, N+1, 2N+1, 3N+1, ... ... Unit #N-1: N-1, N+(N-1), 2N+(N-1), 3N+(N-1), ...
키 (매퍼 (mapper) 또는 감속기 (reducer))를 생성해야하는 위치에 따라 당신은 N을 hadoop 구성에서 얻을 수 있습니다 :
Mapper: mapred.map.tasks Reduce: mapred.reduce.tasks
... 귀하 유닛의 ID : Java에서는 다음과 같습니다.
context.getTaskAttemptID().getTaskID().getId()
하이브에 대해서는 확실하지 않지만 가능해야합니다.
-
==============================
2.숫자 대신 UUID를 사용하십시오. 진정한 분산 방식으로 작동합니다.
숫자 대신 UUID를 사용하십시오. 진정한 분산 방식으로 작동합니다.
select reflect("java.util.UUID", "randomUUID")
-
==============================
3.
SELECT T.*, ROW_NUMBER () OVER (ORDER BY T.C1) AS SEQ_NBR FROM TABLE T
여기서 C1은 T의 모든 숫자 열입니다. 테이블 T에서 1에서 시작하여 선택하는 동안 각 레코드에 대해 고유 번호가 생성됩니다. 이것이 1 회 활동 인 경우 솔루션이 정상입니다.
이 프로세스를 매일 반복하여이 데이터를 테이블 T2에 삽입하고 고유 ID를 생성해야하는 경우 다음과 같은 방법으로 시도 할 수 있습니다.
SELECT T.*, ROW_NUMBER () OVER (ORDER BY T.C1)+ SEQ_T2 AS SEQ_NBR FROM TABLE T, (SELECT MAX(SEQ) AS SEQ_T2 FROM TABLE T2)
희망이 도움이 !!
from https://stackoverflow.com/questions/27835062/unique-key-generation-in-hive-hadoop by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] java.sql.SQLException : 하이브를 사용하여 데이터베이스를 초기화하는 동안 데이터베이스 'metastore_db'ERROR를 시작하지 못했습니다. (0) | 2019.06.29 |
---|---|
[HADOOP] Hive 쿼리의 시간적 조인 (시간적으로 근접한 이벤트) (0) | 2019.06.29 |
[HADOOP] 왜 hadoop이 내 Map 클래스를 인식하지 못합니까? (0) | 2019.06.29 |
[HADOOP] 하둡 2와 함께 Oozie, 작업은 "RUNNING" (0) | 2019.06.29 |
[HADOOP] Hive에서 데이터베이스의 모든 테이블 정의를 얻는 방법? (0) | 2019.06.29 |