Spark 소스 코드 읽 기\#1:SparkConf 상세 설명

13105 단어 빅 데이터
1.유형 작용
저희 Spark 코드 는 시작 이 이 렇 습 니 다.
val conf: SparkConf = new SparkConf().setAppName("app").setMaster("local[2]")

코드 와 공식 설명 을 통 해 알 수 있 듯 이 SparkConf 는 Spark 응용 프로그램의 설정 클래스 로 KV 구조의 Spark 인 자 를 설정 하 는 데 사 용 됩 니 다.그것 은 또 다음 과 같은 기초 적 특성 을 가지 고 있다.
  • 을 사용 할 때 대부분의 경우 자바 매개 변수(resource)에 new SparkConf() 형식의 매개 변 수 를 자동 으로 응용 에 설정 합 니 다.단,set 방법 을 통 해 직접 설정 한 속성 우선 순 위 는 자바 인자(resource)보다 높 습 니 다.
  • Spark.* 방식 으로 시스템 매개 변 수 를 불 러 오 는 과정 을 건 너 뛸 수 있 습 니 다.
  • SparkConf 가 초기 화 되면 Spark 가 실행 하 는 클 러 스 터 에 도착 하면 실행 과정 에서 사용 자 는 SparkConf 대상 을 바 꿀 수 없습니다.

  • 2.주요 함수
    2.1 구조 방법
    class SparkConf(loadDefaults: Boolean) extends Cloneable with Logging with Serializable {
    
      import SparkConf._
    
      /** Create a SparkConf that loads defaults from system properties and the classpath */
      def this() = this(true)
    
      private val settings = new ConcurrentHashMap[String, String]()
      //......
    }
    

    우선 new SparkConf(false) 이 도입 한 동반 대상 은 다음 과 같은 방법 이 있다.
  • 동반 대상 중 한 맵 은 Spark 가 추천 하지 않 는 설정 과 해당 하 는 로그 정 보 를 기록 합 니 다
  • 두 번 째 Map 은 현재 버 전 키 와 역사 버 전 Spark 의 예비 키 의 관 계 를 기록 하고 호 환 용 으로 대응 하 는 효율 적 인 조회 방법 도 있다.
  • 실행 기 에 파 라 메 터 를 전달 하 는 방법 입 니까?
  • 파 라 메 터 를 판단 하고 인쇄 하 는 방법.

  • 그 다음은 import SparkConf._ 으로 스 파 크 설정 항목 의 용기 로 안전 한 맵 입 니 다.
    2.2 reader&loadFromSystemProperties
    @transient private lazy val reader: ConfigReader = {
        val _reader = new ConfigReader(new SparkConfigProvider(settings))
        _reader.bindEnv((key: String) => Option(getenv(key)))
        _reader
      }
    }
    
    settings 은 게 으 른 로 딩 방법 으로 마지막 으로 reader 대상 을 되 돌려 줍 니 다.이 대상 은 설정 매개 변수 와 매개 변수 형식의 교 체 를 읽 는 데 도움 을 주 는 역할 을 합 니 다.읽 은 매개 변 수 는 접두사 에 따라 세 가지 로 나 뉜 다.
  • no prefix:접두사 없 음,기본 설정 사용
  • ConfigReader 대상 을 만 들 때 ConfigReader 대상 이 들 어 왔 습 니 다.이 대상 은 앞에서 언급 한 Spark 매개 변수 용기 SparkConfigReader 을 봉 인 했 습 니 다.이 는 접두사 없 는 설정 항목 으로 settings 에서
  • 을 읽 도록 합 니 다.
  • system:시스템 매개 변수 에서
  • 읽 기
  • env:환경 매개 변수 에서 읽 기
  • 생 성 시 reader 가 먼저 bindEnv
  • 을 실 행 했 습 니 다.

    이 종 류 는 하나의 Map 형식의 속성 bings 를 상기 세 가지 매개 변수 로 하 는 용 기 를 구 조 했 고 클래스 에 도 해당 하 는 매개 변수 유형의 bind 방법 으로 파 라 메 터 를 bings 에 주입 하여 마지막 으로 bings 의 형식 을 통일 적 으로 교체 했다.매개 변수 교 체 는 정규 표현 식 을 사용 하여 매개 변 수 를 ConfigReader 형식 으로 바 꾸 었 습 니 다.
    마지막 으로 돌아 오 는 reader 는 실행 할 때 다른 클래스 에서 해당 get 방법 으로 설정 파 라 메 터 를 가 져 옵 니 다.
    private[spark] def get[T](entry: ConfigEntry[T]): T = {
        entry.readFrom(reader)
    }
    
    if (loadDefaults) {
        loadFromSystemProperties(false)
    }
    
    private[spark] def loadFromSystemProperties(silent: Boolean): SparkConf = {
      // Load any spark.* system properties
      for ((key, value) <- Utils.getSystemProperties if key.startsWith("spark.")) {
        set(key, value, silent)
      }
      this
    }
    

    그 다음은 prefix:name 입 니 다.바로 처음에 언급 한 자바 인 자 를 불 러 오 는 것 입 니 다.클래스 의 유일한 매개 변수 인 loadDefaults 는 자바 인 자 를 불 러 오 는 지 여 부 를 제어 하 는 것 입 니 다.방법 내 부 는 loadFromSystemProperties 으로 시작 하 는 인 자 를 옮 겨 다 니 며 set 방법 으로 spark. 에 주입 합 니 다.
    2.3 set 방법
    private[spark] def set(key: String, value: String, silent: Boolean): SparkConf = {
        if (key == null) {
          throw new NullPointerException("null key")
        }
        if (value == null) {
          throw new NullPointerException("null value for " + key)
        }
        if (!silent) {
          logDeprecationWarning(key)
        }
        settings.put(key, value)
        this
    }
    

    set 방법 은 key 나 value 가 비어 있 는 것 을 허용 하지 않 습 니 다.그렇지 않 으 면 빈 포인터 이상 을 던 집 니 다.silent 속성 은 매개 변수 가 만 료 되 었 는 지 판단 하고 마지막 으로 setttings 에 넣 습 니 다.this 를 되 돌려 주면 문장 시작 예시 코드 인 set 방법 을 체인 으로 호출 할 수 있 습 니 다.그 밖 에 자주 사용 하 는 settings 과 다른 setMaster,setAppName 측 이 마지막 으로 호출 한 것 은 모두 위의 기초 set 방법 이다.
    2.4 get 방법
    def getOption(key: String): Option[String] = {
        Option(settings.get(key)).orElse(getDeprecatedConfig(key, settings))
    }
    
    setXX 에서 얻 은 값 을 Option 으로 되 돌려 줍 니 다.settings 에 해당 하 는 key 가 없 으 면 동반 대상 의 방법 으로 만 료 된 설정 항목 인지 찾 습 니 다.다른 패키지 의 get 방법,예 를 들 어 기본 값 을 가 진 get,각종 유형의 get 을 가 져 오 는 등 최종 호출 은 settings 입 니 다.
    2.5 vaidate Settings 방법
    원본 코드 가 너무 길 면 붙 이지 않 습 니 다.이 방법 은 일부 특수 매개 변 수 를 검사 하고 warn 을 인쇄 할 것 입 니 다.또한 JVM 매개 변수 와 메모리 매개 변수의 합 법성 을 검증 할 것 입 니 다.논 리 는 비교적 간단 합 니 다.
    3.총화getOption 은 각종 매개 변 수 를 가 져 오고 설정 하 는 데 사용 되 며 마지막 으로 매개 변수 로 SparkConf 에 들 어 갑 니 다.SparkContext 은 프로그램의 전체 입구 입 니 다.SparkContext 이 정의 한 설정 매개 변 수 를 받 아들 인 후에 초기 화 작업 을 시작 한 다음 에 프로그램 을 실행 합 니 다.

    좋은 웹페이지 즐겨찾기