RDD에서 DAG는 어떻게 작동 작동합니까?
스파크 연구 논문은 특히 기계 학습에 많은 경우의 새로운 단순화 및 광대 한 성능 향상을 주장, 고전 하둡 맵리 듀스를 통해 분산 프로그래밍 모델을 규정하고 있습니다. 그러나, 는를 발견하기 재료 internal mechanics
에 Resilient Distributed Datasets
와 Directed Acyclic Graph
본 논문에서 부족한을 구석으로 같다.
소스 코드를 조사하여 더 잘 학습해야할까요?
심지어 스파크가 RDD에서 DAG를 계산하고 이후에 작업을 실행하는 방법에 대해 웹에서 찾고 있습니다.
높은 수준에서 RDD에서 작업이 호출되면 Spark는 DAG를 생성합니다.
DAG 스케줄러는 운영자를 작업 단계로 나눕니다. 스테이지는 입력 데이터의 파티션을 기반으로하는 작업으로 구성됩니다. DAG 스케줄러는 연산자를 함께 파이프 라인합니다. 예를 들어 많은지도 운영자가 단일 단계에서 예약 될 수 있습니다. DAG 스케줄러의 최종 결과는 단계입니다.
스테이지는 작업 스케줄러로 전달되고 작업 스케줄러는 클러스터 관리자 (Spark Standalone / Yarn / Mesos)를 통해 작업을 시작합니다. 작업 스케줄러는 단계의 절차에 대해 알지 못합니다.
길은 슬레이브에서 작업을 실행합니다.
Spark가 DAG를 빌드하는 방법에 대해 알아 보겠습니다.
높은 수준에서 RDD에 적용 할 수있는 두 가지 변환, 즉 좁은 범위 변환과 넓은 변환이 있습니다. 넓은 변환은 기본적으로 무대 경계를 만듭니다.
현관 변환 -파티션간에 데이터를 섞을 필요가 없습니다. 예를 들어,지도, 필터 등 ..
광범위한 변환 -데이터를 셔플해야합니다 (예 : reduceByKey 등).
각 심각도 수준에서 로그 메시지 수를 계산하는 예를 보겠습니다.
다음은 심각도 수준으로 시작하는 로그 파일입니다.
INFO I'm Info message
WARN I'm a Warn message
INFO I'm another Info message
다음 스칼라 코드를 생성하여 동일한 것을 추출합니다.
val input = sc.textFile("log.txt")
val splitedLines = input.map(line => line.split(" "))
.map(words => (words(0), 1))
.reduceByKey{(a,b) => a + b}
이 명령 시퀀스는 나중에 작업이 호출 될 때 사용되는 RDD 개체 (RDD 계보)의 DAG를 암시 적으로 정의합니다. 각 RDD는 부모와의 관계 유형에 대한 메타 데이터와 함께 하나 이상의 부모에 대한 포인터를 유지합니다. 예를 들어 val b = a.map()
RDD를 호출 할 때 RDD b
는 부모에 대한 참조를 유지합니다 a
.
RDD의 계보를 표시하기 위해 Spark는 디버그 메서드를 제공합니다 toDebugString()
. 예를 들어, 실행 toDebugString()
상의 splitedLines
다음 RDD, 출력 할 것이다 :
(2) ShuffledRDD[6] at reduceByKey at <console>:25 []
+-(2) MapPartitionsRDD[5] at map at <console>:24 []
| MapPartitionsRDD[4] at map at <console>:23 []
| log.txt MapPartitionsRDD[1] at textFile at <console>:21 []
| log.txt HadoopRDD[0] at textFile at <console>:21 []
첫 번째 줄 (아래에서)은 입력 RDD를 보여줍니다. 을 호출 하여이 RDD를 만들었습니다 sc.textFile()
. 아래는 주어진 RDD에서 생성 된 DAG 그래프의 더 다이어그램보기입니다.
DAG가 빌드되면 Spark 스케줄러가 물리적 실행 계획을 만듭니다. 위에서 언급했듯이 DAG 스케줄러는 그래프를 여러 단계로 분할하고 변환을 기반으로 단계를 만듭니다. 좁은 변형은 단일 단계로 함께 그룹화됩니다 (파이프 라인). 따라서이 예에서 Spark는 다음과 같이 두 단계 실행을 생성합니다.
그런 다음 DAG 스케줄러가 작업 스케줄러에 단계를 제출합니다. 제출 된 작업 수는 textFile에있는 파티션 수에 따라 다릅니다. Fox 예제에서는이 예제에서 4 개의 파티션이 있다고 가정하면 충분한 슬레이브 / 코어가있는 경우 4 개의 작업 세트가 생성되고 병렬로 제출됩니다. 아래 다이어그램은 이에 대해 자세히 설명합니다.
더 자세한 정보는 Spark 제작자가 DAG, 실행 계획 및 수명에 대한 자세한 정보를 제공하는 다음 YouTube 동영상을 보는 것이 좋습니다.
- 고급 Apache Spark- Sameer Farooqui (Databricks)
- Spark 내부에 대한 심층 이해 -Aaron Davidson (Databricks)
- AmpLab Spark 내부 정보
Spark 1.4
데이터 확장 시작 은 다음 세 가지 구성 요소를 통해 추가 구성 요소에서 DAG
.
Spark 이벤트의 타임 라인보기
실행 DAG
Spark Streaming 통계 집계
자세한 내용은 링크 를 참조하십시오.
참고 URL : https://stackoverflow.com/questions/25836316/how-dag-works-under-the-covers-in-rdd
'ProgramingTip' 카테고리의 다른 글
ASP.NET Web API에서 여러 Get 메서드를 사용하여 라우팅 (0) | 2020.12.03 |
---|---|
pip가 프록시 서버 뒤에서 작동하는 방법 (0) | 2020.12.03 |
선택한 ListBox 항목의 배경색 변경 (0) | 2020.12.02 |
Bash 또는 KornShell (ksh)? (0) | 2020.12.02 |
Objective-C- 애니메이션 후 변경 사항을 적용하는 CABasicAnimation? (0) | 2020.12.02 |