Spark 소스 분석 (1) RDD 가 무엇 입 니까?

7905 단어
RDD 는 스파크 의 기반 이 고 빅 데이터 에 대한 추상 적 인 것 이기 때문에 스파크 를 먼저 풀 고 RDD 부터 시작한다.
  • RDD 가 뭐 예요?어떤 특징 이 있 습 니까?
  • RDD 는 무엇 을 포함 합 니까?
  • RDD 는 무엇 을 할 수 있 습 니까?

  • RDD 주석org.apache.spark.rdd.RDD 소스 코드 에 상세 한 설명 이 있 습 니 다.
  • A Resilient Distributed Dataset (RDD), the basic abstraction in Spark.해석: 탄력성 (복원 가능) 은 데이터 세트 가 잘못 사용 되 고 복원 가능 하 다 는 것 을 의미한다.분산 식 은 데이터 세트 가 서로 다른 기계 에 분포 할 수 있다 는 것 을 의미한다
  • .
  • Represents an immutable, paritioned collection of elements that can be operated on in parallel.이렇게 하면 여러 스 레 드 에서 데 이 터 를 읽 는 일치 성 문 제 를 쉽게 해결 할 수 있다.분 구 적 = 병행 처리 가능 한 = 분포 식
  • This class contains the basic operations available on all RDD, such as map, filter, and persist.
  • In addition, [[org.apache.spark.rdd.PairRDDFunctions]] contains operations available only on RDDs of key-value pairs, such as map and filter ; 또한 persist 대상 에는 키 쌍 형 (KV 형) RDD 의 조작 이 포함 되 어 있 습 니 다. 예 를 들 어 groupByKeyjoin;설명: KV 형 은 키 에 따라 그룹 을 나 누고 관련 작업 을 지원 할 수 있 습 니 다
  • [[org.apache.spark.rdd.DoubleRDDFunctions]] contains operations available only on RDDs of Doubles; PairRDDFunctions double 데이터 세트 를 제공 하 는 작업;해석: 수치 형 데이터 세트 는 구 화, 평균, 분포 도 등 통계 적 조작
  • 이 있다.
  • and [org. apache. spark. rdd. SequenceFileRDDFunctions] contains operations available on RDDs that can be saved as SequenceFiles. 번역: groupByKey 순차 저장 작업 제공
  • All operations are automatically available on any RDD of the right type (예: RDD [(Int, Int)] through implicit.암시 적 변환 은 Scala 의 문법 적 특성 입 니 다.
  • Internally, each RDD is characterized by five main properties:
  • A list of partitions
  • A function for computing each split
  • A list of dependencies on other RDDs
  • Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
  • optionally, a list of preferred locations to compute each split on (예: block locations for an HDFS file) 번역: RDD 에 이러한 5 개의 속성 이 포함 되 어 있 습 니 다 (추상 적 인 방법 을 실현 하거나 빈 대상 에 게 값 을 부여 하 겠 다 는 것):
  • 파 티 션 목록 (getPartitions)
  • 파 티 션 의 데 이 터 를 계산 하 는 함수 (copte)
  • 다른 RDD 에 대한 의존 목록 (getDependencies)
  • 선택 가능: KV 형 RDD 는 hash - 파 티 션 (paritioner)
  • 과 같은 파 티 션 이 있어 야 합 니 다.
  • 선택 가능: 파 티 션 데 이 터 를 계산 한 후 우선 저장 하 는 위치, 예 를 들 어 HDFS 의 한 블록 (getPreferredLocations)
  • Spark 의 모든 scheduling and execution is done based on these methods, allowing each RDD to implement its own way of computing itself. 실제로, users can implement custom RDD (예: for reading data from a new storage system) by overriding these functions. 번역: Spark 의 모든 작업 스케줄 링,임무 수행 은 모두 이런 방법 에 의존한다.RDD 는 이러한 방법 을 덮어 쓰 고 자신 만 의 계산 방법 을 실현 할 수 있다.예 를 들 어 새로운 저장 시스템 에서 데 이 터 를 읽 습 니 다.
  • Please refer to the http://101.96.8.165/people.csail.mit.edu/matei/papers/2012/nsdi_spark. pdf for more details on RDD internals.
    예제 코드
    예, 헬 로 월 드 부터 공식 적 으로 추천 하 는 첫 번 째 프로그램 은 pi 의 유사 치 를 계산 하 는 것 입 니 다.
    import scala.math.random
    import org.apache.spark.sql.SparkSession
    
    object SparkPi {
      def main(args: Array[String]) {
        val spark = SparkSession
          .builder
          .appName("Spark Pi")
          .getOrCreate()
        val slices = if (args.length > 0) args(0).toInt else 2
        val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
        val count = spark.sparkContext.parallelize(1 until n, slices).map { i =>
          val x = random * 2 - 1
          val y = random * 2 - 1
          if (x*x + y*y <= 1) 1 else 0
        }.reduce(_ + _)
        println("Pi is roughly " + 4.0 * count / (n - 1))
        spark.stop()
      }
    }
    

    뭐? RDD 어디 있어?
  • Spark 세 션 과 Spark 컨 텍스트 join 4 줄 을 얻 으 면 1 줄 코드 라 고 할 수 있 습 니 다.내부 구조 기 를 호출 하여 Spark DoubleRDDFunctions 를 만 들 었 고 할당 SequenceFileRDDFunctions 을 만 들 었 습 니 다.뒤에 implicit 는 스파크 를 획득 한 val spark = SparkSession.builder.appName("xx").getOrCreate() 이다.세 션 대상 과 문맥 대상 에 대해 서 는 나중에 분석 하 겠 습 니 다.
  • RDD SparkContext 대상 중 하나 spark 함 수 를 만 들 고 RDD 대상 을 만 들 었 습 니 다.RDD 는 추상 류 다.원본 코드 에 들 어가 면 만 든 RDD 는 spark.sparkContext 입 니 다.이 RDD 가 제일 쉬 운 RDD 야.만약 나라 면, 나 는 그것 을 Simple RDD 라 고 명명 할 것 이다.이 말 은 slices 개 파 티 션 을 포함 하 는 RDD 를 만 들 었 습 니 다. RDD 의 내용 은 1 에서 n 입 니 다. 이 n + 1 개의 수 입 니 다.데 이 터 는 메모리 에 존재 합 니 다. 메모리 에서 파 티 션 의 데 이 터 를 읽 습 니 다.
  • 이 RDD 의 디 테 일 을 보 세 요. 앞 절 에 번 역 된 글 을 기억 하 십 니까?RDD 는 다섯 가지 방법 을 실현 해 야 한다.이 병렬 용기 RDD 는 어떻게 실현 되 었 습 니까?
  • 한 파 티 션 의 목록 은 데 이 터 를 slices 부분 으로 나 누 어 slices 용기 에 넣 습 니 다.모든 용 기 는 하나의 파 티 션 이 고 모든 용 기 는 파 티 션 목록
  • 을 구성 합 니 다.
  • 파 티 션 의 데 이 터 를 계산 하 는 함수 가 아무것도 하지 않 고 파 티 션 으로 돌아 가 는 교체 기
  • 의존 목록 의존 목록 은 빈 목록 입 니 다.즉, 이 RDD 는 다른 RDD 에 의존 하지 않 는 다
  • .
  • 하나의 파 티 션 기 는 KV 형 이 아니 라 필요 하지 않 습 니 다
  • 하나의 연산 저장 소 우선 위치 인 Spark Context 가 맵 에 들 어 왔 습 니 다. Map 에는 slices 키 가 있 고 slices 용기 에 대응 합 니 다.Spark Context 희망 결과 가 메모리 에 있 음 을 알 수 있 습 니 다.

  • map map 는 그룹 에 있 는 모든 요 소 를 다른 요소 로 표시 하 는 작업 입 니 다.우 리 는 RDD 는 가 변 적 이지 않다 고 말 했 습 니 다. map 라 는 조작 은 새로운 MapPartitionsRDD 대상 을 만 듭 니 다.그럼 MapPartitionsRDD 의 5 가지 방법 은 요?
  • 의존 목록: 상류의 RDD 에 만 의존 합 니 다. 이 예 는 상류의 ParallelCollection RDD 에 의존 합 니 다.
  • 하나의 파 티 션 목록: 바로 상류 파 티 션 목록 입 니 다. 상류 데 이 터 를 직접 읽 습 니 다
  • 하나의 계산: 계산 과정 은 바로 '매 핑 관계' 이 고 외부 에서 하나의 함수 대상 으로 매 핑 관 계 를 표현 하 는 것 이다
  • .
  • 하나의 파 티 션: 상류 RDD 의 파 티 션, 상류의 파 티 션 을 직접 읽 습 니 다
  • 우선 저장 위치: 상위 RDD 의 우선 위치, 이 예 에서 Spark Context 가 들 어 오 는 Map
  • 에 직접 기록 합 니 다.
  • reduce reduce 도 하나의 조작 으로 다 중 집합 작업 이 며 집합 전후 유형 이 일치 해 야 합 니 다.이 예 는 구 와 조작 이다.과정 은 각 구역 의 집합 결 과 를 계산 한 다음 에 여러 구역 의 결 과 를 다시 집합 하 는 것 으로 약술 할 수 있다.과정 이 비교적 복잡 하 니 나중에 다시 깊이 들 어가 자.
  • pi 는 어떻게 계산 합 니까?random 은 무 작위 수 를 취하 고 범 위 는 [0, 1) 이 며 x 와 y 는 [- 1, 1) 범위 내의 무 작위 수 입 니 다. xx + yy 를 계산 합 니 다. 이것 은 점 (x, y) 에서 (0, 0) 까지 의 거리 입 니 다. 거리 가 1 (점 이 r = 1 의 원 안에 떨 어 졌 을 때) 1 을 취하 고 그렇지 않 으 면 0 을 취하 십시오. 그러면 무 작위 로 N 점 을 취하 고 점 이 원 안에 떨 어 질 확률 은 원 의 면적 / 변 길이 가 2 의 정사각형 면적 과 같 습 니 다. 따라서: spark.sparkContext.parallelize(1 until n, slices)원 의 면적 = pi, 정사각형 면적 = 4 대수 정리 와 중심 극한 정리 에 따라 취 하 는 점 이 많 을 수록 pi 의 평가 치 는 정상 분포 와 비슷 하 다. 얻 는 점 이 많 을 수록 정상 분포 의 기준 차 이 는 작 고 얻 는 점 이 많 을 수록 정상 분포 의 평균 치 는 pi 의 진가 에 가깝다. 따라서 취 점 이 증가 함 에 따라 pi 의 평가 치 는 약 정확 하 다.
  • 스칼라 문법parallelize 세 개의 Scala 문법 을 사 용 했 습 니 다.
  • 모든 대상 은 자바 에서 ParallelCollectionRDD 기본 유형 int 로 여 겨 지고 가방 을 대상 으로 할 수 있 으 며 스칼라 에서 RDD 가 대상 이다.
  • 암시 적 전환 Nil 은 호출 ≌ * / 방법 입 니 다. Int 를 RichInt 로 전환 하 는 것 은 암시 적 이 고 1 until n 대상 에 정 의 된 1 방법 입 니 다. 1 매크로 와 유사 합 니 다. 참고: scala source implicit conversion from Int to RichInt - Stack Overflow
  • 함수 가 호출 하 는 쓰기 utilRichInt.util 와 같 습 니 다. 즉, 대상 방법 이 하나의 매개 변수 만 있 으 면 점 과 괄호 를 생략 할 수 있 고 코드 는 자연 언어 에 더욱 가 깝 습 니 다.
  • OK, 그럼 scala.Predef 이 말 을 다 썼 으 니 어떤 것 일 까요?
    질문 목록
    나 는 읽 는 과정 에서 풀 리 지 않 은 내용 을 기록 하고 나중에 코드 를 읽 을 때 해답 을 남 겨 두 었 다. 의문 하 나 는 지 워 지 는 것 이 바로 성장 하 는 과정 이다.
  • reduce 등 RDD 작업 은 어떻게 실 행 됩 니까?
  • 총결산
  • RDD 는 데이터 세트
  • RDD 는 탄성, 분포 식, 가 변 적 이지 않 은 것 이 특징 이다.
  • RDD 는 하나의 파 티 션 집합, 하나의 의존 집합, 하나의 연산, [하나의 파 티 션, 하나의 우선 결과 저장 위치] 를 포함 해 야 합 니 다.
  • RDD 는 맵, 여과, 취 합, 저장 등 일련의 조작 이 있다.
  • 본문 원본 코드
    RDD spark / core / RDD / RDD. scala at master · apache / spark · GitHub map spark / core / RDD / mapPartitionsRDD at master · apache / spark · GitHub 컴 퓨 팅 pi spark / examples / sparkPi. scala at master · apache / spark · GitHub
    @ Kangying Village, Beijing, China
    Spark 소스 코드 / RDD

    좋은 웹페이지 즐겨찾기