카테고리 없음

JVM Python

터칭 데이터 2024. 2. 5. 14:22

 

Spark 고급과 Spark ML


Shuffling시 Skew 처리방식과 Spark ML에 대해 배워보자

 

 

 

 

 

 

 

 

Contents


1. 기타 기능/개념 살펴보기
2. Driver와 Executor 해부
3. 메모리 이슈 정리
4. JVM과 Python 간의 통신
5. Caching과 Persist
6. Dynamic Partition Pruning

 

 

 

 

 

 

JVM과 Python 간의 통신

 

JVM과 Python 프로세스들간의 통신에 대해서 알아보자

 

 

 

 

 

 

PySpark Driver

Python 프로세스 + JVM 프로세스

 

 

 

 

 

 

 

 

 

 

 

 

 

PySpark Memory (1)

 

Spark은 JVM Application이지만 PySpark은 Python 프로세스

● JVM에서 바로 동작하지 못함 따라서 JVM 메모리를 사용할 수 없음

 

spark.executor.pyspark.memory (Python 프로세스)

 

spark.python.worker.memory (Py4J)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PySpark Memory (2)

 

spark.executor.pyspark.memory

● PySpark은 기본으로 overhead memory를 사용. 이 환경변수가 사용되면 PySpark이 사용할 수 있는 메모리는 이 환경변수의 값으로 고정됨
● 이는 사실 PySpark이 외부 파이썬 함수를 쓰는 경우에만 필요 (기본적으로는 세팅되지 않음)

 

spark.python.worker.memory

● 디폴트 값은 512MB (512m)
● JVM과 파이썬 프로세스간의 통신을 담당하는 Py4J가 사용할 수 있는 메모리의 양
● 이 크기를 넘어가면 디스크로 Spill 발생

 


● spark.executor.pyspark.memory는 파이썬 프로세스의 사용 메모리 크기 결정
● spark.python.worker.memory는 JVM에서 사용되는 파이썬 오브젝트들의 최대 메모리
결정

 

 

 

 

 

 

 

 

 

 

 

Spark과 Python간의 통신

 

Py4J: 파이썬과 JVM간의 데이터 교환을 통해 둘간의 연동을 도와주는 프레임웍

 

DataFrame/RDD 연산중에 파이썬 코드가 사용되면?

● 이는 별도의 파이썬 프로세스를 통해 실행되며 이 경우 파티션 데이터가 모두 넘어감

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Spark과 UDF

 

Java나 Scala로 작성

 

Python으로 작성

 

Pandas Python으로 작성

● Vectorized UDFs
● PyArrow가 사용됨