복붙노트

[HADOOP] 해시에 성능 저하는 TEZ에 돼지 조인

HADOOP

해시에 성능 저하는 TEZ에 돼지 조인

나는 함께 결합해야하는 여러 데이터 소스에서 레코드의 수백만의 수백을 변환하는 돼지 일련의 스크립트가 있습니다. 각 스크립트의 끝으로, 나는 성능 가입 점은 대단히 느린됩니다 도달한다. TEZ보기에서 DAG 보면, 나는 그것이 상대적으로 적은 작업 (일반적으로 100 ~ 200)로 분할되는 것을 볼 수 있지만, 각 작업을 완료하는 데 여러 시간이 소요됩니다. 작업 설명은이 HASH_JOIN을하고 있다고 보여줍니다.

TEZ 실행 엔진에서 실행 흥미롭게도, 나는 단지이 병목 현상으로 실행합니다. 맵리 듀스에, 아직 시간이 걸릴 수 있습니다,하지만 난 TEZ에 얻을 고민 기어처럼 아무것도. 내가 여기에 또 다른 질문을했습니다하는 맵리 듀스에 문제가 그러나, 맵리 듀스에서 실행되는 문제입니다.

여기에 내 코드의 샘플입니다 (사과, 나는 매우 일반적인 코드 인터 웹에 게시 할 수 있도록했습니다했습니다). 나는이 병목 현상을 제거하기 위해 무엇을 할 수 있는지 궁금하네요 - 병렬 도움을 지정하는 것? 나의 접근 방식에 문제가 있습니까?

-- Incoming data:
-- A: hundreds of millions of rows, 19 fields
-- B: hundreds of millions of rows, 3 fields
-- C: hundreds of millions of rows, 5 fields
-- D: a few thousand rows, 5 fields

J = -- This reduces the size of A, but still probably in the hundreds of millions
    FILTER A
    BY qualifying == 1;

K = -- This is a one-to-one join that doesn't explode the number of rows in J
    JOIN J BY Id
       , B BY Id;

L =
    FOREACH K
    GENERATE J1 AS L1
           , J2 AS L2
           , J3 AS L3
           , J4 AS L4
           , J5 AS L5
           , J6 AS L6
           , J7 AS L7
           , J8 AS L8
           , B1 AS L9
           , B2 AS L10
           ;

M = -- Reduces the size of C to around one hundred million rows
    FILTER C
    BY Code matches 'Code-.+';

M_WithYear =
    FOREACH M
    GENERATE *
           , (int)REGEX_EXTRACT(Code, 'Code-.+-([0-9]+)', 1) AS year:int
           ;

SPLIT M_WithYear
    INTO M_annual IF year <= (int)'$currentYear' -- roughly 75% of the data from M
       , M_lifetime IF Code == 'Code-Lifetime'; -- roughly 25% of the data from M

-- Transformations for M_annual

N =
    JOIN M_WithYear BY Id, D BY Id USING 'replicated';

O = -- This is where performance falls apart
    JOIN N BY (Id, year, M7) -- M7 matches L7
       , L BY (Id, year, L7);

P =
    FOREACH O
    GENERATE N1 AS P1
           , N2 AS P2
           , N3 AS P3
           , N4 AS P4
           , N5 AS P5
           , N6 AS P6
           , N7 AS P7
           , N8 AS P8
           , N9 AS P9
           , L1 AS P10
           , L2 AS P11
           ;

-- Transformations N-P above repeated for M_lifetime

해결법

    from https://stackoverflow.com/questions/50139192/poor-performance-on-hash-joins-with-pig-on-tez by cc-by-sa and MIT license