클래스의 역할 ― “노트북 파일을 실제 파일시스템(또는 원격)에 안전하게 저장·조회·이동·삭제”구현 인터페이스AbstractNotebookRepo (Zeppelin 공통 저장소 추상 클래스)핵심 책임① 저장(save) ② 조회(get) ③ 목록(list) ④ 이동(move) ⑤ 삭제(remove) ⑥ 설정 조회/갱신주요 기술Apache VFS(Virtual File System) — 로컬·HDFS·S3·FTP 등 다양한 스킴을 하나의 API로 다룸 왜 VFS인가?Zeppelin 노트북은 로컬 디스크뿐만 아니라 S3, HDFS, WebDAV 등으로도 저장될 수 있음.Apache VFS는 스킴별 구현체(FileProvider)만 설정하면 동일한 코드로 모든 스토리지를 다룰 수 있는 추상화 계층을 제공함. 필..
.github/actions/tune-runner-vm/action.ymlGitHub Actions “Composite Action” 내에서 리눅스 러너(특히 GitHub-hosted Ubuntu 러너)를 부팅한 즉시 / 초기에 실행되는 셸 스크립트를 정의함.핵심 목적은 러너 자신의 호스트네임 → IP 역방향 조회가 제대로 해결되지 않아 발생할 수 있는 DNS 지연을 없애는 것임. Composite Action 컨텍스트name: Tune Runner VM performancedescription: tunes the GitHub Runner VM operation systemruns: using: composite steps: - run: | ... shell: bashrun..
base 활성화시 에러conda activate base# CondaError: Run 'conda init' before 'conda activate' 해결하는 명령어 입력conda init zsh# no change /opt/homebrew/Caskroom/miniconda/base/condabin/conda# no change /opt/homebrew/Caskroom/miniconda/base/bin/conda# no change /opt/homebrew/Caskroom/miniconda/base/bin/conda-env# no change /opt/homebrew/Caskroom/miniconda/base/bin/activate# no change /opt/ho..
버전 고정이 필요한 이유CI 환경(특히 ubuntu-latest 러너)은 크롬 계열 브라우저와 드라이버를 자동 업데이트함.Selenium, Playwright, Puppeteer 테스트가 다음과 같은 증상을 보인다면 의심해 봐야 함. 1. 테스트가 갑자기 Unknown error: cannot find Chrome binary 로 실패러너의 크롬은 업데이트됐지만 드라이버는 구버전 2. session not created: This version of ChromeDriver only supports Chrome X드라이버는 최신이지만 크롬이 구버전 3. 헤드리스 모드에서 렌더링 차이 및 스크린샷 불일치메이저 버전 간 렌더링 엔진 변경 테스트 신뢰도를 높이려면 테스트 대상과 자동화 드라이버를 같은 메이저 버..
클래스의 역할과 배경SparkUtils 는 Zeppelin ↔ Spark 통합 계층에서 Spark 1.x ↔ Spark 2.x/3.x API 차이를 흡수하기 위해 설계된 추상(base) 유틸리티 클래스임. 실제 런타임에서는 리플렉션으로 Spark 버전에 맞는 구체 서브클래스(Spark1Utils, Spark2Utils 등)를 로드하지만, 공통으로 재사용할 수 있는 기능들은 이 베이스 클래스에 구현돼 있음주요 책임은 세 가지임. Job TrackingSparkListener를 등록해 JobStart 이벤트가 발생할 때마다 Spark Web UI (URL) 정보를 노트/문단 단위로 Zeppelin 프론트엔드에 push. DataFrame 렌더링Dataset를 Zeppelin 프론트엔드가 인식하는 %table..
Spark Submit Interpreter가 하는 일SparkSubmitInterpreter는 Apache Zeppelin의 Interpreter Framework 안에서 %spark-submit 매직 명령을 제공하는 클래스임.사용자가 Zeppelin 노트북 셀(Paragraph)에서 Spark CLI( spark-submit )를 그대로 호출할 수 있게 해 줌. Zeppelin ↔ Shell ↔ Spark 흐름을 중개하며, Spark UI URL, YARN Application ID 등 실시간 메타데이터를 추출, 전송해 Zeppelin 프런트엔드에 작업 상태를 시각화함.Spark 클러스터 유형(YARN, Stand-alone, Local 등)에 상관없이 동작하도록 설계돼 있지만, YARN 모드일 때는..
원본 코드zeppelin/elasticsearch/src/main/java/org/apache/zeppelin/elasticsearch/client/ElasticsearchClient.java/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (..
Iceberg 커밋 흐름 : “쓰기 → 스냅샷 작성 → 원자적 rename (or CAS)”현재 상태 읽기작업자는 테이블이 가리키는 메타데이터 파일 Mₙ(= 스냅샷 Sₙ)을 가져옴.새 스냅샷 생성데이터·매니페스트를 작성한 뒤 새 메타데이터 파일 Mₙ₊₁(→ Sₙ₊₁) 을 임시 위치에 기록함.커밋 시도Hadoop/HDFS·POSIX FS일 때는 rename(temp, Mₙ₊₁)를,Hive/Glue/REST Catalog일 때는 “ALTER TABLE … SET metadata_location=Mₙ₊₁” 같은 CAS(Compare-and-Swap) 호출을 “기존 값이 그대로일 때만” 수행함.- 성공 ⇒ 새 스냅샷이 즉시 일관성 있게 노출- 실패(동시 커밋 충돌) ⇒ 작업자가 최신 Mₙ₊ₖ을 다시 읽어 리베이..
Iceberg 메타데이터 3-계층이 해결하는 핵심 문제Metadata File (table-metadata)- 스키마·파티션 사양, 현재 스냅샷 ID, 이전 스냅샷 히스토리- 원자적 커밋: 새 파일을 쓰고 “이름만 바꾸기(atomic rename)”- HMS(외부 DB)에 의존하지 않으므로 글로벌 락 불필요Manifest List- 한 스냅샷이 참조하는 Manifest 경로 + 통계- 쿼리 계획 시 Manifest 자체를 빠르게 프루닝 → 파일 수↑에도 계획 시간 일정Manifest- 데이터 파일 경로, 파티션 값, 열별 min/max 등- 파일 리스트·통계 캐시 역할- 파일 시스템(예: S3) 전체 디렉터리 스캔 제거 해결될 문제들메타스토어 병목·락 경쟁Hive ACID는 HMS 테이블·파티션 행을 잠..
Apache Iceberg 탄생 배경과 미션Netflix가 2018년 내부 데이터레이크 품질 문제를 해결하려고 설계한 Iceberg는 2020년 Apache Top-Level 프로젝트로 승격되었음.목표는 “파일을 테이블처럼” 관리하면서도 아래 내용을 포함함.- 높은 동시성(수천 개의 병렬 작업)- 스냅샷 기반 ACID 트랜잭션- 엔진 중립성을 동시에 보장AWS S3, HDFS, GCS 등 객체 저장소 위에서 그대로 동작하도록 설계했음. 메타데이터 레이어 구조Iceberg는 세 겹의 메타데이터로 테이블을 추상화함. Metadata File (v1.metadata.json)- 스키마·파티션 사양·스냅샷 목록- 커밋 단위로 교체(atomic rename)Manifest List- 스냅샷이 참조하는 Manife..
모델-우선 메타데이터 구조1. Entity데이터셋, 파이프라인, ML 모델, DashBoard 등 “실체”를 식별하는 최상위 타입 2. AspectEntity에 붙는 버전 가능한(immutable-append) 하위 스키마.예를 들면, schemaMetadata, ownership, dataPlatformInstance 3. URNurn:li:::: 형식의 전역 식별자 4. MCP / MCLMetadataChangeProposal (요청)과 MetadataChangeLog (실행 결과).둘 다 Avro 스키마로 직렬화돼 Kafka 토픽에 기록됨. 왜 Aspect 설계가 중요한가?column 추가 같은 잦은 스키마 진화를 Table 단위가 아니라 Aspect 단위로 versioning → API와 스토리지..
페르소나란 무엇인가?1. 개념LLM이 대화 내내 일관된 성격, 어조, 지식 범위, 행동 규칙을 유지하도록 하는 역할(Role) 또는 캐릭터(Character) 메타데이터 2. 표현 층① 프롬프트(system/role), ② 파라미터 (LoRA·Adapter), ③ 외부 메모리 (Vector DB), ④ 정책 레이어 (Tool 권한) 3. 목적브랜드-보이스, NPC·챗봇 역할극, 도메인 전문 비서, 사용자-맞춤 UX 등에서 일관성(consistency)·몰입감(immersion)을 확보 연구 커뮤니티는 이를 “Personality/Persona Alignment”라고 지칭함.일반적 휴먼 밸류 정렬과 달리 특정 성격에 맞게 모델을 맞추는 문제로 분리함. 기술 스택 - 4 Layer Persona Stack1..
LLM의 정의와 탄생 배경LLM은 수십억~수조 개 파라미터를 가진 거대 신경망이 자연어(그리고 점차 멀티모달 신호)를 언어 모델링 확률 분포로 학습한 뒤, 질의응답, 번역, 코드 생성 등 범용 언어 과제를 수행하도록 특화한 “기반(Foundation) 모델”임.GPT, PaLM, Llama 계열처럼 디코더(autoregressive) Transformer를 주축으로 등장했으며, 대량의 웹, 문서, 코드 코퍼스를 자기지도 학습으로 사전학습(pre-training)하여 “다음 토큰” 확률을 예측하는 방식으로 언어 지식을 획득함. 핵심 아키텍처: Transformer의 역할 1. 멀티-헤드 자기어텐션(Self-Attention)입력 시퀀스의 모든 토큰 쌍 상호작용을 O(n²)로 계산해 장-단기 의존성을 동시에..
EMR 로깅아마존 EMR에서 PySpark 애플리케이션을 실행할 때 발생하는 에러를 체계적으로 로깅하고 모니터링하기 위해서는, EMR 환경 자체의 로깅 메커니즘과 Spark의 로깅(로그4j, python logging 등)에 대한 이해가 모두 필요함.특히 EMR 상에서 Spark 작업을 실행할 경우, 다음과 같은 계층의 로그를 고려해야 함. 1. Spark Driver 로그: Spark 애플리케이션의 드라이버(Driver) 프로세스에서 발생하는 로그.2. Spark Executor 로그: 분산 실행 시 각 Executor 노드에서 발생하는 로그.3. EMR/Hadoop(YARN) 로그: YARN ResourceManager/NodeManager가 생성하는 로그 등.4. 애플리케이션 레벨의 사용자 정의 로..
Input, Output, Shuffle Read, Shuffle WriteApache Spark에서 작업(Job)이나 스테이지(Stage)가 실행될 때, “Input”, “Output”, “Shuffle Read”, “Shuffle Write”는 작업의 성능 및 리소스 사용량을 파악하기 위해 매우 중요한 지표임.이는 Spark UI에서 각 스테이지별로 또는 전체 잡(Job) 단위로 확인할 수 있으며, Spark의 물리적인 실행 과정(Physical Execution Plan)을 이해하는 핵심 요소이기도 함.아래에서 각 용어와 Spark가 실제로 데이터를 어떻게 주고받는지, 그리고 이 과정에서 발생하는 비용(Cost)에 대해 상세히 설명하겠음. Input1. 정의 및 개념1-1. Input은 일반적으로 ..