목록Data (66)
우노
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 의 데이터 구조 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 ..
오류 org.apache.spark.SparkException: Job aborted due to stage failure: Total size of serialized results of XXXX tasks (X.0 GB) is bigger than spark.driver.maxResultSize (X.0 GB) 원인 RDD로 분산 돼 있던 데이터를 collect() 등을 사용해 driver로 합치면서 driver 메모리 최대크기(driver.maxResultSize)를 초과했기 때문에 발생한다. driver.maxResultSize의 기본값은 1G(1024MB)이다. 자세한 내용은 응용 프로그램 속성 을 참조 해결 방법 resource 설정을 통해 driver의 최대 메모리 크기를 늘린다. Spark..
// 로컬파일에 결과를 적기 위해 라이브러리 호출 import java.io.PrintWriter import java.io.File import java.io.FileOutputStream // 결과파일위치 val result_dir = "./result_file" val latency1 = 1 val latency1 = 2 val latency1 = 3 // writer를 사용해 로컬파일에 결과 적기 val writer = new PrintWriter(new FileOutputStream(new File(result_dir), true)) writer.write(latency1 + " " + latency2 + " " + latency3 + "\n") writer.close