https://hazel-developer.tistory.com/285?category=926816

Spark란?

빅데이터를 분산하여 통합적으로 처리할 수 있는 인메모리 기반의 엔진이라고 한줄로 요약할 수 있다.

이러한 정의에서부터 스파크의 장점과 사용하는 이유에 대해서 파악 할 수 있다.

Spark 장점(사용해야 하는 이유)

  1. 통합 분석 플랫폼
    1. 배치/sql/스트리밍/머신러닝 등 다양한 api를 제공함으로 인해서 , spark 내에서 모든 데이터 관련 작업을 진행할 수 있다.
  2. DAG 즉 방향성 비사이클 그래프 기반으로 MR에 비해서 데이터 처리 작업이 효율화 되었다.
  3. 메모리 기반이라 당연히 디스크 사이에 잔여 데이터도 없고, 빠르다
    1. 그렇다면 디스크 기반이 왜 느린걸까?
    2. 물리적인 스토리지인 디스크에서 데이터가 적재되고 추출되기 때문에 그 속도가 빠르지는 않으며, 디스크 자체가 블록 기반으로 나뉘어서 저장되기 때문에 주어진 데이터를 탐색하기 위해 모든 블럭을 탐색하는데에 시간이 오래 걸린다,.
    3. 그러나 메모리는 시스템 내의 소프트웨어 주요 기억 장치/ 저장소이며, 데이터를 한 곳에 모아두기 때문에 탐색이 빠르다.
    4. 또한 메모리에 적재된 데이터를 재사용할 수 있어서 반복적/대화형 작업에 적격이다
  4. RDD 즉 회복성 분산 데이터로 데이터를 구성한다.
  5. 연산 방식이 lazy evalutation으로 함수가 실행되었을때 작업이 바로 실행되는 것이 아니라, action 작업과 함께 역으로 연산해 가면서 최적화 지점을 찾아서 실행된다 → 그래서 빠른 것
    1. 실질적으로 함수형 프로그래밍의 특징
    2. 책 보니까 스파크가 함수형 프로그래밍에 기반하여 초반에 설계되었다고 하더라

Spark 단점(사용하면 안되는 이유)

  1. 위에서 언급한 메모리 기반이라 처리는 빠르지만, 스파크가 저장이 아니라 처리에 집중한 만큼 데이터를 영구적이고 안정적으로 저장할수는 없다.
    1. 따라서 빠른 처리가 더 중요한 작업에 어울린다.

<aside> 💡 분산환경 VS MultiProcessing 데이터가 그렇게 크지 않다면, 단일 서버에서 multiprocessing으로 돌리는 것도 고려해볼 만하다. 왜냐하면 분산환경에서 실행계획, 리소스 할당 등의 과정에서 단일서버보다 성능이 저하되는 경우도 있기 때문이다. 그러나 이후 확장성이 큰 경우에는 당연히 분산환경을 고려하는 것이 좋다.

*그렇다면 확장성을 고려해서 분산환경을 고려한다면 어떠한 분산 데이터 처리가 적절할까?

Spark VS MR VS Hive* 통계같은 단순한 데이터 처리/조회는 Hive가 적절. SQL로 작업이 가능하기 때문 기계학습과 같은 반복적인 데이터 플로우/대화형 작업에는 Spark가 적절. 메모리에 의존하는 만큼 리소스 할당관련해서 오류가 발생하기 쉽다. MR은 강한 failure tolerance(결함 감내)를 가진다. 즉 안정적이다.

</aside>

  1. 또한 메모리 기반이라 위의 설명 처럼 리소스 할당에 대한 설정에 주의해야 한다.

    Spark 메모리 최적화

  2. 즉 작업에 대한 처리 속도와 분산보다는 안정성/무결성이 더 중요한상황이라면 스파크 보단 기존의 하둡 시스템을 활용하는 것이 좋다.( MR/ hive)

  3. 대량의 트랜잭션 작업에는 유용하지 않다.