2014-03-30 3 views
0

이 문제가 있으며 다른 사람들이 실행하고 더 나은 방법으로 처리 할 수 ​​있는지 확인하고 싶습니다.휘발성 레코드를 효율적으로 처리하는 방법

우리는 300 노드 클러스터를 가지고 있으며 거래 정보/기록을 매일 처리합니다. 우리는 매일 약 1,000 만 건의 거래를 할 수 있었고 레코드 크기는 약 2K 바이트였습니다.

데이터 저장을 위해 현재 데이터 저장, 돼지 및 하이브에 HDFS를 사용하고 있습니다. 대부분의 경우 외부 하이브 테이블 유형을 사용합니다.이 유형은 트랜잭션 생성 날짜별로 분할됩니다.

몇 달 또는 몇 년 전에 생성 된 거래에 대한 업데이트가있을 수 있습니다. 예를 들어 5 년 전에 생성 된 트랜잭션의 업데이트를 얻을 수 있습니다. 우리는이 레코드를 무시할 수는 없지만 단일 레코드에 대해서만 해당 파티션을 다시 처리합니다.

매일이 작업으로 인해 1000 개의 파티션이 처리됩니다. 이러한 트랜잭션 테이블을 사용하는 ETL 응용 프로그램이 더 있습니다.

본인은 하이브/hdfs 아키텍처에 대한 제한 사항임을 이해합니다.

다른 사람들도이 문제를 겪었을 것이라고 확신합니다. 시도했을 수도있는 옵션을 공유 할 수 있다면 정말 도움이 될 것입니다.

+0

여기에 의견이 있습니까? – Sid

답변

0

파티션을 덮어 쓸 필요가 없습니다. 단순히 파티션에 삽입하기 만하면됩니다. 삽입 명령에 "덮어 쓰기"를 포함하지 마십시오.

다음은 날짜별로 파티셔닝 한 테이블의 예입니다. 삽입 한 (삽입하지 않고!) 두 번 - 레코드가 있음을 볼 수 있습니다. .두번! 즉, 파티션이 추가되었거나 덮어 쓰거나 삭제되지 않았 음을 나타냅니다.

insert_test insert_test 여기에 덮어 쓰지 마십시오! 선택 ..

hive> select * from insert_test; 
OK 
name date 
row1 2014-03-05 
row2 2014-03-05 
row1 2014-03-05 
row2 2014-03-05 
row3 2014-03-06 
row4 2014-03-06 
row3 2014-03-06 
row4 2014-03-06 
row5 2014-03-07 
row5 2014-03-07 
row6 2014-03-09 
row7 2014-03-09 
row6 2014-03-09 
row7 2014-03-09 
row8 2014-03-16 
row8 2014-03-16 
관련 문제