Hadoop

Hadoop Ecosystem 정리 #2 (Spark)

PON_Z 2023. 1. 10. 17:19

- 하둡 에코시스템 중 MapReduce에 해당하는 기능을 대체할 수 있는 것이 Spark라고 했었다. 스파크가 빠른 이유는 빅데이터의 In-Memory 연산이 가능하기 때문이다.

 

- 다음은 스파크 클러스터의 구조이다. SparkContext가 있는 Driver Program, Cluster Manager, Work Node의 3가지로 나눌 수 있다. Driver Program은 사용하는 컴퓨터를 말하고 python 같은 스크립트로 task를 정의한다. 정의된 task는 Cluster Manager로 넘어가서 분배가 되는데, 하둡이라면 Yarn을,  AWS의 경우는 Elastic MapReduce 가 Cluster Manager 역할을 한다. Work Node에서는 CPU 코어 1개당 1개의 Node를 배치하여 연산한다.

 

- 하지만 보통 컴퓨터에서 Spark를 이용해 단순 연산 프로그램을 돌리면 Pandas 보다 느리다는 것을 확인할 수 있다. 그 이유는 Spark는 수평 확장이 가능하게 설계되었기 때문이다. 즉, 필요에 따라 Node 수를 늘릴 수 있다. 대신 Pandas를 사용해서 "Out Of Memory" 에러가 나는 연산도 Spark를 사용하면 속도는 느리지만 모든 연산을 정상적으로 수행할 수 있다.

 

pandas vs spark

 

 

- Spark는 Lazy Evaluation을 따른다. 이는 task를 정의할 때 연산을 하지 않고 결과가 필요할 때 연산하는 것을 말한다. 이로 인해 기다리면서 연산 과정을 최적화 할 수 있다는 장점이 있다.

 

- Spark의 핵심 데이터 모델은 RDD(Resilient Distributed Dataset)이다. 여러 분산 노드에 걸쳐서 저장되고, 변경이 불가능하며, 여러개의 파티션으로 분리된다는 특징이 있다. 여러가지 데이터 셋이나, DB에 담긴 데이터를 불러올 때 RDD의 형태로 가져올 수 있다.

 

- RDD는 5가지 특징이 있다.

1. 데이터 추상화 : 클러스터에 흩어진 데이터를 하나의 데이터처럼 사용이 가능하다.

2. Resilient & immutable: 데이터가 불변하므로, 네트워크 장애등으로 인해 노드중 하나가 망가져도 복구가 가능하다.

RDD1이 변환을 거치면 RDD1이 바뀌는 것이 아니라, 새로운 RDD2가 만들어진다. 때문에 Node1이 연산중 문제가 발생하면 다시 복원후 Node2에서 연산을 진행하면 된다.

3. Type-safe : 컴파일시 타입을 판별할 수 있어서 문제를 일찍 발견할 수 있다.

4. Unstructured & Structured : 정형, 비정형 데이터를 모두 담을 수 있다.

 

5. Lazy : Spark Operation은 위와 같은 변환과 액션으로 나뉜다. 액션을 할 때까지 변환을 실행하지 않는다. 액션(A)를 만나면 변환(T)이 전부 실행된다.

 

 

- 분산처리로 넘어가면서 노드 몇 개가 프로그램과 상관없는 이유로 인해 실패하는 경우가 많다. 또한 많은 네트워크 통신을 필요로 하는 작업은 속도가 저하된다.

 

(1) RDD.map(A).filter(B).reduceByKey(C).take(100)

(2) RDD.map(A).reduceByKey(C).filter(B)..take(100)

 

- 위 두 코드에서 (1)이 훨씬 빠르다.

=> reduceByKey는 각 노드의 데이터를 합치는 함수인데 필터링을 통해 데이터 수를 줄이고 합치는 것이 노드들과의 통신의 양이 줄어듦으로 훨씬 유리하기 때문이다.

728x90

'Hadoop' 카테고리의 다른 글

Spark Dataframe Tips  (0) 2023.03.23
Apache Spark 환경 설정  (0) 2022.12.26
Hadoop Ecosystem 정리 #1  (0) 2022.12.20