Data-Parallel to Distributed Data-Parallel

のの·2021년 1월 10일
0

공유 메모리 데이터 병렬화 vs 분산된 데이터 병렬화의 차이

공유 메모리 - 하나의 컴퓨터, 하나의 노드만을 가정
여러개의 프로세서들에게 병렬적으로 작업을 진행하게 함

Shared memory data parallelism

  • Split the data
  • Workers/threads independently operate on the data shared in parallel
  • Combine when done(if necessary)

데이터를 여러개의 조작들로 나누고 작업자나 스레드로 하여금 그들 각각의 개별적인 작업을 데이터의 개별적인 조각에게 병렬적으로 동시에 작업하도록 해야한다.

중요한건, 이 모든 것들이 컬렉션의 추상(abstraction) 그 내부에서 동작한다는 점이다.
데이터 컬렉션 내부에서 이미 데이터 병렬화가 자동적으로 일어나고 있다.

Scala's Parallel Collections is a colleciton abstraction over shared memory data-parallel execution

Distributed Data Parallelism

  • Split the data over several nodes
  • Nodes independently operate on the data shared in parallel
  • Combine when done (if necessary)

노드들이 독립적으로 Abstraction을 처리하는 상황.
공유 메모리 데이터 병렬화에서 본 것처럼 분산 환경 데이터 병렬화에서도 데이터를 한 머신 안에서 쪼갠다. 하지만 분산 환경에서는 그 데이터를 한 머신이 아닌 여러 머신에 걸쳐서 저장한다.

데이터를 하나의 노드가 아닌 여러개의 노드에 걸쳐 저장을 한다. 공유 메모리 케이스에서는 작업자나 스레드가 독립적으로 데이터 조각들을 동시에 작업하지만 분산 환경에서는 하나의 머신이 데이터 조각들을 동시에 작업한다. 작업자나 스레드가 아니라 독립적인 하나의 컴퓨터가 그 작업을 수행한다. (개개의 스레드가 아닌 개개의 노드가 데이터 처리를 진행)

네트워크

각각의 노드가 데이터를 공유하거나 서로 통신을 하면서 생기는 일종의 레이턴시(지연)
분산 환경 이전 공유 메모리 환경에서 데이터 병렬화에서 레이턴시는 중요한 이슈가 아니였다.
하지만 분산 환경에서는 엄청난 영향을 준다.

RDD
R(reselient) 회복 가능하고 D(distributed) 분산된 데이터셋(dataset)을 의미

We can keep collections abstraction over distributed data-parallel execution

Shared memory case: Data parallel programming model.
Data partitioned in memory and operated upon in parallel

Distributed cases: Data parallel programming model.
Data partitioned between machines, network in between, operated upon in parallel

데이터들은 여러분의 reduction operation에 따라 원소(엘리먼트)들을 축소시켜버립니다 그 것은 non-associative, 집합 규칙을 만족하지 않는 operation(동작)이죠 병렬 컬렉션에서는, 그런 non-associative operation은 non-deterministic한 결과를 도출할 것입니다. 스파크가 바로 정확히 동일한 일을 합니다 여러분들이 뭔가를 병렬적으로 할 때 그리고 그 병렬적인 operation이 non-associative한 reduction이라면 정확히 똑같은 일이 벌어집니다 여러분은 또 non-deterministic한 결과를 얻게 될 거에요 우리가 병렬 프로그래밍의 일종으로 배운 공유 메모리 상황에서의 데이터 parallelism같이 우리가 사전에 배운 것들이 중요합니다. 요점이죠 (결국 우리가 배운 공유 메모리 상황과 비슷하다는 말) 이 많은 분산 데이터 parallelism을 스파크에 적용할 수 있습니다

ex 48G의 텍스트 파일을 8개의 클러스터로 분산 배치

val text: RDD[Text] = ...

text.map{article => article.toLowerCase}

큰 데이터 셋을 하나의 컬렉션 abstraction이라고 생각할 수 있다.

profile
wannabe developer

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN