-
[Spark] Spark JDBC와 하이브 연동 이슈들.Software Development/Data Engineering 2023. 5. 5. 11:53
Spark JDBC로 RDB의 데이터를 가져올 수 있음.
이때 성능 이슈가 있을 수 있음.
fetchsize 옵션 추가해서 사이즈를 키워볼 것.
partition 옵션을 사용하여 병렬로 가져올 수 있도록 쿼리 짤 것.
Spark JDBC로 데이터 가져올 때, Action 한 번만 호출하도록 신경쓸 것. Cache가 좋은 대안.
Spark JDBC로 가져온 데이터를 Hive metastore와 연동하는 경우가 많음. 이때 스키마 이슈가 발생할 수 있음.
saveAsTable로 Overwrite하면, table drop 후 create 함. 이때 기존 스키마 전부 날라감.
스키마 날라가도, 데이터는 잘 저장될 수 있음. spark.sql로 읽는다면 큰 문제없음.
그러나 여기에 하이브가 붙는다면, 하이브가 읽을 수 있는 스키마가 없기 때문에, 데이터를 읽는게 불안정해짐.
예를 들어, HQL로 데이터를 읽는데, 컬럼의 값이 전부 null로 입력된 현상을 발견할 수 있음.
해당 문제를 해결하기 위해 아래의 옵션을 줘서 해결 가능.
set orc.force.positional.evolution=true;
그러나 만병통치약이 아님.
메타스토어를 쓰든 아니든 결국 데이터는 파일로 저장됨. 제대로된 스키마가 없다면, 저장되는 데이터의 특정 값에 따라 데이터를 오염시킬 수 있음.
대안은 스키마를 잃어버리지 않는 방법을 찾는 것.
saveAsTable -> insertInto로 변경.
'Software Development > Data Engineering' 카테고리의 다른 글
[Kafka] 단일 파티션에 대한 고민 (0) 2024.05.27 [Hive] 하이브 테이블에 Spark으로 적재 시, HQL로 읽을 때, 값이 Null로 조회되는 이슈. (0) 2023.05.02 [Data Pipelines with Apache Airflow] 3. Airflow의 스케줄링 (0) 2022.08.02 [Data Pipelines with Apache Airflow] 2. Airflow DAG의 구조 (0) 2022.08.01 [Data Pipelines with Apache Airflow] 1. Apache Airflow 살펴보기 (0) 2022.06.22