brickstudy / infra-docs

infra docs
0 stars 0 forks source link

[NEW] local spark 작업 환경 setup infra #3

Open seoyeong200 opened 5 months ago

seoyeong200 commented 5 months ago

요건 파악

*DE 요청관리에 있는 내용 기반으로 요청 담당자와 커뮤니케이션을 통해 자세히 요건 파악을 진행해주세요.

Local Spark 활용을 위한 Docker 구축
: local 환경에서 개인이 spark를 사용해 데이터를 다뤄볼 수 있도록 docker desktop 사용하여 docker container로 패키징된 spark application, jupyter notebook, aws등 인프라에 연결 가능한 환경 개발


정리

A. (Local mode) Notebook에서 스파크를 이용한 데이터 처리 코드를 interactive하게 실행하고 실습하기 위한 환경
B. (Cluster mode - standalone) spark-submit으로 스크립트 제출하여 spark job을 실행시키는 환경

환경 분리 context

기존 컴포즈 파일 의 경우 master, worker spark-cluster와 jupyter 컨테이너를 띄워서 주피터 상에서 spark-cluster 내의 스파크 엔진을 standalone cluster mode로 사용하게끔 설정이 되어있습니다.

하지만 jupyterlab 컨테이너 자체에도 spark 가 설치되어있기 때문에, 노트북으로 실습하는 용도로 환경을 구성하는데에 spark-master, spark-worker도 함께 빌드하는게 불필요하다고 판단했습니다. 따라서 단순 pyspark 코드가 실행되는지 실습할때에는 (A)jupyterlab 컨테이너만 띄워 local mode(no cluster manager) 로 학습 및 개발이 진행되고, (B)클러스터의 경우 별도로(docker-compose_prod_test.yml) 띄울 수 있게끔 분리해두면 작업이 더 가벼워질 것이라 생각했습니다.

추가적으로 해당 컴포즈 파일이 실제 작업에 사용하는 pc의 사양에서 사용하기에 메모리 점유가 높아 작업이 실패한다는 케이스가 있었습니다. jupyter 작업 환경을 최대한 가볍게 가져간다면 해당 문제 또한 해결될 것이라 기대합니다.


🔗 관련 링크


📌 진행상황

*진행상황에 예상 마감 일정까지 함께 기재해주세요!!

seoyeong200 commented 5 months ago

논의 필요

  1. A/B로 구분해두는게 필요한가?
  2. spark history server 가 필요한가?
    • spark monioring official docs guide
    • spark ui 에서 확인할 수있는 정보들의 lifespan이 application 구동되는 동안으로 한정적이기 때문에, history server 구동해서 spark event(both completed and incompleted)를 영구 스토리지에 materialized 하면 좋을거라 생각
    • 현재 base image 로 사용하는 bitnami spark image의 entrypoint로 사용되는 shell script가 상위 베이스 이미지 자체에 빌드되어있는데, spark-master, spark-worker만 지원.
    • 이것만 지원하는 이유가 있을 것 같습니다. spark event 데이터 자체도 물리적으로 저장하는게 사실 거의 취하는 방식이 아니라는 생각이 듭니다.
  3. spark base image를 어떤 솔루션으로 가져갈지도 정할때에 의견 있으시다면 공유해주기를 바랍니다.
    • jvm 이미지에 직접 spark 환경 구성하고 커스텀할지, 인터넷에 있는 솔루션 사용할지?
    • jvm 기반으로 직접 dockerfile 작성
    • or just use built image
      • bitnami/spark image - most popular, docker hub dockerfile
      • delta lake - the environment connected to delta lake is set up already, can read data from delta. docker hub, dockerfile
      • 추가 더 조사 필요
robert-min commented 5 months ago
  1. A/B로 구분해두는게 필요한가?

A. 흐음 설명해주신대로 우리 실습할 때나 로컬 환경에서 사용하는 용도로는 A로 충분할 것으로 생각. 만약에 A환경으로 불가능한 작업이 있다고하면 Databricks에서 작업하는 걸로 가이드하는 걸로 진행합시다!! (물론, 우리가 진행하는 프로젝트 정도로 불가능한 작업은 없을 것으로 생각함!!)

다만, B도 시간 있으면 만들어두는 것도 괜찮을 듯함!! 서영님의 프로젝트 경험으로 Spark의 모든 환경을 다 구축해보고 각 구축 목적을 이해하는 느낌으로!! 만들어 놓으면 나중에 spark-sumit 테스트 용도로도 사용할 수 있을 것 같습니다!!

결론, 일단 우선은 A만!!! 시간 잇으면 B도 진행


  1. spark history server 가 필요한가?

A. 이거는 처음 고민해본 내용이라 좀 더 리서치가 필요할거 같은데, 지금 생각으로는 필요없지 않을까로 좀 더 기울고 있음!! Spark history 필요성 검색하면 아래와 같이 나오는데, 현재 느끼기에는 디버깅 및 최적화정도 말고는 꼭 필요한지는 의문이 있음!! 사람마다 생각은 다 다르겠지만 나는 보통 인프라 구축할 때, 내가 해당 인프라를 구축할 필요성이 명확하게 없으면 안하는게 맞다라고 생각하는 주의라 history server의 역할이 없다면 필요없다고 생각합니다!!

[history server 필요성 검색 결과] 1/ 애플리케이션 실행 기록: Spark History Server는 모든 Spark 애플리케이션 실행의 메타데이터와 로그를 저장하여 나중에 분석할 수 있게 합니다. 2/ 디버깅 및 최적화: 애플리케이션의 성능 문제를 디버깅하고 최적화하는 데 도움이 됩니다. 실행된 작업의 상세한 정보와 실행 계획을 시각적으로 확인할 수 있습니다. 3/ 리소스 사용 모니터링: 클러스터에서 각 애플리케이션이 사용한 리소스를 추적하여 자원 할당을 최적화할 수 있습니다. 4/ 이력 관리: 과거 실행 이력을 저장하고 필요할 때 언제든지 접근할 수 있어, 반복적인 작업이나 주기적인 분석에 유용합니다.


  1. spark base image를 어떤 솔루션으로 가져갈지도 정할때에 의견 있으시다면 공유해주기를 바랍니다.

A. 이거 개인적인 의견으로는 서영님이 직접 jvm 이미지에 구축해보는걸 추천!! 직접 구축하면서 리서치해보고 새롭게 알게된 내용 정리하는 것 자체가 중요한 경험이라고 생각하기 때문에 직접 해보면 좋을 듯 합니다!! 또, 직접 구축하면 어떤 원인인지 파악하기 그래도 용이한데 이미 만들어진 이미지 쓰면 원인 파악이 어려울 수도 있음!!

물론, 시간이 부족하면 이미 만들어진 이미지에 사용해도 무관합니다!!

@seoyeong200