코드의 가독성과 성능 최적화 스파크 - 열 샘플 (사업 구조)
기타
2020-01-11 00:32:01
독서 시간: null
코드의 가독성과 성능 최적화 스파크 - 열 샘플 (사업 구조)
머리말
각 패키지의 카테고리 아래 약정
- 각 패키지의 기능을하는 장치, 당신은 쉽게, 프로젝트 코드 구조, 클리어 기능을 볼 혼돈의 유리한 개발의 정도를 줄일 수 있습니다
- 여기서, 예를 들어 A가 리프트 참조로서 이하
![스파크 애플리케이션 구조](https://img-blog.csdnimg.cn/20200102190518361.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FsaW9uc3Nz,size_16,color_FFFFFF,t_70)
- 설명
- 앱 스토어 애플리케이션은 스파크 개발
- 일반적인 일반적인 구성 또는 엔진의 함수를 저장하는 데 사용
- 데이터 소스를 저장 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