2017-11-21 17 views
2

프로덕션 환경에서 Hadoop을 처음 사용하는 데 상당히 익숙합니다. 데이터베이스에서 큰 테이블을 Hive로 가져 오기 위해 특종을 사용했습니다. Scoop은 쉼표로 구분 된 텍스트 파일을 만들고 하이브에서 해당 테이블을 만들었습니다. ORC (이진 데이터 지방 테이블 칼럼 현명한 데이터 저장, 압축 등)에 비교 될 수있는 텍스트 파일 정도만큼 비효율적이므로오크는 하이브의 csv보다 빠르지 않습니까?

난 후 create table new_table_orc stored as orc as select * from old_table_csv

실행, I는 큰 기대 질적으로 개선되었지만 쿼리 실행 시간이 전혀 변경되지 않은 것 같습니다!

두 버전 (텍스트, ORC 및 짝수 마루) 모두에서 동일한 간단한 쿼리를 사용했으며 이러한 테이블 중 몇 개가 조인에 사용 된 경우 동일한 동일한 쿼리를 사용했습니다.

추가 정보 : 내가 테스트하는 주 테이블에는 약 430 만 개의 행과 약 50 개의 열이 있습니다.

나는 쿼리의 몇 가지 실행 해요 : select sum(col1) from my_table; < = 40 초

select sum(col1) from my_table_orc; < = 31 초

그리고

select distinct col2 from my_table where col3 = someval; < = 53 초

select distinct col2 from my_table_orc where col3 = someval; < = 35 초

또한 @sahil desai가 제안 했으므로 벡터화가 가능했지만 거대한 차이를 만들었습니다 (시간이 몇 초 단축되었습니다).

여기서 무슨 일이 일어나고 있습니다. 제가 왜 빠른 속도의 주문을 보지 못합니까? 더 자세한 정보가 필요하십니까?

+0

당신은 어떻게 쿼리를 실행했던 것처럼 하이브 성능을 향상시킬 수있는 많은 방법이있다? ORC 또는 마루가 더 빠르지 만 전체 테이블을 스캔하는 데는 적합하지 않습니다. –

+0

얼마나 큰 데이터를 가지고 있고 어떤 쿼리를 실행하고 있는지 문제가 있습니다. 작은 데이터 세트를 테스트하는 경우 성능 차이를 찾을 수 없습니다. –

+0

@sandeeprawat 설명에 추가 정보가 추가되었습니다. 데이터가 작지는 않지만, 여전히 단일 시스템의 관점에서 생각하고 있습니다. – Shahbaz

답변

1

내 경험에 따르면 ORC가 빠릅니다. 모든 HIVE 테이블에 대해 ORC 파일을 사용하면 HIVE 쿼리의 응답 시간을 단축하는 데 매우 유용합니다. 제 생각에 벡터화를 활성화해야한다고 생각합니다. 벡터화 된 쿼리 실행은 매번 단일 행 대신에 1024 행의 일괄 처리로이를 수행함으로써 스캔, 집계, 필터 및 조인과 같은 연산의 성능을 향상시킵니다.

set hive.vectorized.execution.enabled = true;  
set hive.vectorized.execution.reduce.enabled = true; 

는 TEZ 실행, 비용 기반 쿼리 등 최적화 (CBO)

+0

오류없이 JDBC 클라이언트에서 플래그를 실행했습니다. 그러나 성능은 동일하게 유지 된 것 같습니다. – Shahbaz