빅데이터/그 외

[빅데이터] Impala & Hive & Sqoop 겪은 이슈들 (1)

min_min_ 2022. 8. 2. 09:40

이슈1

Impala는 쿼리를 빠르게 수행하기 위해서 Hive 테이블의 메타데이터의 카피를 캐시로 가지고 있는 구조. 그렇기 때문에 hive에서 변경사항 있으면 sync를 맞춰주어야한다.

 

Refresh vs Invalidate
Refresh: 다시 로드하지만 hdfs block 상에서 증분된 만큼만의 데이터를 로드한다
Invalidate : 기존의 캐시를 모두 지우고 새로운 메타데이터 가져오기 때문에 리소스 소모 크다. 특히 파티션이 많은 큰 테이블일 때 비싼 작업. 테이블 생성/삭제할 때 필요

 

 

이슈2

sqoop export 시 --num-mappers 통해  병렬 처리 작업 시 각 매퍼가 db connection을 맺게 된다. 그리고 각각 commit을 하기 때문에 하나의 작업이 마치고 commit하면 다른 쪽에서 에러나도 부분적으로 끝마치게 된다. 그러면 데이터 정합성이 안맞을 수 있다. 즉, task 하나가 성공하고 나머지 실패하면 job 자체로는 fail이지만 task하나 자체는 commit 되기 때문에 전체 작업이 부분적으로만 성공된다.

https://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_exports_and_transactions

 

이슈3

오라클 Big Data SQL(BDSQL)을 이용하면 hive, hdfs 파일 등을 오라클의 external table로 만들어 오라클에서 DW와 빅데이터플랫폼을 연동하여 쿼리를 작성가능하다.

 

이슈4

sqoop에서 HDFS에서 다른 RDB에 데이터 적재 시 RDB가 용량이 적어서 아카이브로그에 최대한 적게 쓰려고 commit 단위를 적게하려고 쓸 때 사용하는 옵션이다.

Dsqoop.export.records.per.statement : default는 100이고, 한 번에 몇 개 씩 batch 작업 할 것인지에 대한 옵션이다.
Dsqoop.export.statements.per.transaction : insert 시 transaction commit 단위를 적게 하여 아카이브 로그에 적게 쓰려고 한다. 

-Dsqoop.export.records.per.statement=10000
-Dsqoop.export.statements.per.transaction=100 
--direct

 

Reference
https://geonyeongkim-development.tistory.com/76
https://imp51.tistory.com/entry/Components-of-the-Impala-Server
https://github.com/HomoEfficio/dev-tips/blob/master/Impala%20%EA%B4%80%EB%A0%A8%20%EC%9E%A1%EB%8B%A4.md

https://d2.naver.com/helloworld/246342
https://datalibrary.tistory.com/213
https://brocess.tistory.com/213