전체 글 126

[2. ETL 구축] 2-2. ETL 개발의 10단계

ETL 설계서 문서화 1~4단계를 거치며 도출된 결과는 ETL 시스템을 위한 상세 구성을 수립하기 위한 문서화 과정이다. 이러한 과정을 완료하기 위해 원천 시스템과 데이터를 사용해야 할 때가 있는데, 이를 위해 원천과 똑같이 복제한 정적 스냅샷인 샌드박스 시스템을 구현할 수 있다. 1단계: 고수준 계획의 도식화 기획 단계에서 정해진 정보들을 통해 매우 간단하게 도식을 그린다. 2단계: ETL 도구 선택 3단계: 기본 전략 수립 ETL 시스템에서 공통적인 컨벤션이나 활동에 필요한 기본 전략을 도출한다. 다음과 같은 것들이 공통 활동으로 여겨진다. 각 주요 원천 시스템에서 추출하는 방법 추출한 데이터를 스테이지에 보관하는 방법 딤멘션과 팩트의 품질을 관리하는 방법 디멘션 데이터의 이력을 관리하는 방법 DW와..

[2. ETL 구축] 2-1. ETL의 서브시스템

34개의 ETL 서브시스템 ETL 시스템 아키텍쳐는 34개의 핵심적인 서브시스템으로 이루어진다. 서브시스템들은 4개의 주요 프로세스로 구분된다. I. 추출 원천으로부터 데이터의 변화 없이 ETL 환경의 디스크에 쓰는 프로세스 1. 데이터 프로파일링 DW에 적재하기에 적절한 데이터 소스인지, 데이터 소스에 어떠한 데이터가 있는지 등을 파악하는 단계이다. 데이터 프로파일링은 데이터의 내용, 일관성, 구조를 설명하는 기술적 분석 과정이다. SELECT DISTINCT와 같은 쿼리 또한 프로파일링의 일종으로 볼 수 있다. 이 과정을 통해 좀 더 나은 데이터 수집 방법, 개발 일정 등 요구 수준에 맞게 계획을 세울 수 있다. 데이터 프로파일링은 신뢰도 있는 ETL 시스템 구축의 첫번째 단추이다. 2. CDC 시스..

[1. 차원 모델링] 1-2. 차원 모델 설계 시 몇가지 팁

Fact 테이블에서 대리 키(Surrogate key)를 사용할 시의 이점 대리키란, 테이블을 이루는 컬럼들 가운데 유일하게 식별하기에 적합한 단일 후보키가 존재하지 않을 때 추가할 수 있는 임의의 식별번호로 이루어진 후보키(Candidate key)이다. 차원 테이블과는 다르게, 팩트 테이블에선 대리키에 대해 강한 필요성은 없다. 일반적 DW의 백룸(backroom; 사용자에게 보이는 부분이 아닌 시스템 내부를 일컫는다. Kimball은 식당에서의 홀과 주방의 비유를 통해 이를 설명하였다.)인 ETL 작업을 위해 대리키를 적용한다. 팩트 테이블에 대리키를 적용하면 쿼리 성능이 저하되는 대신, 다음과 같은 이점이 있다. 즉각적인 unique 식별 ETL 처리 도중 여러 차원을 탐색하지 않아도 특정 행을 ..

[1. 차원 모델링] 1-1. 차원 모델 설계의 4단계

"모든 것을 더 이상 간단해질 수 없을만큼 가능한 간단하게 만들어라" 1. 비즈니스 프로세스 선택 비즈니스 프로세스란, 주문 받기, 송장 발행, 결제 받기, 서비스 요청 처리, 학생 등록, 의료 절차 수행 또는 청구 처리와 같이 조직에서 수행하는 낮은 수준의 활동이다. DW/BI 사용자가 분석하고자 하는 성과 측정값은 비즈니스 프로세스의 이벤트에 주로 포함된다. 2. 그레인 정의 개별 팩트 테이블의 행이 나타내는 내용을 정확히 지정한다. 비즈니스 프로세스가 포함하는 최대한 자세한 속성의 집합을 그레인이라 한다. 고객 판매 거래에서 개별 제품을 스캔할 때마다 한 행, 의사로부터 받은 청구서의 한 항목당 한 행, 창고에 있는 각 품목의 재고 수준에 대한 일일 스냅샷당 한 행 등 비즈니스 프로세스의 이벤트를 ..

현상으로 자신을 정의하지 말자

한국인의 문장들은 참 특이하다. 무언갈 소유하지 않고서는 자기 자신을 설명하지 못하는 경우가 많다. 타인에게 자기 자신을 설명할 때나 누군가 나에 대해서 입을 열 때 하나같이 하는 말들은 무언가를 가졌는지에 관심이 있다. 그 사람 집 있어? 애인은 있으신가요? 어디 회사 다녀요? 외국에서의 문장은 사뭇 다르다. 소유의 개념이 아닌 행동을 통해 누군가에 대해 소개받는다. Where do you live? Are you seeing someone? What do you do for a living? 애초에 외국에선 이런 질문들을 프라이버시라 생각하고 남들에게 함부로 말하지 않는다고 한다. 그럼에도 불구하고 질문을 이루는 문장의 느낌은 사뭇 다르다. 최근 한국의 행복 지수는 전세계에서 하위권을 기록하고 있다...

개발/일기장 2024.04.01

Spark Standalone, Spark on K8s with Livy (feat. Ozone)

사내 개발 애플리케이션이 내장하고있던 Spark를 떼어내 클러스터로 구축하다가 Ozone FS와 호환이 안되는 문제가 풀리지 않아 구축을 반쯤 포기한 상태에 있었다. 그래도 개인적으로 구축을 다시 도전해보고자 처음부터 다시 차근차근 시도해보기로 하였다. 몇주 간의 끝없는 디버깅 지옥을 방지하기 위해 이번에는 Zeppelin을 도입하여 인프라 점검을 간단하게 수행할 수 있도록 하였다. 0. 겪은 난항 0-1. Apache Ozone 호환 문제 Spark가 K8s 클러스터에 실행되고있는 Ozone FS에 접근하기 위해선 특정 의존성이 필요하다고 한다. https://mvnrepository.com/artifact/org.apache.ozone/ozone-filesystem-hadoop3 이 의존성은 Spar..

개발/각종이슈 2024.01.16

Spark on K8s with Livy

진행하고 있는 프로젝트에서 큰 용량의 데이터셋을 Spark로 연산 시 OOM 에러가 뜨는것을 발견하였다. 프로젝트는 Spark 자체를 내장하고 local에서 4개의 executor를 띄워 연산하기에, JVM이 데이터의 용량을 버티지 못하게 된 것이다. 이 때문에 프로젝트와 Spark 엔진을 분리하고 Spark 자체가 K8s 에서 자원을 할당받아 연산을 수행하도록 구조를 수정하였다. 또한 Spark 클러스터에 간편하게 작업을 제출할 수 있도록 Apace Livy를 통해 작업을 관리할 수 있도록 구성 하였다. Livy의 동작 구조는 다음과 같다. Livy Client는 REST API 또는 Programmatic API를 통해 Livy Server에게 Spark 작업 수행 요청을 제출할 수 있다. Livy ..

개발/각종이슈 2023.11.22

K8s 권한 관리하기(RBAC)

K8s 클러스터는 물론 혼자서 사용하는 환경이 아니다. 다양한 서비스를 배포할 수 있고, 한명의 개발자가 여러개의 서비스/여러명의 사용자가 하나의 서비스를 관리할 수 있는 것이다. 클러스터의 규모가 커짐에 따라 사용자들의 역할 분리는 필수적이다. 1팀의 팀원이 실수로 2팀의 자원을 날려먹는 일과 같은 적절치 못한 접근에 제한을 주어 불미스러운 일이 발생하지 않도록 방지하는 것을 예로 들 수 있겠다. 우리가 클러스터 상에서 kubectl을 사용해 수행하는 모든 명령들은 K8s 클러스터를 관리하는데에 중추 역할을 하는 API Server로 통한다. 요청에서 응답까지 거치는 API Server의 내부 레이어 중에선 사용자의 신원을 파악하고 권한을 부여하는 Authenticating, Authorizing과 같..

Kubernetes 클러스터 서버 이전

이사 이슈로 K8s 클러스터 서버의 IP가 바뀌었다. kubeconfig만 고치면 해결 되겠거니 했는데, 막상 찾아보니 할 일이 많았다. SSL 인증서가 IP에 의존하기 때문에 인증서를 갈아엎어야 하고 여기저기 있는 Config에서 예전 IP 설정을 일일이 바꿔주어야 된다고 한다. 그래서 공식적으로는 IP에 직접적으로 의존하기 보단, DNS name을 사용하는 것이 좋다고 한다. 0. IP 변경 준비 처음에는 /etc/kubernetes 디렉토리에서 작업을 진행한다. ip도 변수로 지정해두는게 마음 편하다. cd /etc/kubernetes oldip=xxx.xxx.xxx.xxx(예전 IP) newip=ooo.ooo.ooo.ooo(바뀐 IP) 참고로 이 과정은 1.27버전과 1.19 버전에서 확인해보았다..

개발/각종이슈 2023.09.14

Kubernetes 클러스터 구축 초요약본

혼자 공부할 때 K8s를 설치할 일이 잦다. 일일히 설치하는게 너무 귀찮아서 초고속 요약을 정리해보았다. 1. 기본 유틸리티 설치sudo apt updatesudo apt install net-tools vim wget curl -y 2. Docker engine 설치sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-releasesudo mkdir -m 0755 -p /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgecho \ "deb [arch=$(d..