한줄요약: 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
3. spark-local-dir 을 이용해 해결
AS-IS
spark.kubernetes.executor.volumes.persistentVolumeClaim.data.options.claimName", "OnDemand" ### $ k describe pod/test-spark-9077be7fa7a8dbbc-exec-6 -n spark Volumes: data: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: test-spark-9077be7fa7a8dbbc-exec-6-pvc-0 ReadOnly: false spark-local-dir-1: Type: EmptyDir (a temporary directory that shares a pod's lifetime) Medium: SizeLimit: <unset> |
TO-BE
.config("spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-hgkim.options.claimName", "OnDemand") \
.config("spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-hgkim.options.storageClass", "rook-ceph-block") \
.config("spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-hgkim.options.sizeLimit", "10Gi") \
.config("spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-hgkim.mount.path", "/opt/spark-scratch") \
.config("spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-hgkim.mount.readOnly", "false") \
### # empty-dir이 없다는 것을 확인 $k describe pod/hgkim-exec-1 -n spark-operator spark-local-dir-hgkim: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: hgkim-7aa9417fa9e191b1-exec-1-pvc-0 ReadOnly: false |
더 이상 data spill이 일어나지 않음
기타
공식 문서에서도 scratch space를 이용하는 방법에 대해서 알려준다.
Using Volume For Scratch Space
By default, Spark uses temporary scratch space to spill data to disk during shuffles and other operations. The scratch directory defaults to /tmp of the container. If that storage isn't enough or you want to use a specific path, you can use one or more volumes. The volume names should start with spark-local-dir-.
spec:
volumes:
- name: "spark-local-dir-1"
hostPath:
path: "/tmp/spark-local-dir"
executor:
volumeMounts:
- name: "spark-local-dir-1"
mountPath: "/tmp/spark-local-dir"
...
Then you will get SPARK_LOCAL_DIRS set to /tmp/spark-local-dir in the pod like below.
참고
-https://www.slideshare.net/databricks/apache-spark-on-k8s-best-practice-and-performance-in-the-cloud
'Data > Spark' 카테고리의 다른 글
Spark) k8s,jupyterhub에서 sparkUI 사용하기 (0) | 2022.03.24 |
---|---|
Spark) spark_submit시 spark.app.id warning_ jupyterhub (0) | 2022.03.24 |
Spark) Thrift serverHive-Metastore OOM 해결_메모리 추가할당 (0) | 2022.01.10 |
Spark) Spark Thrift Server 클러스터에서 올리기 (0) | 2021.12.19 |
Spark) Spark Base Image Docker Build(VM, 내부망) (0) | 2021.11.11 |