2013-01-29 6 views
0

하이브 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 %로 고생했습니다.

+0

왜 색인을 만들어야합니까? – cybye

+0

@cybye, 흥미로운 질문입니다. 인덱스가 내 쿼리의 성능에 어떻게 도움이되는지는 명확하지 않습니다. 성능을 벤치 마크하고 조정하고 싶습니다. 테이블에는 여러 선택 조건이 실행될 몇 개의 열이 있습니다. 테이블에 대한 조인 작업도 몇 가지 있습니다. – Causality

+0

파티셔닝 (메타 스토어 제공 인덱스)으로 성능을 얻고 테이블을 먼저 버킷화할 수 있습니까? 위의 오류가 어디서 왔는지 나는 잘 모르겠습니다. derby-problem은 아마도 여러분이 로컬 metastore만을 가지고 있기 때문에 가능할 것입니다. 그것은 metastore 서버를 시작하는 데 도움이 될 수 있습니다 (하이브 하이브 메타 스토어 로컬 허위에서 서버를 시작하고 URL을 설정하십시오). – cybye

답변

2

색인 생성과 하이브 /웨어 하우스에서 비슷한 문제가 있었지만 전체 프로세스가 실패했습니다. 내 index_name TypeTarget (너의 것입니다 DEAL_IDX_1) 며칠 동안 다른 접근 시도, index_name 모두 소문자로 (typetarget) 문제가 해결되었습니다. 내 문제는 하이브 0.10.0에있었습니다.

또한 클래스를 찾을 수없고 StatsPublishing 문제는 기본적으로 hive.stats.autogather가 켜져 있기 때문에 발생합니다. hive-site.xml에서이 기능을 끄면 (false) 해당 문제를 제거해야합니다.

빠른 수정을 원하는 사람에게 도움이되기를 바랍니다.

+2

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Indexing#LanguageManualIndexing-SimpleExamples 경고 : "대/소문자 구분 아이콘 하이브 0.12.0 및 이전 릴리스에서 인덱스 이름은 대/CREATE INDEX 및 DROP INDEX 문에 민감합니다. 그러나 ALTER INDEX에는 소문자로 만든 색인 이름이 필요합니다 (HIVE-2752 참조). 이 버그는 Hive 0.13.0에서 모든 HiveQL 문에 대해 대/소문자를 구분하지 않고 색인 이름을 지정하여 수정되었습니다. 0.13.0 이전의 경우 가장 좋은 방법은 모든 색인 이름에 소문자를 사용하는 것입니다 .''' – dajobe