관계 excutor에서 스파크의 개수, 메모리 크기, 코어의 개수 작업 리소스의 개수, 파티션의 수, 클러스터 등

디렉토리

 

도 1을 참조하면, 자원 할당은 실질적으로 이러한 두 영역의 튜닝 스파크 : 코어를 MEM

 

(1) 어떤 리소스 할당?

(2) 여기서, 이러한 자원의 분포?

(3) 양을 조정, 그것은 가장 큰입니까?

미래의 자원을 조정하는 이유 (4), 성능을 향상시킬 수 있습니까?

2 분할의 수 및 작업 수의 관계

3 동조 병렬 스파크 적당한 집합

(1) 무엇을 의미하는지의 병렬 불꽃의 정도?

(2) 어떻게 병렬 처리 수준을 향상시키기 위해?

 


(1) 의 자원 할당 스파크 튜닝   일반적으로 두 가지 형태 : 코어 MEM

 

(1) 어떤 리소스 할당?

   집행, 집행 코어 당, 집행 당 메모리, 드라이버 메모리

(2) 여기서, 이러한 자원의 분포?

   우리에서 생산 환경, 작업 제출 스파크, 해당 매개 변수를 조정 사용 쉘 스크립트를, 스파크 제출

/ usr / 지방 / 스파크 / 빈 / 스파크 제출 \

--class cn.spark.sparktest.core.WordCountCluster \

--num - 집행 3 \ 구성의 수의 집행자

각 실행 프로그램의 --executor 메모리 100m \ 구성 메모리 크기

--executor 코어 3 \ 실행기는 CPU 코어의 수마다 배치

--driver 메모리 \ 드라이버 구성 메모리 (상당한 영향) 100m

/usr/local/SparkTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar \

(3) 양을 조정, 그것은 가장 큰입니까?

스파크 클러스터의 세트를 설정하는 첫 번째, 불꽃 독립, 회사의 클러스터는, 당신은 마음 또한 각 시스템을 이해할 수 있어야

얼마나 많은 메모리에 대해, 사용 정도에 CPU 코어 한 다음, 실제 상황에 따라 시간을 설정,

각 스파크 작업에 대한 자원 할당을 조정합니다. 예를 들어, 당신은 메모리 4G를 사용하여 각 시스템을 제공 할 수 있습니다, 두 개의 CPU 코어;

기계 (20), 실행 프로그램 (20), 평균 실행기 : 메모리 4G 2 CPU 코어.

케이스 :

둘째, 원사. 자원 큐. 리소스 예약. 보기로되어있다, 당신의 스파크 작업, 자원 큐에 제출합니다  

 하둡 불꽃 폭풍은 각 큐는 자신의 자원 (CPU의 MEM)가

대략 몇 자원? 500G 메모리 (100)의 CPU 코어; 실행기 50; 평균 실행기 : 10G 메모리 2 CPU 코어.

미래의 자원을 조정하는 이유 (4), 성능을 향상시킬 수 있습니까?

집행을 증가 :

   집행 인의 수는 상대적으로 작은 경우 작업의 수를 병렬로 실행 될 수 있도록, 그것은 우리의 응용 프로그램의 것을 의미한다, 상대적으로 작은 능력을 병렬로 실행 약한에.

   이러한 세 실행기 각각 실행 프로그램은 6 일 동안 병렬로 실행될 수있는 두 개의 CPU 코어를 갖고있다. 여섯 후 실행 한 다음 여섯 작업의 그룹을 교체 . 실행 프로그램의 수를 증가하면, 다음 태스크의 수를 병렬로 실행될 수 있다는 것을 의미하며, 이는 많은 변화. 6, 100 일본어 같고, 이제 10 병렬로 수행 될 수 있고, 또는 심지어 20. 전에 개선 된 여러 번, 여러 번 이상의 병렬 그래서. 따라서, 또한 성능 (실행 속도),하지만 시간의 수십 향상시킬 수 있습니다.

 

각 집행자의 CPU 코어를 증가 :

   또한 병렬로 실행하는 기능을 추가한다. 원래 20 집행자 만 2 CPU 코어 당. 태스크 번호가 병렬로 실행될 수있다

(40) 작업입니다. 이제 CPU 코어의 모든 집행은 오 증가했다. 수 작업이 병렬로 실행될 수 있으며, 100 일이다. 실행 속도가 2 배에 대해 개선.

 

메모리 각 집행자의 양을 증가 :

세 지점이, 성능을 향상시키기 위해, 미래의 메모리 용량을 늘릴 수 :

   1, 필요 RDD 캐시 할 경우 , 다음 더 많은 메모리, 더 많은 데이터를 캐시 할 수 있습니다, 적은 데이터가 디스크에 기록 ,

심지어 디스크에 기록되지 않습니다. 그것은 디스크 IO를 감소시킨다 .

   도 2를 참조하면, 셔플 동작 의 스토어 데이터와 인출 중합 메모리를 필요 측면을 감소시킨다. 메모리가 충분하지 않다면, 그것은 디스크에 기록 될 것입니다. 후 집행에 더 많은 메모리를 할당 할 경우, 디스크에 기록되는 적은 데이터 요구가 디스크에 기록도하지 않고. 디스크 IO, 개선 된 성능을 줄입니다.

   3, 작업의 실행을 위해 , 그것은 많은 개체를 만들 수 있습니다 . 메모리가 상대적으로 작은 경우, 자주, JVM 힙 메모리가 가득 될 수 있습니다

그리고 자주 GC, 가비지 컬렉션, 마이너 GC 및 전체 GC. (아주 느리게). GC 적은 가져 메모리를 늘린 후, 가비지 컬렉션

피 성능 저하, 성능 향상 .

2 분할의 수 및 작업 수의 관계

태스크로부터 계산 될 때 (1) RDD하겠습니다 각 파티션 때문에 파티션의 수가 RDD 태스크의 수를 결정한다.
컴퓨팅 노드 (집행자) 응용 프로그램의 수와 연산 코어 당 노드의 수는, 동시에 당신이 작업이 병렬로 실행될 수를 결정합니다.

  • 각 노드는 하나 이상의 집행자를 제공 할 수 있습니다.
  • 코어들에 의해 각각 실행 프로그램은, 각 코어는 단지 각 작업 실행 프로그램에 대해 한 번 수행 될 수있다.
  • 각 작업 실행의 결과는 RDD의 partiton 목표를 생성하는 것입니다.
  • 작업이 병행 번호 = 실행자 (SPARK_EXECUTOR_INSTANCES) * 각 코어 (SPARK_EXECUTOR_CORES) 수 실행자 수행 될

3 동조 병렬 스파크 적당한 집합

 

(1) 무엇을 의미하는지의 병렬 불꽃의 정도?

    스파크 작업, 각 단계의 작업의 수, 병렬 처리 단계의 모든 단계에서 스파크 작업을 나타냅니다!

    최종 할당하는 최대의 자원 할당 및 병렬 처리 수준이 자원과 일치하지 않는 경우 다음 프로그램에 대응하는 자원의 병렬 처리를 조정 할 수있는 경우 의 결과로 모든 낭비 갈 자원 할당. 한편 병렬로 실행뿐만 아니라, 각 작업의 수가 적은 처리 할 수 있습니다 ( 아주 간단한 원리를. 병렬 설정 합리적인 정도, 클러스터 자원을 최대한 활용, 각 작업에 대한 처리하는 데이터의 양을 줄이고, 증가 성능을 빠르게 실행할 수 있습니다. )

    예를 들면 :

        1, 우리와 같은 스파크 작업 할당 충분한 자원을 제공 할 수있는 스크립트 스파크 제출 지금에 경우 50 집행자를  , 각 실행 프로그램의 메모리 10G를 가지고 , 각 집행 인은 세 코어 CPU를 가지고  . 기본 자원은 상한 실 또는 클러스터 큐에 도달했습니다.

작업은 설정하거나이 100 작업을 설정할 등 거의 설정하지 않습니다. 50 실행기 각 실행기 말하자면 세 코어 갖는다
언제든지 스테이지, 실행 애플리케이션을 CPU 코어 (150)의 갯수가 병렬로 실행할 수있다 . 그러나 지금 작업을 불과 100에 대한 고르게 분포,이 작업에 할당 된 각 실행 프로그램, 확인 후 작업이 동시에 100 개의 작업을 실행하고, 각 집행자는 단지 두 개의 병렬 작업을 실행합니다. 하나 개의 CPU 코어를 나머지 각 집행자가 손실 될 것입니다! 귀하의 자원,하지만 충분 할당하지만, 문제는 병렬 처리 수준은 모든 낭비 갈 자원 할당의 결과로, 자원과 일치되지 않는 것입니다. 병렬 설정 합리적인 정도가 클러스터 리소스를 완전히 합리적인 사용에 충분한, 충분히 큰 설정되어야한다  등 위의 예와 같이 클러스터는 150 CPU 코어의 객실을 선택할 수 있습니다, 당신은 150 동시 작업을 실행할 수 있습니다. 그럼 당신은 병렬로 수행 150 작업에 클러스터 자원을 충분히 효과적으로 사용, 수, 적어도 150, 병렬 처리의 응용 프로그램을 이동해야하고, 작업을 나중에 할 수있는, 150로 증가 동시에 병렬로 실행, 또한, 처리되는 각 작업의 양이 작아 져 허용 그러한 총량  150G 인 데이터 처리하는  경우, 태스크 (100)  , 1.5G의 데이터를 계산하기 위해 각 작업 . 지금 150 태스크 데이터 처리 1G만큼 각 태스크 증가 .

(2) 어떻게 병렬 처리 수준을 향상시키기 위해?

   1, 적어도 총 CPU 코어 수의 같은 스파크 응용 프로그램에 대한 작업의 수, (같은시기에 함께 실행 가장 합리적, 150 코어, 유통 150task는 완성 된 실행이) 불꽃 응용 프로그램 전체의 CPU에 공식 추천, 작업의 수, 세트를 코어 수의 2 ~ 3 배, 등 150 CPU 코어는 기본 작업은 300에서 500으로 번호를 설정하는 것입니다  A를, 그리고 합리적인 상황이 다른, 같은 50 년대와 같은 좀 더 빠르게 실행됩니다 일부 작업은 완료 될 것이다, 어떤 작업이 조금 느려질 수 있습니다 절반 만 완성 된 실행하므로 숫자 일 경우, 다만 CPU 코어의 수와 동일하게 설정 등 150task는, 10 창 먼저 이상 실행되기 때문에, 자원의 낭비로 이어질 수 있으며, 나머지 140 계속 실행되지만,이 시간, 폐기물의 결과로 유휴 CPU 코어의 열 출력이있다. 두 개 또는 세 번하면 작업의 완료 즉시 채우기 위해 다른 작업을 실행 한 후 후, CPU 코어가 유휴 만들려고하지 않습니다. 운영 효율성과 속도를 향상하는 동안 스파크. 성능을 향상시킬 수 있습니다.

    2, 어떻게 스파크 응용 프로그램의 병렬 처리 수준을 설정하는 방법?

      spark.defalut.parallelism의  디폴트 값은 예를 들면 10로 설정되어있는 경우, 값없는 셔플에서 작동 과정에 (브로 rdd2 = rdd1.reduceByKey (_ + _) , 파티션 // rdd2 번호 10 rdd1 충격 파라미터와 파티션의 개수)

      새로운 SparkConf (). 설정 ( "spark.defalut.parallelism", ""500)

    도 4는 RDD.repartition , RDD으로는 파티션의 번호를 다시 설정할

    번호 5, reduceByKey 연산자의 파티션을 지정

                 브로 rdd2 = rdd1.reduceByKey (_ _ + 10) = 브로 rdd3 rdd2.map.filter.reduceByKey (_ _ +)

    . (6) 발 rdd3 = rdd1. 가입 (RDD2)   상위 RDD의 분할 영역의 수를 증가시킨다 조인 연산자 사용시 너무 상위 파티션 RDD 최대 개수에 의해 결정되는 숫자 rdd3의 partiiton를.

 

게시 된 159 개 원래 기사 · 원 찬양 75 · 전망 190 000 +

추천

출처blog.csdn.net/xuehuagongzi000/article/details/103081319