본문 바로가기

Database

(76)
[spark] Adaptive Query Execution 실제 spark의 설계를 하다보면 처음에는 균등하게 파티션을 분배하면 되겠지 라고 실행해보면, 실제로는 하나의 파티션이 대부분을 차지하게 되어서 다른 작업들이 밀리는 현상을 보게 된다. 다음은 spark의 실행계획 이미지이다. 왼쪽은 통계 추정으로 만든 초기 계획, 오른쪽은 실행이 끝난 뒤의 최종 계획이다. 최종계획을 보면 Sort 두 개와 SortMergeJoin이 사라지고 BroadcastHashJoin으로 바뀌었다.실행해 보니 오른쪽 테이블이 추정보다 훨씬 작았다는 뜻이다. 새로 나타난 AQEShuffleRead가 AQE 개입 지점이고, 뒤에 붙는 local · coalesced 같은 꼬리표가 무엇을 했는지 알려준다. 이 두 계획의 차이가 곧 AQE다. AQE는 shuffle이 끝난 다음 pa..
elastic search heap memory 확보하기 1. 원인 파악하기 GET _cluster/health?prettyGET _cat/shards?v................"current_state" : "unassigned",................"details" : "... nested: CircuitBreakingException[[parent] Data too large, data for [internal:index/shard/recovery/start_recovery] would be [16763448606/15.6gb], which is larger than the limit of [16320875724/15.1gb] ..." CircuitBreakingException: 메모리 차단기 발동! ES가 OOM(Out Of Memor..
Elasticsearch 노드 간 디스크 불균형 문제 최근 운영 중인 Elasticsearch 클러스터에서 아침에 계속 알림이 울려됬다. 디스크 용량을 85% 이상치로 잡았는데, 계속 알림이 오고 있었다. Duration0 minimpacted entity (Target)data-prd-es-09-dataconditionDISK USAGES - 85%policyDataPlatform System PolicyIssue name (Threshold)Disk Used % > 85.0 for at least 2 minutes on 'data-prd-es-09-data' 해당 es는 데이터 서버가 4대로 구성되어 있다. 그중에서 9번에만 남은 용량이 없는것 샤드 수는 절반인데, 디스크는 다른 노드와 비슷하거나 더 높다.노드샤드수디스크 사용률디스크 남은 용량g-..
ClickHouse - Lightning Fast Analytics for Everyone https://www.vldb.org/pvldb/vol17/p3731-schulze.pdf 1 서론 (INTRODUCTION)ClickHouse는 수조 행·수백 개 컬럼 테이블에 고성능 분석 쿼리를 실행하기 위해 설계된 컬럼 지향 OLAP 데이터베이스다.1. 거대한 데이터와 높은 유입 속도로, 최신 데이터는 빠르게 적재하면서 과거 데이터는 백그라운드에서 집계·아카이브해 부담을 줄이는 것이다.2 많은 동시 쿼리와 낮은 지연 시간으로, 프루닝 등으로 자주 쓰는 쿼리를 최적화하면서 CPU·메모리·디스크·네트워크 I/O를 공정하거나 우선순위 기반으로 나누는 것이다.3 다양한 저장소·위치·포맷과의 통합으로, 어떤 시스템·위치·포맷이든 외부 데이터를 읽고 쓸 수 있을 만큼 개방적인 구조를 갖는 것이다.4 쓰기 편..
[es] monitoring 설정 GET _cluster/settings?include_defaults=true&filter_path=**.xpack.monitoring.exporters** 결과가 {}(비어 있음)이면,→ Elasticsearch가 모니터링 데이터를 “어디로 보낼지(exporter)” 설정이 전혀 없는 상태입니다.즉, 수집은 켜져 있어도 (collection.enabled: true),데이터를 저장할 대상이 없어서 .monitoring-es-* 인덱스를 만들지 못하고 버리는 상황이에요. GET _cluster/settings?include_defaults=true&filter_path=**.xpack.monitoring.exporters**응답값{} xpack(X-Pack)은 Elasticsearch에 내장된 “부가..
[es] ILM + rollover 설정 1. 하루에 대략 20기가의 메트릭 정보가 쌓이고 있다. 그런데~~ ILM이 설정되어 있지 않았다.[깨끗한 설정값을 보라..]GET metricbeat-*/_settings?filter_path=**.index.lifecycle*응답{} 현재 ES 버전을 확인해보면GET /응답{ "name" : "data-es-coordination", "cluster_name" : "data-es-cluster", ........................... "version" : { "number" : "7.10.2", .................. }, "tagline" : "You Know, for Search"}지금 ES 버전이 7.10.2이기 때문에, ILM(라이프사이클 정책) 과..
4. mysql to bigquery using dbt from datetime import datetimefrom airflow import DAGfrom airflow.operators.python import PythonOperatorfrom cosmos import DbtTaskGroup, ProjectConfig, ProfileConfig, ExecutionConfigimport osDBT_DIR = "/opt/airflow/dbt/demo_dbt" # 네 프로젝트 경로# Cosmos 설정project_config = ProjectConfig(dbt_project_path=DBT_DIR)profile_config = ProfileConfig( profile_name="demo_dbt", target_name="dev", profi..
3. Airflow + Astronomer Cosmos + dbt airflow + dbt를 테스트한 dag의 모습입니다.dbt 초기엔 Airflow에서 BashOperator 하나로 dbt run/dbt test를 돌리며, GCS→BigQuery 적재는 staging/mart 두 계층으로 나눠 관리했습니다.문제는 빌드가 실패했을 때 어느 모델에서 깨졌는지 빠르게 추적하기 어렵고, retry도 잡 전체를 다시 돌려야 한다는 점이었습니다.Cosmos를 붙이면 Airflow 그래프에 dbt 모델이 각각의 태스크로 나타나니,실패 지점이 정확히 어느 모델인지 즉시 보이고,그 모델만 부분 재시도 / 부분 실행(select) 할 수 있어 운영이 쉬워집니다. 왜 Cosmos?Airflow에서 dbt 모델을 개별 태스크로 쪼개서 보이고, 의존성 그래프도 자동 생성 → 문제 지점 파악..