하이브 0.9에서 테이블에 인덱스를 만들려고합니다. 한 테이블에는 10 억 개의 행이 있고 다른 테이블에는 3 천만 개의 행이 있습니다. 내가 사용한 명령은 (테이블을 만드는 것 외에도)하이브에서 인덱스 만들기 0.9
CREATE INDEX DEAL_IDX_1 ON TABLE DEAL (ID) AS
'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
WITH DEFERRED REBUILD;
alter index DEAL_IDX_1 ON DEAL rebuild;
set hive.optimize.autoindex=true;
set hive.optimize.index.filter=true;
30 밀의 경우. 행 표는 재건 과정은 괜찮아 (매퍼를 모두 완료 감속기) 보이는 결국은 로그를 확인
Invalid alter operation: Unable to alter index.
FAILED: Execution Error, return code 1
from org.apache.hadoop.hive.ql.exec.DDLTask
를 인쇄 할 때까지,이 오류가 왜 그것은 확실히 오류를
java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver"
했으나, 발생하지만, 어쨌든, 나는 더비 - version.jar 추가 :보고 된 오류가 해결 된
add jar /path/derby-version.jar
,하지만 또 다른 오류가 발생했습니다 :
org.apache.hadoop.hive.ql.exec.FileSinkOperator:
StatsPublishing error: cannot connect to database
문제를 해결하는 방법을 잘 모르겠습니다. 하이브 /웨어 하우스에서 생성 된 인덱스 테이블을 볼 수 있습니다.
10 억 개의 행 표는 다른 이야기입니다. 매퍼가 방금 2 % 정도 꼼짝 못하게되었습니다. 그리고 오류가
FATAL org.apache.hadoop.mapred.Child: Error running child :
java.lang.OutOfMemoryError: Java heap space
내가 최대 힙 크기뿐만 아니라 최대 mapr 메모리 (설정이 하이브의 구성 설정 어딘가에 있지만 언급 참조) 적용을 시도했다 그러나
set mapred.child.java.opts = -Xmx6024m
set mapred.job.map.memory.mb=6000;
set mapred.job.reduce.memory.mb=4000;
을이 아니다 도움. 매퍼는 여전히 같은 오류로 2 %로 고생했습니다.
왜 색인을 만들어야합니까? – cybye
@cybye, 흥미로운 질문입니다. 인덱스가 내 쿼리의 성능에 어떻게 도움이되는지는 명확하지 않습니다. 성능을 벤치 마크하고 조정하고 싶습니다. 테이블에는 여러 선택 조건이 실행될 몇 개의 열이 있습니다. 테이블에 대한 조인 작업도 몇 가지 있습니다. – Causality
파티셔닝 (메타 스토어 제공 인덱스)으로 성능을 얻고 테이블을 먼저 버킷화할 수 있습니까? 위의 오류가 어디서 왔는지 나는 잘 모르겠습니다. derby-problem은 아마도 여러분이 로컬 metastore만을 가지고 있기 때문에 가능할 것입니다. 그것은 metastore 서버를 시작하는 데 도움이 될 수 있습니다 (하이브 하이브 메타 스토어 로컬 허위에서 서버를 시작하고 URL을 설정하십시오). – cybye