본문 바로가기

데엔(Data-Engineering)/스파크(Spark)5

[Spark] 05. 스파크 기초(Shuffling & Partitioning) • 그룹핑시 데이터를 한 노드에서 다른노드로 옮길때 • 성능을 (많이) 저하시킨다 Shuffle을 일으킬 수 있는 작업들 • Join, leftOuterJoin, rightOuterJoin • GroupByKey • ReduceByKey • ComebineByKey • Distinct • Intersection • Repartition • Coalesce Shuffle은 이럴때 발생한다 • 결과로 나오는 RDD가 원본 RDD의 다른 요소를 참조하거나 • 다른 RDD를 참조할때 Shuffle을 최소화 하려면 • 미리 파티션을 만들어 두고 캐싱 후 reduceByKey 실행 • 미리 파티션을 만들어 두고 캐싱 후 join 실행 • 둘다 파티션과 캐싱을 조합해서 최대한 로컬 환경에서 연산이 실행되도록 하는 방.. 2023. 2. 12.
[Spark] 04. 스파크 기초(Transformations & Actions / Cache & Persist) Spark Operation은 Transformations & Actions 두 가지로 나뉠 수 있다. 메모리를 최대한 활용할 수 있다. (디스크, 네트워크 연산을 최소화 할 수 있다) 데이터를 다루는 task는 반복되는 경우가 많다 • 예) 머신러닝 학습 Transformations 지연 실행되기 때문에 메모리에 저장해둘 수 있다 결과값으로 새로운 RDD를 반환 지연 실행 - Lazy Execution 관련함수 • map() • flatMap() • filter() • distinct() • reduceByKey() • groupByKey() • mapValues() • flatMapValues() • sortByKey() • keys • join (+ leftOuterJoin, rightOuterJo.. 2023. 2. 12.
[Spark] 03. 스파크 기초 (Distributed Data-Parallel / Key-Value RDD) Distributed Data-Parallel? 1. 데이터를 여러개로 쪼개서 여러 노드로 보낸다 2. 여러 노드에서 각자 독립적으로 task를 적용 3. 각자 만든 결과값을 합치는 과정 ※노드간 통신같이 신경써야될 것이 늘어난다※ Spark를 이용하면 분산된 환경에서도 일반적인 병렬처리를 하듯 코드를 짜는게 가능하다. Spark는 분산된 환경에서 데이터 병렬 모델을 구현해 추상화 시켜주기 때문이다. 분산처리 문제 분산처리로 넘어가면서 신경써야될 문제가 많아졌다 • 부분 실패 - 노드 몇개가 프로그램과 상관 없는 이유로 인해 실패 • 속도 - 많은 네트워크 통신을 필요로 하는 작업은 속도가 저하 메모리 > 디스크 > 네트워크 네트워크는 메모리 연산에 비해 100만배 정도 느리다 Structured Dat.. 2023. 2. 12.
[Spark] 02. 스파크 기초 (RDD란) RDD란 Resilient Distriduted Dataset : 탄력적 분산 데이터셋 왜 RDD를 사용하나? 유연하다 짧은 코드로 할 수 있는게 많다 개발 시 무엇 보다는 어떻게에 대해 더 생각한다.(how-to) Lazy execution #RDD만드는 과정 sc = SparkContext(conf=conf) lines = sc.textFile(f"file:///{directory}/{filename}") #위 코드에서는 lines 객체가 RDD 5개 특징 1. 추상화 데이터는 클러스터에 흩어져있지만 하나의 파일인것 처럼 사용 가능하다. lines = sc.textFile(f"file:///{directory}/{filename}") #불려온 파일은 여러 노드에 저장되어 있지만, lines 객체를 통.. 2023. 2. 6.