2016-06-26 3 views

답변

4

멀티 스레드 파이썬 문제는 Apache Spark 내부와 구분됩니다. Spark의 병렬 처리는 JVM 내부에서 처리됩니다.

enter image description here

그리고 그 이유는 파이썬 드라이버 프로그램에서 SparkContext는 JVM을 시작하고 JavaSparkContext을 만들 Py4J를 사용한다는 것입니다.

Py4J는 Python과 Java SparkContext 객체 간의 로컬 통신을 위해 드라이버에서만 사용됩니다. 대규모 데이터 전송은 다른 메커니즘을 통해 수행됩니다.

Python의 RDD 변환은 Java의 PythonRDD 객체의 변환에 매핑됩니다. 원격 작업자 컴퓨터에서 PythonRDD 객체는 Python 하위 프로세스를 시작하고 파이프를 사용하여 통신하며 사용자의 코드와 처리 할 데이터를 보냅니다.

추신 : 실제로이 질문에 완전히 답변 할 지 모르겠습니다.

+1

여기서 핵심은 PySpark가 멀티 스레딩을 사용하지 않기 때문에 GIL이 단순히 문제가되지 않는다는 것입니다. – zero323

+0

@ zero323 당신의 의견을 정교하게 할 수 있습니까? –

+0

정교 할 것이 많지 않습니다. 테스트를 제외하고 PySpark가 스레드를 사용하여 외부 프로세스 시작과 같은 몇 가지 2 차 태스크를 수행하는 곳이 몇 군데 있습니다. 다른 모든 것은 그냥 좋은 오래된 단일 스레드 처리. – zero323

관련 문제