복붙노트

[HADOOP] 하이브 버전 0.13.1의 성능 문제

HADOOP

하이브 버전 0.13.1의 성능 문제

내 하이브 쿼리를 실행하기 위해 AWS-EMR을 사용하고 하이브 버전 0.13.1을 실행하는 동안 성능 문제가 있습니다.

새 버전의 하이브는 10 행의 데이터를 실행하는 데 약 5 분이 걸렸습니다. 그러나 230804 행에 대한 동일한 스크립트는 2 일이 걸리고 여전히 실행 중입니다. 문제를 분석하고 수정하려면 어떻게해야합니까?

샘플 데이터 :

1 번 테이블:

hive> describe foo;
OK
orderno    string
Time taken: 0.101 seconds, Fetched: 1 row(s)
hive>select * from foo;        
OK
1826203307
1826207803
1826179498
1826179657

표 2 :

hive> describe de_geo_ip_logs;
OK
id          bigint                                      
startorderno        bigint                                      
endorderno          bigint                                      
itemcode                int                                         
Time taken: 0.047 seconds, Fetched: 4 row(s)
hive> select * from bar;

127698025   417880320   417880575   306
127698025   3038626048  3038626303  584
127698025   3038626304  3038626431  269
127698025   3038626560  3038626815  163

내 검색어 :

SELECT b.itemcode
FROM foo a,  bar b
WHERE a.orderno BETWEEN b.startorderno AND b.endorderno;

해결법

  1. ==============================

    1.하이브 로그 출력 맨 위에 "경고 : 셔플 조인 JOIN [4] [표 a, b] 스테이지 'Stage-1 Mapred'의 교차 제품입니다."

    하이브 로그 출력 맨 위에 "경고 : 셔플 조인 JOIN [4] [표 a, b] 스테이지 'Stage-1 Mapred'의 교차 제품입니다."

    편집하다: '교차 제품'또는 직교 좌표 곱은 'a'테이블의 모든 행에 대해 'b'테이블의 모든 행을 반환하는 조건없는 조인입니다. 따라서 'a'가 5 개의 행이고 'b'가 10 개의 행인 예제를 얻거나 5를 곱한 5에 10 = 50 행이 반환됩니다. 하나 또는 다른 테이블에 대해 'null'인 행이 많이있을 것입니다.

    이제 20,000 개의 행으로 이루어진 테이블 'a'가 있고 500,000 개의 행으로 구성된 다른 테이블 'b'에 가입하면 SQL 엔진에 10,000,000,000 개의 행으로 이루어진 'a, b'데이터 세트를 반환하도록 요청한 다음 1 천만 행에 대해 BETWEEN 조작을 수행하십시오.

    따라서 'b'행의 수를 줄이면 'a'보다 더 많은 이점을 얻을 수 있습니다. 예를 들어, ip_logs 테이블 (표 2)을 필터링 할 수 있다면, 주문 번호 테이블보다 많은 행이 있으면 실행 시간이 단축됩니다. END EDIT

    조인 조건을 지정하지 않아도 실행 엔진이 카디 전 곱 (Cartesian product)을 통과하도록 강요합니다. 그것은 모든 테이블을 계속해서 스캔해야합니다. 10 개의 행을 사용하면 문제가 발생하지 않습니다. 20k를 사용하면 수십 개의지도 / 축소 파도가 발생합니다.

    다음 쿼리를 시도하십시오.

     SELECT b.itemcode
     FROM foo a JOIN bar b on <SomeKey>
     WHERE a.orderno BETWEEN b.startorderno AND b.endorderno;
    

    하지만 모델에 가입 할 수있는 열의 수를 파악하는 데 문제가 있습니다. 어쩌면이 표현을위한 데이터 모델이 향상 될 수 있습니까? 샘플을 분명히 읽지 않을 수도 있습니다.

    어느 쪽이든, where 절 이전에 비교 횟수를 필터링해야합니다. 하이브에서이 작업을 수행 한 다른 방법은 더 작은 데이터 집합으로 뷰를 만들고 원래 테이블 대신 뷰를 조인 / 일치시키는 것입니다.

  2. from https://stackoverflow.com/questions/27900760/performance-issue-in-hive-version-0-13-1 by cc-by-sa and MIT license