목록전체 글 (762)
우노
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 는 여러 분산 노드에 걸쳐 저장되는, 변경이 불가능한 데이터..
직렬화(serialized) 객체를 외부 데이터로 저장하는 것 객체화된 클래스(인스턴스)의 속성과 데이터를 파일화하여 외부에 저장할 수 있음 역직렬화(deserialized) 직렬화로 저장된 파일을 다시 객체로 만드는 것
고가용성이란? 고가용성(HA, High Availability)이란 서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말한다. 고가용성 -> "가용성이 높다" 라는 뜻으로 "절대 고장나지 않음"을 의미한다. 고가용성을 제공하기 위해서 주로 2개의 서버를 연결하는 방식을 사용한다. 2개로 묶인 서버 중 1대의 서버에서 장애가 발생하면, 다른 서버가 즉시 그 업무를 대신 수행하므로, 시스템 장애를 불과 몇 초만에 복구할 수 있다.
내결함성이란? 운영중이던 시스템의 데이터가 손실되거나 진행중인 작업이 손상되지 않도록 전원 부족 또는 하드웨어 장애와 같은 돌발 사태에 대비할 수 있는 컴퓨터 또는 운영체제의 기능이다. 미러 볼륨, RAID-5 볼륨, 클러스터로 내결함성을 제공할 수 있다. 1. 미러볼륨 두 개의 실제 디스크 데이터를 복제하는 내결함성 볼륨이다. 미러 볼륨은 미러라고 하는 두개의 똑같은 볼륨을 사용해 볼륨에 포함된 정보를 복제하여 데이터 중복시킨다. 미러는 항상 다른 디스크에 존재한다. 미러 볼륨은 확장할 수 없다. 2. RAID-5 볼륨 세 개 이상의 실제 디스크에 걸쳐 데이터 및 패리티 스트라이프가 간헐적으로 만들어지는 내결함성 볼륨. 패리티는 오류 발생 후 데이터 재구축시 사용되는 계산 값이다. 동적 디스크에만 RA..
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