Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Transfer to kubernetes data platform from EMR

25 views

Published on

Transfer to kubernetes data platform from EMR
Kubernetes를 활용해 EMR 서비 대체하는 Data Platform 만들기

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

Transfer to kubernetes data platform from EMR

  1. 1. Cloud Independent Cloud Data Platform from EMR/DMS/GlueJobs to Kubernetes
  2. 2. Kubernetes? Presto on k8s Spark on k8s Kubernetes 운영
  3. 3. 왜 Kubernetes 일까
  4. 4. - Managed service - Software lists - Presto - Spark server - Hive/Hue - Hadoop - Zeppelin - JupyterHub - 장점 - 설치/환경설정/maintenance - 단점 - version update(그래도 빠름) EMR
  5. 5. Services EMR HDFS s3 Hadoop/Hive/pi g/... spark이나 presto로 변환 Spark Job : spark on kubernetes Server : spark server는 대체할 방법을 찾지못함 Presto prestodb, trino, starburst 등에 kubernetes 배포가 잘 나와있음 Zeppelin spark server가 필요한 경우는 EMR 사용 Glue/DMS glue/DMS는 서비스를 빠르게 만들고 안정적으로 운영하기에는 여전히 좋은 서비스 이지만, 성능/비용/데이터변환에 대한 다양한 요구가 있다고 한다면 ETL image를 만들어서 실행하는것도 좋은 선택 Data Platform services on AWS 에 대한 재고
  6. 6. Kubernetes 장점(Why) - 서비스 안정성/container관리 - nodegroup 설정으로 서버관리 용이 - Fast container deployment(ec2 create, container실행등의 과정) - Helm이나 Vendor에서 제공하는 yaml 파일을 이용하면 새로운 제품의 설치, POC, Test이 용이 추가 Resources - EMR 대신 Kubernetes를 운영필요 - Kubernetes 운영 R&R
  7. 7. Presto
  8. 8. Presto - prestodb, trino(prestosql) - Auto scaling - resource 활용기반 auto scaling - schedule based - K8s - Internet/Internal service - subnetAZ는 하나만 - ELB -> Ingress-Nginx -> Service(k8s) -> Coordinator(Deployment) -> Worker(Deployment) - EMR에 비해 장점 - restart 쉬움 - 장애시, 설정변경시 - scale out 이 용이 - worker deployment 의 replica 숫자만 변경하면 scale
  9. 9. Trino(prestosql) - image 1. git clone https://github.com/trinodb/trino.git 2. ./mvnw clean install -DskipTests 3. 추가library - docker/Dockerfile에 추가 - JMX 를 활용해서 prometheus 추가하기위한 llbrary - RUN yum -y -q install wget && - RUN wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.12.0/jmx_pr ometheus_javaagent-0.12.0.jar -P /usr/lib/presto/ 4. docker/build-local.sh 5. ECR 에 push
  10. 10. - yaml파일 - 주요 configMap - coordinator, executor 는 deployment를 이용 Presto deploy jvm.config: | -server -Xmx51g -javaagent:/usr/lib/presto/jmx_prometheus_javaagent-0.12.0.jar=8081:/usr/lib/presto/etc/presto.yml config.properties: | coordinator=true #worker일경우 false query.max-memory=200GB query.max-memory-per-node = 20GB query.max-total-memory-per-node =35GB discovery-server.enabled=true query.max-stage-count=250
  11. 11. Spark
  12. 12. Architecture of Spark-on-Kubernetes - spark driver, executor 가 pod 형태로 실행 - EMR대비 장점 - 기존DAG별로 EMR을 사용했 을때와 비교해서 emr 시작시간 절약 - 동시 여러 task를 완전하게 독립 적으로 실행(emr에서 여러개 task가 실행시 서로 영향받는거 고려할필요x) - airflow등 job scheduler에서 EMR실행할 필요없이 task 단독 으로 실행가능
  13. 13. - spark-submit - master를 kubernetes 로 - spark on k8s operator - yaml 제출 형태로 spark 실행 - https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/master/docs/user- guide.md - Image build - airflow operator - 기존 EMR submit operator대체 - https://github.com/kubernetes-client/python - k8s - network 비용발생 문제로 subnetAZ는 하나만 - r5.2xlarge 이상(cpu 5core지정을 위한) Spark
  14. 14. - download spark - https://www.apache.org/dyn/closer.lua/spark/spark-3.0.1/spark-3.0.1-bin-hadoop3.2.tgz - 설정파일 - Dockerfile - scala : kubernetes/dockerfiles/spark/Dockerfile - pyspark: kubernetes/dockerfiles/spark/bindings/python/Dockerfile, dockerfiles/spark/bindings/python/requirements.txt - 설정파일 - 세부설정은 EMR참조 - COPY $conf_path/hive-site.xml /opt/spark/spark-conf/ - COPY $conf_path/spark-defaults.conf /opt/spark/spark-conf/ - COPY $conf_path/core-site.xml /opt/spark/spark-conf/ - Library - aws, s3, kinesis, delta lake 등 필요한 library COPY - bin/docker-image-tool.sh 후 ECR에 push Spark - image
  15. 15. Spark default ./bin/spark-submit --master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port> --deploy-mode cluster --name spark-pi --class org.apache.spark.examples.SparkPi --conf spark.kubernetes.container.image=<spark-image> local:///path/to/examples.jar Spark on k8s operator - apiVersion: "sparkoperator.k8s.io/v1beta1" kind: SparkApplication Resource Conf The cpu limits are set by spark.kubernetes.{driver,executor}.limit.cores. The cpu is set by spark.{driver,executor}.cores. The memory request and limit are set by summing the values of spark.{driver,executor}.memory and spark.{driver,executor}.memoryOverhead. Spark kubernetes - 실행
  16. 16. - ETL image개발 - source/target 관련한 library 가 편리하고 다양함 - 데이터 변환/monitor 관련한 기능추가 - Data Extraction을 위해 Python 을 이용하고, Load는 spark을 이용해서 적재(hive metastore) - airflow - kubernetesPodOperator 를 통해 실행 - airflow를 통해 실행/모니터를 다른 Data Processing작업과 통합해서 관리 DMS/Glue
  17. 17. Kubernetes 운영
  18. 18. - Fargate - w/ no wait - resource 제한 - Serverless data processing 성능개선(Redshift spectrum) - snowflake나 databricks 기대하는 AWS services
  19. 19. Kubernetes 운영 - Nodegroup monitor 를 통해 manual scheduling - prometheus, grafana - 안정적인 운영 필요시 ASG에 scheduled action 추가 - Nodegroup AMI 주기적인 upgrade (https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-amis.html)
  20. 20. Data engineer role - Service운영 - Image build/관리 - Kubernetes 관리 - Pod/Deployments - Nodegroup - Services - SG - AWS ASG - AWS 관리

×