티스토리 뷰



Spark의 기능 및 장점
  • 분산 처리
  • 실시간 스트리밍
  • 머신러닝
  • 다양한 언어 지원


Spark의 스택 구조



  • 인프라 계층
    • Standalone Scheduler(기본)
    • Yarn(하둡)
    • Mesos(Docker 또는 가상화 플랫폼)
  • 스파크 코어
    • 메모리 기반의 분산 클러스터 컴퓨팅
  • 스파크 라이브러리
    • 빅데이터를 SQL로 핸들링하는 Spark SQL
    • 실시간 스트리밍 Spark Streaming
    • 머신러닝 MLlib
    • 그래프 데이터 프로세싱 GraphX


스파크 기본 원리 및 API



실제로 파일이 읽혀지는 시기는 액션이 수행(count)되는 순간이다. (sc.textFile이 아니다)
이유는 메모리는 한정되어 있으므로 filter등의 동작에 의해, 데이터를 정재 후 올리는 경우 메모리 소모를 줄일 수 있기 때문이다.
그리고 액션이 수행 이후는 메모리에서 해당 RDD를 지운다.

RDD란?
RDD는 여러 분산 노드에 걸쳐서 저장되는 변경이 불가능한 데이터(객체)의 집합으로 각각의 RDD는 여러개의 파티션으로 분리가 된다. 서로 다른 노드에서 분리되어 실행됨.
RDD는 2가지의 오퍼레이션만을 지원한다.
  1. Transformation: 새로운 RDD 데이터를 생성해내는 것 (ex. filter, map)
    1. https://spark.apache.org/docs/latest/programming-guide.html#transformations
  2. Action: RDD값을 기반으로 무엇인가를 계산하는 것 (ex. count)
    1. https://spark.apache.org/docs/latest/programming-guide.html#actions


RDD Persistence (참고: http://bcho.tistory.com/1029)


RDD 생성 및 종류
스파크에서 함수 넘기기
  • 람다 표기법

  • 모듈 상의 탑레벨 함수

  • 파이썬 클래스안에서 넘기는 방식

    • 다음과 같이 데이터를 넘기는 경우, 객체 전체가 넘어가게 되므로, 메모리 사용이 많아진다. 그래서 아래의 코드가 더 좋은 코드.


Pair RDD(Key / Value)
  • Java
    • PairFunction<String, String, String> keyData =
        new PairFunction<String, String, String>() {
        public Tuple2<String, String> call(String x) {
          return new Tuple2(x.split(" ")[0], x);
        }
      };
    • JavaPairRDD<String, String> pairs = lines.mapToPair(keyData);
  • Python
    • lines = sc.textFile("data.txt")
      pairs = lines.map(lambda s: (s, 1))
    • counts = pairs.reduceByKey(lambda a, b: a + b)


'BigData > Spark' 카테고리의 다른 글

Spark Transformations & Actions (API)  (0) 2017.03.29
mapValues/reduceByKey 예시  (0) 2017.03.29
데이터 스트리밍 개념  (0) 2017.03.28
댓글
공지사항
최근에 올라온 글
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함