'데이터 엔지니어'로 성장하기

정리하는 걸 좋아하고, 남이 읽으면 더 좋아함

SPARK 12

K8s) host명으로 내부 데이터 접근하기_spark,boto3,k8s

IP로 데이터에 접근하다보니, 불안해서 host명으로 수정했어요 k8s에서 작업하시는 분들께 도움이 되었으면 합니다 :) 요약 문제 : IP로 데이터 접근하니, 보안 리스크가 생김 상황 : spark image, jupyterhub, airflow 에 적용가능함 조치 : IP를 host명으로 대체함 결론 : 보안 리스크 줄이고, cluster 관리가 편해짐 설명 1. 문제 data에 IP로 접근해서 생길 수 있는 보안 이슈 발견 k8s cluster를 여러개 관리하다보니까, IP가 이제 꼬이기 시작했어요. 보안 이슈도 있었지만, 곧 신규 cluster 구축이 예정되어있어서 미리 변경하고 싶었어요 제가 편해야 시스템도 안정적으로 변하니까요ㅎ 2. 상황 일단 3가지 먼저, spark image/ jupyte..

기타/K8S 2022.07.07

Airflow) 'Task 분리' 실무 적용하기 _k8s/spark

2022.05~07, 3달동안 진행한 airflow 스터디를 끝내고 실무에 적용한 내용 일부를 정리햇어요 airflow를 운영하면서 가장 불편했던 부분은 'Task가 분리되지 않은 것' 이었어요 어디서 문제가 생겼는지 추적할 수도 없는게 불편했어요 데이터 흐름이 어떻게 되있는지 알 수 없었어요 멱등성, 원자성도 지켜지지 않았어요 예상 독자는 아래와 같아요 airflow 도입을 고민하는 분 airflow를 이제 막 사용하시는 분 airflow 관리가 어려운 운영 담당자 요약 문제: airflow에서 spark job이 간헐적으로 실패함 분석: task의 분리가 필요함 적용: task를 분리함 결과: 문제 발생 시점을 알 수 있고, 불필요한 작업을 줄일 수 있게됨 설명 1. 문제 airflow에서 spark..

Data/Airflow 2022.07.04

Spark) k8s,jupyterhub에서 sparkUI 사용하기

spark ui를 jupyterhub에서 접근이 안되서 골머리를 썩는중 검색하다가 겨우 방법을 찾음 jupyterhub 접속 경로: http://10.***.29.***:30011/user/manager spark_session = SparkSession \ .builder.appName(APP_NAME) \ .master("k8s://https://172.17.***.**:6443") \ .config('spark.ui.proxyBase', '/user/manager/proxy/4040') \ jupyterhub spark UI 접속 경로: http://10.***.29.***:30011/user/manager/proxy/4040/environment/ 성공! 물론 pip install로 proxy 관..

Data/Spark 2022.03.24

Spark) spark_submit시 spark.app.id warning_ jupyterhub

jupyterhub에서 spark_submit을 하는데 warning이 뜬다. 예외처리해주면되는데, 궁금해서 알아봄 spark.app.id는 뭘까 import os, posixpath, socket import pyspark from pyspark.sql import SparkSession ​ spark = ( SparkSession.builder.appName("hgkim-spark") .config("spark.kryoserializer.buffer.max", "1024m") .config("spark.sql.sources.partitionOverwriteMode", "dynamic") .master("k8s://https://172.17.***.56:6443") .config("spark.kuber..

Data/Spark 2022.03.24

Spark) spark volume data spill 이슈_spark-local-dir

한줄요약: spark-local-dir 로 실행안하는 사용자들 어칼까.. 이러다 다 죽음 ㅜㅜ 요약 spark-submit의 대량 read 작업시 spark job이 죽음 대량 작업이라 data spill 관련 문제로 추정 spark-local-dir 을 이용해 해결 설명 1. spark-submit의 대량 read 작업시 spark job이 죽음 2. 대량 작업이라 data spill 관련 문제로 추정 예전에 airflow로 잡돌릴 때, pvc 를 생성해서 해결해줬던 것으로 기억 (이름을 spark-loca-dir로 만들어주면 되는 것) https://mightytedkim.tistory.com/43 (Kubernetes) k8s와 Airflow 이용한 spark작업_SparkKubernetesOper..

Data/Spark 2022.03.21

Airflow) Pool 활용해서 dag 겹침 이슈 해결

평화로운 어느날 sparkKubernetesOperator가 미쳐 날뛰기 시작했다. 분명 10분정도면 끝나는 spark job인데, 30분이 넘게 걸려서 뒤의 작업과 겹쳐버렸다. (내 잘못ㅜ) grafana 보니까, spark-driver가 여러개 띄어져 있고 executor는 더 난리. 혹시 몰라 grafana에 대시보드 spark 용으로 만들어둬서 다행 spark thrift server ui를 보니까, 0.1초면 끝나는 작업이 hang 걸려있고 난리도 난리가 아니었다. schedule_interval="0 4 * * * " -> 10분이면 끝나는 작업 schedule_interval="30 4 * * * " -> 30분 넘게 걸려서 다른 작업과 겹침 줄줄이 비엔나로 겹침 쨋든 문제는 발견해서 다행 ..

Data/Airflow 2022.03.15

Spark) Thrift serverHive-Metastore OOM 해결_메모리 추가할당

갑자기 월요일 아침에 확인해보니 airflow job들이 일부 죽어잇음, 일단 request/limit 수정함 상황 - 왜그런가하고 봣는데, Thrift Server 사용하는 job들만 죽음 - 에러 로그는 err_msg = java.sql.SQLException: Error running query: org.apache.thrift.transport.TTransportException - hive meta store Pod를 보니까 pool, OOM Exception in thread "pool-7-thread-921" java.lang.OutOfMemoryError: GC overhead limit exceeded 문제 hivemetastore 메모리 부족 해결 metastore.yaml을 수정함, ..

Data/Spark 2022.01.10

Spark) Spark Thrift Server 클러스터에서 올리기

한줄요약: cluster로 thrift 를 올리는 정식 방벙은 아직 안나와서, 추후에 trino로 옮겨야할 것 같다. 개요 주제: Spark thrift server를 K8S cluster에 구현해함 문제: Cluster로 Thrift Server를 실행하는 방법이 없음 해결: 'mykidong' 블로그를 통해 예시를 찾음 이 포스팅은 mkidong님의 예시를 각색해서, 오프라인 온프렘 k8s cluster에 적용한 내용이에요 먼저, Spark Thrift Server 가 무엇인지 간단히 설명하고 예제와 함께, 참고한 블로그와 다른점을 기술하도록 할게요 ㅎ thrift server란? spark 에 sql을 날릴 수 있는 Thrift Server 라는게 있어요 daemon 처럼 jdbc 를 날릴 수 있는..

Data/Spark 2021.12.19

Kubernetes) k8s와 Airflow 이용한 spark작업_SparkKubernetesOperator

요약 1. kubenetes 환경에서 airflow를 이용해 spark_submit을 함 2. SparkKubernetesOpertor(SKO)를 선택함 개요 상황 쿠버네티스 클러스터 환경에서 spark_submit 관리 필요 후보 (3가지) KubernetePodOperator(KPO) : dag SparkApplication(CRD) : yaml SparkKubernetesOperator(SKO) : yaml + dag 최종 결과 (SKO) command script/scample/sample-sko-spark.yaml dags/sample/sample-sko-spark.py 시행착오 (FYI) SKO) role 권한 때문에 Forbidden 에러 SKO) sensor의 task_id 때문에 에러 S..

Data/Airflow 2021.11.25

Airflow) K8S Pod 만들기_k8sPodOperator, helm

airflow 1.10 부터 적용되고, airflow 2.0에서 본격적으로 사용되는 KPO 자료가 없어서 2주간의 삽질기 ㅎㅎ 아 진짜 쫄깃 쫄깃하고, 안되서 도중에 argo를 파야하나 생각하고 휴.. 요약 airflow는 airbnb에서 만든 파이프라인 관리 어플리케이션입니다. 현재 라인, 쏘카 등에서 사용하고 있습니다. 저는 네이티브 환경의 kubernetes에서 airflow를 사용했어요. kuberentesPodOperator 설정 KubeneresPodOperator : DAG LOGGING : minIO, connection GIT-SYNC : secret, ssh Helm : values.yaml KubeneresPodOperator GIT-SYNC : secret, ssh LOGGING 작..

Data/Airflow 2021.11.12