spark: 20개의 글
RDD Architecture 아래 내용을 기준으로 학습했습니다. 어떻게 RDDs를 생성하는지에 대해서 이해 RDD의 performance를 증가시키기 위해 partitions을 관리 RDD resilient를 만들게 하는게 무엇인지 RDDs가 jobs, stages에서 broken이 되었을때 어떻게 처리하는지 Serialize tasks RDD Review RDD에 대해서는 이전에도 언급한바가 있기 때문에 간단하게 언급하면, Spark = RDD라고 생각하면 된다. 그 만큼 RDD는 Spark를 이해하는데 있어 가장 중요한 요소라고 할 수 있습니다. RDD는 여러개의 파티션들로 구성이 되어있고, 파티션의 개수는 Spark에서 클러스터의 CPU의 코어의 개수를 기반으로 결정이 됩니다. 여기서 언급하는 파..
Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing (2012)에 나온 논문을 읽어보았다. 데이터 중간 결과를 재사용하는 iterative한 연산이 필요한 알고리즘들 machine learning and graph algorithms, PageRank, K-means clustering, logstic regression, data mining이 있다. 위 알고리즘을 MapReduce에서 처리를 하게 되면 Map과 Reduce의 사이에서 data replication, disk I/O, serialization의 overhead가 발생한다. 즉, MapReduce가 iteration에서 수행..
Interactive Analysis with the Spark Shell API를 쉽게 습득하기 위해서는 spark's shell만큼 좋은게 없습니다. python과 scala를 통해서 할 수 있습니다. 이번에는 RDD를 생성하는 방법, MapReduce를 Spark에서 구현하는 방법과, caching하는 방법에 대해서 설명하려고 합니다. 마지막에는 내가 구현한 앱을 사용자들에게 배포하기 위해 sbt build tool을 이용해 배포하는 방법에 대해서 설명합니다. Resilient Distributed Dataset(RDD) 생성하기 위해서는 hadoop hdfs file을 읽거나, 기존에 있는 rdds를 transforming을 통해서 변환이 가능합니다. RDD에서 제공하는 method는 action..
RDD란? 분산되어 존재하는 데이터 요소들의 모임이라고 생각하시면 됩니다. RDD는 java의 String처럼 변경이 불가능한 객체(immutable)의 집합으로 각각의 RDD는 여러개의 파티션으로 분리가 됩니다. 변경을 하기 위해서는 새로운 RDD를 만들거나, 존재하는 RDD를 변형, 결과 계산을 위해 RDD에서 연산을 호출하여 생성을 해야 합니다. Spark는 자동으로 RDD에 있는 데이터들을 클러스터에 분배, 수행하는 연산들을 병렬화 합니다. Spark는 RDD를 lazy evaluation으로 액션을 사용하는 시점에서 처리하기 때문에, 구현할때는 transformation과 action의 operation을 확실히 이해하고 있어야 결과를 받아보는데 효율적으로 구현이 가능합니다. 예를 들어 한 라인..
들어가며 Spark를 튜닝하기 위해서는 클러스터의 구조가 어떻게 구성이 되어 있는지, 프로그램은 어떤 순서로 실행이 되는지에 대한 지식은 보유를 하고 계셔야 시스템을 설정 및 튜닝이 가능합니다. 예를 들어 설정하는 옵션에서 executor-memory의 값을 설정해야 하는데, executor가 어떤 역할을 하는지 모른다면... 아니되오 . Spark의 components를 Driver Program, SparkContext, Cluster Manager, Worker Node, Executor, Task, Cache가 있고, 각각의 역할과 어떻게 동작하는지에 대해서 알아보겠습니다. Components Driver Program main()함수를 갖고 있는 프로세스를 말합니다. 우리가 spark-submi..
Spark란? Apache Spark는 빠르고 general-purpose cluster computing system입니다. 다시 말해서 기존에는 batch processing을 하기 위해서 MapReduce를 사용하고, sql을 사용하기 위해서는 hive를 사용하는 등 다양한 플랫폼을 도입해야 했었습니다. 하지만 이제는 Spark 하나의 시스템만을 설치해도 batch, streaming, graph processing, sql 등의 처리가 가능합니다. 또한 Spark는 Java, Scala, Python, 그리고 R언어의 API를 제공하기 때문에 쉽게(?) 구현을 할 수 있습니다. 아래의 high-level tools를 제공함으로써, 위에서 언급한 범용적인 플랫폼이라고 말할 수 있습니다. High-L..
들어가며 우리에게 주어진 데이터가 1GB라고 생각해보자, 1GB의 크기를 갖는 데이터를 관계형 데이터베이스에 저장을 하고, 데이터를 처리하는데는 큰 어려움이 없을 것입니다. 하지만 데이터의 크기가 10GB, 100GB로 증가한다고 생각하면, 우리가 갖고 있는 컴퓨터의 성능을 업데이트를 해야 합니다. 하지만 만약 1TB, 10TB, 100TB로 데이터의 크기가 커진다면 어떻게 해야할까요? 그렇게 된다면 우리는 여러 컴퓨터를 이용해 분산으로 처리하는 방법을 사용해야 합니다. 하루에 처리할 내용을 몇시간에 처리하는게 일하는데 더 효율적이니 분산으로 처리하는게 좋을것 같습니다. 그렇다면 데이터가 어떻게 갑자기 늘어났을까요? 최근 스마트폰이 등장하면서 Facebook, Twitter, RFID readers, s..
들어가며 앞서 클러스터를 구축하는 방법에 대해서 설명을 하였다. [Cloudera] 클라우데라 설치하는 방법 - (Linux, Cloudera Manager) 그렇다면 이렇게 구축된 클러스터에 새로운 노드를 추가하기 위해서는 어떤 작업을 진행해야할까에 대해서 이번 글에 적으려고 한다. 막상 클러스트러를 구축할때 처럼만 설정하면 되지 라고 생각하지만, 막상 내가 각 노드에 어떤 내용을 추가했는지 기억이 안난다는 함정이 있다. 그래서 DataNode를 추가하거나 Spark의 WorkerNode를 추가를 할 경우에 어떤 설정 및 설치를 해야하는지 아래 설명한다. 1. 스토리지 추가하기 일단 새로운 노드를 클라우드에서 생성을 한다. 기존 노드들에서도 스토리지를 추가했기 때문에 생성이 완료되면 스토리지를 추가하자..
데이터프레임은 관계형 데이터베이스의 테이블에서 칼럼 이름(named columns)으로 구성된 변경 불가능한 분산 데이터 컬렉션입니다. 아파치 스파크 1.0에서의 경험적 피처로서 스키마 RDD(SchemaRDD)가 소개된 것처럼, 스키마RDD가 아파치 스파크 1.3 버전에서 데이터프레임이라는 이름으로 바뀌었습니다. 파이썬 Pandas의 데이터프레임 또는 R의 데이터프레임에 익숙한하다면 스파크 데이터프레임은 구조적인 데이터로 작업을 쉽게 해준다는 측면에서 Pandas의 데이터프레임 또는 R의 데이터프레임과 비슷한 개념일 것입니다. 분산된 데이터 컬렉션에 구조체를 씌움으로써 스파크 사용자는 스파크 SQL로 구조적 데이터를 쿼리하거나 람다 대신에 표현 함수를 사용할 수 있습니다. 이번 포스팅에서는 두 함수를 ..
분산된 이뮤터블 자바 객체 컬렉션인 RDD(Resilient Disributed Data)는 연산을 매우 빠르게 하며 아파치 스파크의 핵심입니다. 이름에서 알 수 있듯이, 데이터셋은 분산돼 있습니다. 데이터셋은 키를 기반으로 덩어리(Chunk) 단위로 쪼개져 있고 실행 노드(Executor Node)로 분산돼 있습니다. 이렇게 함으로써 데이터셋에 대한 연산 속도를 매우 빠르게 할 수 있습니다. RDD는 각각 덩어리에 적용된 모든 트랜스포메이션을 추적하는데, 이는 연산 속도를 빠르게 하고 어떤 문제로 인해 데이터 손실이 발생했을 때 대비책을 제공하기 위함입니다.(데이터 손실이 발생할 경우 RDD는 데이터를 복구시킬 수 있습니다) 데이터 흐름은 데이터 손실에 대한 다른 방어책으로 데이터 복제가 아닌 다른 방..