목록Data (68)
우노
Spark 구조 분산모드에서 Spark Application는 실제 일을 수행하는 역할을 담당하며 1개의 중앙 조정자(Driver)와 N개의 분산 작업 노드(Executor)로 구성된 마스터/슬레이브 구조입니다. Cluster에서 실행 된다면, 하나의 Spark application은 Cluster Manager라고 불리는 외부 서비스를 사용해 여러 개의 머신에서 실행 됩니다. Cluster Manager에는 standalone(단독 클러스터 매니저), YARN, Mesos 등이 있습니다. Spark 구성 요소 Spark Application Spark에서 수행되는 사용자 프로그램으로 1개의 Driver Program과 N개의 Executor로 구성 Driver Program 프로그램의 Main() 함수..
YARN 구조 Yarn 기본 요소 Resource Manager : 전체적인 자원 할당 관리 Resource Manager는 Client의 요청에 해당하는 Application Manager를 실행 Resource Manager는 Node Manager를 통해 전체 클러스터의 Resource 를 알고 관리할 수 있다. Resource Manager 은 클러스터 당 하나만 있다. Application Manager : Client가 요청한 작업을 전적으로 실행 어플리케이션에 필요한 자원 확인 후 Resource Manager에게 자원 요청 Node Manager에게 컨테이너를 만들라고 지시 할당된 컨테이너들은 Application Manager가 관리 Node Manager : 해당 노드의 자원 관리 No..
sbt 설치방법 https://wooono.tistory.com/32 참고 sbt를 사용한 간단한 Jar 파일 빌드 Base Directory 생성 및 접근 mkdir test && cd test Base Directory 내부에 build.sbt 파일 생성 Scala version 확인 후 맞추기 필요한 라이브러리를 Scala version에 맞춰 추가 https://mvnrepository.com/artifact/org.apache.spark build.sbt 작성 예 version := "1.0" scalaVersion := "2.11.12" libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.4" libraryDependencies ..
공유변수 Spark 에는 두가지 유형의 공유 변수가 있다. Broadcast Variables 모든 워커 노드에 큰 값을 저장해, 재전송 없이 Spark Action 에서 사용할 수 있다. Accumulators 모든 Task 데이터를 공유 결과에 추가해, 특정 정보를 집계할 수 있다. Broadcast Variables Broadcast Variables 는, 모든 Worker 에 큰 규모의 입력 데이터셋을 효율적으로 제공할 때 사용하는 방법이며, 읽기전용 변수이다. 각 Worker 에 입력 데이터셋 캐쉬를 유지하고, 각 Task 에 복제본을 제공한다. 입력 데이터셋은, Worker 에 직렬화 형태로 캐싱되고 각 Task 는 입력 데이터셋이 필요할 때, 역직렬화를 통해 제공 받는다. 만약, 직접 짠 애..
Spark 의 데이터 구조 Spark 의 데이터 구조는 아래와 같이 크게 3가지 종류로 분류할 수 있습니다. RDD (Resillient Distributed Data) Dataframe Dataset 그 중, RDD 는 Spark 에 가장 처음으로 도입된 데이터 구조입니다. RDD 개념 RDD(Resillient Distributed Data) 는 아래와 같은 의미를 가집니다. Resillient (회복력 있는, 변하지 않는) 메모리 내부의 데이터가 손실되었을 때, 유실된 파티션을 재연산해 데이터를 복구할 수 있습니다. Distributed (분산된) 스파크 클러스터를 통하여, 메모리에 분산되어 저장됩니다. Data 데이터입니다. 즉, RDD 는 여러 분산 노드에 걸쳐 저장되는, 변경이 불가능한 데이터..
SPARK(In-Memory 방식)과 Hadoop MapReduce(분산병렬 처리방식)의 차이 Hadoop은 mapreduce 방식으로 데이터를 분산 처리 합니다. 여러 곳에 분산 저장된 데이터를 처리 하기 위해 mapreduce 방식으로 데이터를 처리 합니다. spark 역시 mapreduce 방식의 데이터처리 구조를 지원합니다. 즉, spark도 여러 곳에 저장된 데이터를 처리 하기 위해 mapreduce 방식으로 데이터를 처리 할 수 있다는 뜻입니다. 둘의 차이는, 데이터를 메모리에 놓고 하느냐, 디스크에 놓고 하느냐 입니다. Hadoop은 기본적으로 디스크로부터 map/reduce할 데이터를 불러오고, 처리 결과를 디스크로 씁니다. 따라서, 데이터의 읽기/쓰기 속도는 느린 반면, 디스크 용량 만큼..
MPI란? Message Passing Interface의 약자로 분산 및 병렬 처리에서 사용되는 표준 라이브러리이다. 병렬컴퓨팅 환경에서 지역적으로 메모리를 따로 가지는 여러 개의 노드(컴퓨터)들이 데이터를 공유하기 위해서는 통신에 대한 규약이 필요한데, 이를 MPI라고 한다. MPI 사용 예 예를 들어 1부터 1000까지를 더한다 해보자. 만약 코어가 1개라면 1개의 코어를 이용하여 1부터 100까지 더하면 된다. 만약 코어가 10개이고 이 작업을 더 빠르게 수행하고 싶다면 1부터 1000사이를 10개의 구간으로 쪼개어 첫 번째 코어는 1부터 100까지 더하게 하고 두 번째 코어는 101부터 200까지 더하게 하여 10개의 코어에 작업을 분산시킨다. 그 후에 10개의 코어의 결과물들을 한 군데 취합하..
Spark Shuffle 이란? Shuffle 은 Spark 에서 데이터를 재분배하는 방법이며, 효율적인 Spark Application 을 개발하기 위해 상당히 중요한 개념입니다. Background Shuffle 을 이해하기 위해서는, reduceByKey 의 작동 방식을 알아야합니다. reduceByKey 는 동일한 Key 를 가지고 있는, 모든 record 값을 취합하는 작업입니다. (A, 1), (A, 2), (A, 3) → (A, 6) 하지만, Spark 의 분산처리는 파티션 단위로 진행되기 때문에, 동일한 Key 의 모든 record 값을 취합하기 위해선, 동일한 Key 를 가진 튜플 데이터가 전부 같은 파티션에 있어야합니다. 따라서, 모든 튜플 데이터가 여러 클러스터에 분산 저장되어 있을 ..
MapReduce가 일반적인 병렬 프로그래밍 모델이 되어 감에 따라 MapReduce 프레임 워크에서 매트릭스 연산을 구현하려는 시도도 있었다. 그러나 MapReduce는 오버 헤드가 많고 분산 메모리를 잘 활용하지 않기 때문에 이 솔루션은 효율적이지 않다. Spark와 Hadoop MapReduce의 차이 https://wooono.tistory.com/50
Spark Property Spark는 SparkConf, spark-shell, spark-submit, spark-defaults.conf 을 통해 Spark Application 실행과 관련된 자원을 설정할 수 있습니다. property 적용 순서는 SparkConf, spark-shell, spark-submit, spark-defaults.conf 입니다. 적용 예 SparkConf val conf = new SparkConf().setAppName("Histogram").setMaster("local") val sc = new SparkContext(conf) spark-shell spark-shell --master yarn --num-executors 8 --executor-cores 2 ..