2017-11-13 4 views
2

두 개의 조인을 수행하는 기본적인 스파크 작업이 있습니다. 합쳐진 3 개의 데이터 프레임은 어느 정도 크기가 크며 각 프레임에 약 20 억 개의 레코드가 있습니다. 필요한 경우 자동으로 노드를 확장하는 스파크 인프라가 있습니다. 그것은 매우 간단한 spark SQL 쿼리와 같은 결과를 디스크에 기록하는 것처럼 보입니다. 그러나 내가 보았을 때 직장은 항상 99 %에 머물러 있습니다. 스파크 UI. 내가 시도 것들의점화 작업이 99 %에서 멈추고 계속되지 않습니다.

무리는 다음과 같습니다

  • executorsexecutor memory의 수를 늘립니다.
  • 파일을 쓰는 동안 repartition을 사용하십시오.
  • spark SQL join

그러나, 이러한 것들의 방법으로도 문제가 해결되지 않은 등 대신 기본 스파크 join를 사용합니다. 누군가가이 문제를 해결할 경험을 공유 할 수 있다면 좋을 것입니다. 미리 감사드립니다.

답변

1

조인 조작으로 인해 동일한 키를 갖는 모든 레코드가 동일한 실행 프로그램으로 셔플됩니다. 데이터가 비대칭 인 경우 행 수가 매우 많은 하나 또는 소수의 키가 있음을 의미합니다. 그런 다음이 모든 실행을 처리해야하는 단일 실행 프로그램입니다. 본질적으로 스파크 작업은이 단일 키가 단일 스레드에 의해 처리되어야하기 때문에 단일 스레드가됩니다.

조인 작업이 조인 키를 해시하여 데이터를 다시 셔플하면 파티션을 다시 지정하면 도움이되지 않습니다. 불행한 해시의 경우 파티션 수를 늘리려고 할 수 있습니다.

이 동영상은 문제를 설명하고, 솔루션 제안 : https://www.youtube.com/watch?v=6zg7NTw-kTQ

건배를 Fokko