2017-12-05 19 views
0

튜닝을 실행하는 가장 좋은 설정을 선택하는 방법을 궁금합니다 점화 작업. 기본적으로 큰 csv 파일을 DataFrame에 입력하고 일부 문자열 발생 횟수를 계산합니다.조정 스파크, 큰 csv 파일을 읽을 수있는 실행 프로그램과 메모리 드라이버를 설정하십시오

입력 파일이 500GB 이상입니다. 스파크 작업이 너무 느린 ..

터미널 진행률 표시 줄는 :

[Stage1:=======>      (4174 + 50)/18500] 

NumberCompletedTasks: (4174)은 약 1 시간이 소요됩니다.

NumberActiveTasks: (50)으로 설정할 수 있다고 생각합니다. --conf spark.dynamicAllocation.maxExecutors=50 (다른 값으로 시도).

TotalNumberOfTasks: (18500), 왜이 문제가 해결 되었습니까? 파일 크기에만 관련이 있습니까? 작은 로직으로 csv을 읽었으므로 어떻게 스파크 작업을 최적화 할 수 있습니까?

--executor-memory 10g 
--driver-memory 12g 
+0

이 파일이 로컬 컴퓨터에 있습니까? 파일 하나인가요? –

+0

한 파일, 500GB 이상. 6 개의 노드가있는 클러스터에서 실행 –

+0

그래서이 파일은 드라이버 컴퓨터에 저장됩니까? –

답변

1
작업의 수는 소스 RDD의 파티션의 수에 따라 달라집니다

, 귀하의 경우는 HDFS에서 읽고, 블록 크기 때문에의 수를 파티션의 수를 결정한다 :

은 또한 변화 시도 파티션을 변경해야하는 작업 수를 늘리거나 줄이려면 실행 프로그램의 수를 기반으로하지 않을 것입니다. 기존 RDD의 경우 읽기시 HDFS 구성을 min/maxSplit 크기보다 우선해야합니다. 같은 일을하기 위해 회개/합병을 사용할 수 있습니다.

1

파티션 수 = 작업 수. 18500 개의 파티션이있는 경우 spark는이를 처리하기 위해 18500 개의 작업을 실행합니다.

파일을 읽고 필터를 사용하고 있습니까? Wide 변환을 수행합니까? 넓은 변환을 수행하면 최종 RDD의 파티션 수는 "spark.sql.shuffle.partitions"속성에 의해 제어됩니다. 이 값을 18500로 설정하면 결과 RDD에 18500 개의 파티션이 생겨 결과적으로 18500 개의 작업이 생성됩니다.

둘째, spark.dynamicAllocation.maxExecutors는 동적 할당이 활성화 된 경우 실행 프로그램 수에 대한 상한을 나타냅니다. 내가 볼 수 있듯이 노드가 5 개 있고 노드 당 10 명의 실행자 [총 50 명의 실행자] 및 실행 프로그램 당 1 개의 코어 [YARN에서 실행중인 경우 실행 프로그램 당 1 코어가 기본입니다].

작업을 빠르게 실행하려면 : 가능한 경우 속성 spark.sql.shuffle.partitions를 통해 셔플 파티션 수를 줄이고 실행 프로그램 별 코어 수를 늘리십시오. [실행 프로그램 당 5 코어가 권장됩니다].