다음에 대해 특정 시점마다 하나의 Spark 작업 만 실행한다고 가정 해 봅시다.
내가 지금까지 얻는 것
다음은 Spark에서 발생하는 것을 이해하는 것입니다.
- a
SparkContext
가 작성되면 각 작업자 노드가 실행기를 시작합니다. 실행기는 별도의 프로세스 (JVM)이며 드라이버 프로그램에 다시 연결됩니다. 각 실행 프로그램에는 드라이버 프로그램의 jar이 있습니다. 드라이버를 종료하면 실행 프로그램이 종료됩니다. 각 실행자는 일부 파티션을 보유 할 수 있습니다. - 작업이 실행될 때 계보 그래프에 따라 실행 계획이 작성됩니다.
- 실행 작업은 여러 개의 (계보 그래프에서) 변환 및 작업을 포함하지만 셔플은없는 단계로 분할됩니다. 따라서 스테이지는 셔플로 분리됩니다.
나는 이해
- 작업은 Function 객체를 직렬화하여 드라이버에서 실행기로 전송되는 명령입니다.
- 실행 프로그램은 드라이버 jar를 사용하여 명령 (작업)을 deserialize하고 파티션에서 실행합니다.
그러나
질문
스테이지를 해당 작업으로 어떻게 분할합니까?
구체적으로 특별히:
- 작업이 변환 및 작업에 의해 결정됩니까 아니면 작업에 여러 변환 / 작업이있을 수 있습니까?
- 작업이 파티션에 의해 결정됩니까 (예 : 파티션 당 단계 당 하나의 작업).
- 작업이 노드에 의해 결정됩니까 (예 : 노드 당 단계 당 하나의 작업)?
내가 생각하는 것 (올바른 경우에도 부분 답변 만)
에서 https://0x0fff.com/spark-architecture-shuffle , 셔플은 이미지와 설명
나는 규칙이
각 단계는 노드 수에 관계없이 # number-of-partitions 작업으로 나뉩니다.
첫 번째 이미지의 경우 3 개의 맵 작업과 3 개의 축소 작업이 있다고합니다.
0x0fff의 이미지의 경우 8 개의 맵 작업과 3 개의 축소 작업이 있습니다 (오렌지 3 개와 짙은 녹색 파일 3 개만 있다고 가정).
어떤 경우에도 공개 질문
그 맞습니까? 그러나 그것이 정확하더라도, 여러 작업 (예 : 여러 맵)이 하나의 작업 내에 있는지 또는 작업 당 하나의 작업으로 구분되는지 여부에 따라 여전히 열려 있기 때문에 위의 질문에 모두 대답하지는 않았습니다.
다른 사람들의 말
Spark의 작업은 무엇입니까? Spark 작업자는 jar 파일을 어떻게 실행합니까? 그리고 어떻게 아파치 스파크 스케줄러는 작업으로 파일을 분할합니까? 비슷하지만 내 질문에 명확하게 대답했다고 생각하지 않았습니다.