꾸준함이 중요한 Lion2me의 기술블로그

Spark 개념 정리

03 Apr 2022

Spark

일전에 pyspark에 대한 설치와 간략한 Spark의 기능들에 대해 설명했었습니다만, 다시 한번 세세하게 적어보고자 합니다.

Spark를 이해하기 위해서는 데이터 처리 방식에 대해서 이해 할 필요가 있습니다.

키워드는 두 가지로 생각 할 수 있겠네요.

병렬 처리란

병렬 처리는 여러 일을 동시에 수행한다는 의미입니다. 병렬처리의 최적화를 한다는 의미는 한 노드 혹은 CPU가 최적으로 연산 할 수 있는 환경을 만드는 것이 아닐까 생각합니다.

요약 : 여러 일을 동시에 수행한다.

분산 처리란

분산 처리는 한 가지의 일을 여러 노드에서 하나의 태스크를 실행 한 뒤 결과를 모으는 방식을 말합니다. 여기서 여러 노드가 태스크를 실행한다는 뜻은 동일한 작업을 실행한다는 뜻입니다.

이러한 기능이 가능하기 위해서는 태스크를 각 노드로 분배(Distribute) 할 수 있도록 네트워크가 있어야 한다는 의미이므로, 분산 처리를 최적화 한다면 이 네트워크 관련 이슈를 해결 해야 합니다.

요약 : 여러 노드로 하나의 일을 수행한다.

Spark는 병렬 분산 처리 플랫폼

이제 Spark가 하는 일에 대해서 설명하기 쉬울 것 같습니다. 먼저 Spark는 병렬 분산 처리 플랫폼입니다. 즉 위에서 설명 한 병렬 처리와 분산 처리를 동시에 수행합니다.

병렬처리는 한 서버에서 일어나는 일이고, 태스크를 나누어 작업을 한다는 개념으로 생각하면 가능 할 것 같은데 분산 환경에서 이러한 작업을 한다고 생각하니 어렵게 느껴집니다. 하지만 Spark는 간단하게 구현 할 수 있습니다.

바로 Resilient Distributed Dataset(RDD) 덕분입니다.

Spark는 분산된 환경에서 데이터 병렬 모델을 추상화하여 사용 할 수 있는 RDD를 지원해주기 때문입니다.

주의해야 하는 점

Spark를 통해서 데이터를 처리 할 때 우리가 주의 할 점이 있습니다. 마치 만능처럼 보이는 Spark는 사실 파이썬 인메모리 데이터 분석 라이브러리인 Pandas보다 느리다는 말을 자주 들어왔습니다.

여기서 중요 한 점은 기대보다 느릴 수 있다 입니다.

마치 분산 된 환경에서 병렬처리를 한다는 말로 무조건적으로 효과적이라는 오해가 있을 수 있지만, Spark가 분산 환경에서 동작한다는 이야기는 곧 노드간 네트워크 통신 이 필요하다는 이야기로 일반적으로 알려진 메모리 > 디스크 > 네트워크 속도 차이들을 인지 할 필요가 있습니다.

노드 간 통신은 곧 네트워크 통신 입니다. 즉 코드를 작성 할 때 각 환경에서 최적의 필터링을 거친 후 노드 간 통신을 최적화 할 필요가 있습니다.

참고

https://velog.io/@mrnglory/%EB%B6%84%EC%82%B0%EC%BB%B4%ED%93%A8%ED%8C%85-%EB%B3%91%EB%A0%AC%EC%BB%B4%ED%93%A8%ED%8C%85

https://dongwooklee96.github.io/post/2021/03/26/cap-%EC%9D%B4%EB%A1%A0%EC%9D%B4%EB%9E%80/