0

나는 을 r3.8xlarge (32 cores, 244G RAM)으로 설정했습니다. 내 Spark 응용 프로그램에서스파크 : 마스터 로컬 [*]이 마스터 로컬보다 훨씬 느림

, 나는 DataBrick에서 Spark-CSV를 사용하여 S3에서 두 개의 CSV 파일을 읽고있다, 각 CSV는 약 5 백만 행이 있습니다. 나는 unionAll 두 DataFrames이며 결합 된 DataFrame에 dropDuplicates을 실행 중입니다. 내가있을 때

는하지만,

val conf = new SparkConf() 
      .setMaster("local[32]") 
      .setAppName("Raw Ingestion On Apache Spark") 
      .set("spark.sql.shuffle.partitions", "32") 

스파크는 .setMaster("local")

보다 느린 것이 빠른 32 개 코어하지 않을까요?

답변

0

Spark은 Windows 운영 체제가 아니며 처음부터 가능한 최대 용량으로 작동하므로 사용 용도에 맞게 조정해야합니다.

바로 지금 당신은 32 코어로 한 노드에서 시작하고 내 물건을 처리한다고 솔직하게 말했습니다. 그것은 스파크가 좋은 것이 아닙니다. 다중 노드 클러스터에서 실행되는 분산 시스템으로, 이것이 가장 잘 작동합니다.

이유는 간단합니다. 32 코어를 사용하는 경우에도 IO 문제는 무엇입니까? 이제는 30 개의 실행 프로그램을 실행 한 경우 let 디스크를 사용하기 때문에 동일한 디스크에서 32 개의 프로세스를 읽는 것보다 훨씬 낫습니다.

32 코어를 지정했는데 실행 메모리는 어떻게됩니까? 두 기계 모두 테스트를 거친 동일한 램을 가지고 있었습니까?

데이터가 매우 작고 오버 헤드가 많은 경우 특별히 32 개의 파티션을 지정하도록 지정했습니다. 이상적으로, 당신이 무엇을하고 있는지 또는 반복적 인 작업을 할 때까지는 파티션을 지정하지 말아야하며, 모든 시간 동안 데이터가 정확히 유사하다는 것을 알 수 있습니다.

정확하게 조정하면 32 코어로 스파크가 실제로 하나의 코어에서 실행되는 "로컬"보다 빠르게 작동합니다.