Spark Job 스케줄링

2445 단어
개황
spark는 자원을 조정하기 위한 방안을 제공했다.우선, 모든spark 프로그램은 몇 개의 독립된excutor 집단을 달리고 있다(그 중에서excutor는 jvm에서run task와store 데이터로) 집단 관리는 집단 차원의 자원 분배를 제공한다.그 다음으로, 모든spark 프로그램에서 서로 다른 프로세스가 제출한job (actions) 를 병행해서 실행할 수 있다.이런 상황은 매우 흔하다. sparkContext는 공평한 스케줄링 메커니즘을 제공했다.
spark 프로그램 간 스케줄링
사용자마다 같은 그룹을 사용하고 다른 설정을 사용합니다.처음에 해결해야 할 것은 자원의 분할이다.현재 흔히 볼 수 있는 분배 원칙은 다음과 같은 세 가지가 있는데, 그 중에서yarn이 가장 자주 사용한다.
  • standalone 기본적으로 spark 프로그램은 FIFO 형식으로 제출되었고 모든 사용 가능한 자원을 차지합니다.스파크를 설정할 수 있습니다.cores.max는 코어를 차지하는 수량을 제어하고spark를 통과합니다.executor.memory는 모든 excutor가 사용하는 메모리를 제어합니다.
  • yarn은 주로 --num-executors 또는spark를 통과한다.executor.instances, --excutor-memory 또는spark.executor.memory, --executor-cores 또는spark.executor.cores가 컨트롤해.현재 다른spark 프로그램 간에는 데이터를 공유할 수 없습니다.그러나 동적 자원 분배와 같은 공유 자원을 얻고 방출할 수 있다.

  • spark 프로그램 내 스케줄링
    서로 다른 라인에서 제출된 병렬job는 동시에 실행할 수 있으며,spark 내부의 스케줄링은 라인이 안전합니다.일반적으로 스파크의 스케줄링은 FIFO의 것이고 각 Job은 Stages로 나눌 수 있다.만약 첫 번째job의 스테이지가task가 실행된다면, 그 다음job는 기다려야 합니다.spark0에서.8부터 공평 스케줄러를 설정할 수 있고spark분배tasks는 일종의 퀴즈 방식으로 짧은 job는 미리 실행될 수 있다.sparkContext에서 설정 가능spark.scheduler.mode=FAIR공평 스케줄링 탱크
    공평 스케줄러는 잡스를 특정한 자원 탱크에 함께 넣는 방식을 제공하여 일부 중요한jobs에게 높은 우선순위의 자원을 제공할 수 있다.중요한 잡스가 필요할 때 미리 완성할 수 있다는 보장이 있습니다.일반적으로jobs는default pool에 제출되지만 코드에서 현재 라인의job가 어느 pool에서 실행되는지 수시로 제어할 수 있습니다. 예를 들어sc.setLocal Property ("spark.scheduler.pool", "pool"), 현재의pool 사용을 취소할 수도 있고,sc.setLocal Property ("spark.scheduler.pool",null) 이상의 사용은 모두 pool의 설정 파일을 설정해야 합니다.세 가지 매개변수가 있는데 매개변수의 의미는 다음과 같습니다.
  • schedulingMode:FIFO와FAIR를 사용하여 pool에서job의 실행 모드를 제어할 수 있습니다.
  • weight: 집단 자원에 대한 다른 pool의 점용권을 제어합니다. 기본값은 1이고 2로 설정하면 이 pool은 2배의 자원을 가져옵니다.뿐만 아니라,jobs의 실행 시간을 제어할 수 있으며, 1000으로 설정하면,pool은tasks를 언제든지 시작합니다.
  • minShare의 가장 기본적인 리소스 할당이 값을 충족시키고 weight를 분배하면 conf.set ("spark.scheduler.allocation.file", "/path/to/file") 을 설정해서 자신이 설정한 파일을 사용할 수 있습니다.형식은 다음과 같습니다.
  • 
    
      
        FAIR
        1
        2
      
      
        FIFO
        2
        3
      
    
    

    코드에서sc.setLocalProperty("spark.scheduler.pool", "pool1")를 사용하고 상기 파일을 설정하지 않으면 모든 분배지는 기본적으로FIFO,weight=1,minshare=0을 사용합니다.

    좋은 웹페이지 즐겨찾기