코드의 가독성과 성능 최적화 스파크 - 열 샘플 (사업 구조)

코드의 가독성과 성능 최적화 스파크 - 열 샘플 (사업 구조)

머리말

각 패키지의 카테고리 아래 약정

  • 각 패키지의 기능을하는 장치, 당신은 쉽게, 프로젝트 코드 구조, 클리어 기능을 볼 혼돈의 유리한 개발의 정도를 줄일 수 있습니다
  • 여기서, 예를 들어 A가 리프트 참조로서 이하
    스파크 애플리케이션 구조
  • 설명
    • 앱 스토어 애플리케이션은 스파크 개발
    • 일반적인 일반적인 구성 또는 엔진의 함수를 저장하는 데 사용
    • 데이터 소스를 저장 data.in 취득 기능
    • 출력되는 데이터를 저장하기위한 data.out
    • 데이터 처리 기능을 기억 data.process
    • 등록 KYRO 각 구성에 대한 대응 KYRO 스파크
    • 대한 폴더의 유틸리티 툴킷

스파크는 템플릿 기반 응용 프로그램 디자인 클래스입니다

  • 유지 보수 프로젝트의 후반부에 찬성, 코드 구조를 구별하기 위해, 더 나은 공정 제어 코드를 실행 가독성을 향상시킬 수있는 템플릿 기본 클래스를 디자인
  • 그래서, 예에서와 같이, 참조 A에 대해 여기에 인용
    • AppTrait
      /**
       * Spark应用Trait
       * <p>
       * Date: 2018/3/2 9:49
       * @author ALion
       */
      trait AppTrait {
      
        /**
         * 初始化,应用运行前
         */
        protected def onInit(): Unit
      
        /**
         * 应用开始运行
         */
        protected def onRun(): Unit
      
        /**
         * 应用结束
         */
        protected def onStop(): Unit
      
        /**
         * 应用销毁后调用
         */
        protected def onDestroyed(): Unit
      
      }
      
    • BaseSparkApp
      import org.apache.spark.SparkConf
      import org.apache.spark.sql.SparkSession
      
      /**
       * Spark应用基类
       * <p>
       * Date: 2018/1/19 15:06
       *
       * @author ALion
       */
      abstract class BaseSparkApp extends AppTrait {
      
        protected final val appName = getClass.getSimpleName
      
        protected final var spark: SparkSession = _
      
        /**
         * 启动应用
         */
        final def startApp(): Unit = {
          val time1 = System.currentTimeMillis()
          println("-------> " + appName + " start ")
      
          onInit()
      
          createSession()
      
          onRun()
      
          onStop()
      
          val time2 = System.currentTimeMillis()
          println("-------> " + appName + " end costTime=" + (time2 - time1) / 1000 + "s")
        }
      
        /**
         * 手动停止应用
         */
        final def stopApp(): Unit = {
          onStop()
        }
      
        /**
         * 创建 SparkSession
         */
        private def createSession(): Unit = {
          spark = SparkSession.builder()
            .config(getConf)
            .enableHiveSupport()
            .getOrCreate()
        }
      
        /**
         * Spark应用配置
         *
         * @return SparkConf
         */
        protected def getConf: SparkConf = {
          new SparkConf()
            .setAppName(appName)
            .set("spark.network.timeout", "300")
            .set("spark.shuffle.io.retryWait", "30s")
            .set("spark.shuffle.io.maxRetries", "12")
            .set("spark.locality.wait", "9s")
        }
      
        /**
         * 初始化,应用运行前
         */
        override protected def onInit(): Unit = {}
      
        /**
         * 应用运行
         */
        override protected def onRun(): Unit
      
        /**
         * 应用结束
         */
        override protected def onStop(): Unit = {
          if (spark != null) spark.stop()
        }
      
        /**
         * 应用销毁后调用
         */
        override protected def onDestroyed(): Unit = {}
      
      }
      
  • 설명
    • BaseSparkApp에서 상속에 열려있는 응용 프로그램, 필요 스파크 때
    • 응용 프로그램 AppTrait의 기본 기능에 대해 설명
    • BaseSparkApp 프로세스 제어 애플리케이션에 대한 실제 템플릿 클래스
    • 이 방법의 startApp 호출은 응용 프로그램을 시작합니다
      • 프로세스가 최종있는 동안, 무단 조작 후속 처리를 방지하기 위해 코드를 수정, 제어 코드 흐름
      • 같은 여기에 시간 통계 등의 추가 기능
    • 응용 프로그램이 시작되기 전에 호출하는 데 사용하는 OnInit
      • 당신이 SparkSession 호출을 만들기 전에 사용하는 데 필요한 오버라이드 (override)하는 것으로 써,
      • 초기화 코드 블록은 예를 들어, 다른 소스에서 얻은 데이터가 초기화 여기 제발, 저장할 수 있습니다. 프로그래머는하지 다시 시작 점화 후, 실수로 잘못된 코드의 위치를 ​​방지뿐만 아니라 다른 코드, 클러스터 리소스의 무의미한 낭비를 실행하는 데 시간이 걸릴.
    • createSession는 SparkSession를 만드는 데 사용
      • 의 onInit 후 호출
      • 당신은 SparkConf를 만들 수정할 된 getconf 단지 복제 방법이 필요합니다
    • onRun 실제 비즈니스 처리 코드
      • createSession를 호출 한 후
      • 글로벌 변수 스파크 사용을 제공 여기에 비즈니스 로직 코드를 작성
    • 자동 중지시 폐쇄 스파크 응용 프로그램
      • onRun 후 자동 호출
      • 가까운 불꽃을 강요 서비스, 후 (스파크는 때때로 때문에 몇 가지 문제의 박히면서, 또는 종료하기 전에 잠시 기다리거나 스파크에서 응용 프로그램은 시간이 많이 소요로 다른 코드가 있습니다)
      • 그러나 또한) (당신이 spark.stop를 호출하는 것을 잊지 않도록
    • onDestroyed 응용 파괴
      • 중지시 호출 한 후
      • 일부 기업은 항상 클러스터 리소스를 차지하지 않는, 스파크 환경을 수행 할 필요가 없습니다
      • 예를 들어, 비즈니스 개발, 실행 한 후 스파크 응용 프로그램은 다른 서비스에 대한 통지, 다음은 정지 후 (onDestroyed에서입니다)해야 할 요구 될 수있다
게시 된 128 개 원래 기사 · 원 찬양 45 ·은 15 만 + 조회수

추천

출처blog.csdn.net/alionsss/article/details/103809483