[번역글] Spark Streaming의 내부

여는 글

최근 재미나게 본 영화인 Ready Player One 의 한 컷으로 글을 시작합니다.

이 영화에서 처럼 저와 독자분들께서도 자신의 인생에서 보지 못한 것을 볼 수있는 통찰력을 갖게 되기를 희망합니다.

Internals of Spark Streaming

독서 시간 : 3분

| 발췌...

글의 제목에서 알 수 있듯이, 이 글은 Spark Streaming 입문서가 아닙니다. 솔직히 이 글은 Spark 및 Spark Streaming에서 이미 확립 된 지식 기반을 강화하고자 하는 독자를 대상으로 작성되었습니다. 저는 또한 Spark Streaming의 내부 동작을 알지 못하는 많은 개발자들이 있는 것을 알았습니다. 이 개발자들은 'hello world'가 아닌, 프로덕션 시스템들을 위한 코드를 작성하고 있습니다. 잘못된 것은 아니지만 오픈 소스 프레임 워크의 내부 구조를 잘 알고 있다면 많은 부분에 우수한 디자인 및 성능 결정을 내릴 수 있다고 생각합니다.

그러나, 만약 당신이 Spark 뉴비라면, 이 글을 벽에 던지거나 저를 욕하지 마십시오.

여기, 당신이 시작하기에 좋은 문서들이 있습니다.

  1. Apache Spark programming guide 아직 기초가 없다면 이 문서로 이동합니다.
  2. Apache Spark streaming guide(v.1.2) 최상의 입문서 입니다. (latest)

당신은 이제 기초지식과 준비를 갖췄습니까? 그렇다면, 이 글을 읽으십시오. 우리는 Kafka에서 데이터를 읽고 그것을 처리하는 Spark Streaming 예제를 보여드릴 것 입니다.

1
2
3
4
5
6
7
8
9
10
11
12
import kafka.serializer.StringDecoder
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.kafka.KafkaUtils
val ssc = new StreamingContext(new SparkConf, Seconds(60))
// hostname:port for Kafka brokers, not Zookeeper
val kafkaParams = Map("metadata.broker.list" -> "localhost:9092,anotherhost:9092")
val topics = Set("sometopic", "anothertopic")
val stream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder]( ssc, kafkaParams, topics)
:
:
ssc.start();

저는 Spark Streaming Context를 시작하면 동작이 지정 된 일련의 이벤트를 표시하고 싶었습니다. 이 busy diagram 을 약간의 시간을 할애하여 순번에 따라 살펴보세요.

spark streaming busy diagram

상세 내용의 일부는 의도적으로 생략하였습니다.

  • Spark Standalone 디플로이먼트를 전제로 클러스터 매니저를 명시하지 않았습니다.
  • 스탭 4 후에, 블록 메타 데이터는 fault tolerant log에 기록됩니다.
  • 최근에 나온 direct kafka receiver는 WAL 또는 in-memory 블록 복제가 필요없이 사용할 수 있지만, 단순함을 위해 regular kafka receiver를 사용하기로 결정하였습니다.

| 더 살펴보기

  • Write-ahead logs (WALs) 는 특별한게 아닙니다. RDBMS가 오랫동안 사용하고 있는 저널의 멋진 이름입니다.
  • WAL이 구성되면 수신 된 모든 데이터가 동시에 WAL로 기록됩니다 - fault tolerant storage deployments (HDFS라고 가정) 및 전체 시스템의 수신 스트림 처리량에 따라서 영향을 받을 수 있습니다.
  • 신뢰할 수있는 리시버는 데이터가 WAL에 기록 된 후에 만 ACK를 받으며 메모리 내 복제를 해제하는 것이 안전합니다.
  • Spark Streaming 용 클러스터, fault tolerant storage 용 클러스터 및 클러스터 관리자를 함께 구성하세요 - Spark Streaming 데이터 파이프라인 에 대한 하드웨어 요구 사항은 예상보다 적지 않거나 뭔가 누락되었습니까?
  • 업그레이드 옵션 : graceful shutdown (옵션 사용가능), checkpoint, code를 업데이트하고 재수행.
  • 모니터링 옵션: StreamingListener의 onBatchSubmitted, OnBatchStarted 등의 이벤트를 사용하여 프로그래밍 방식으로 모니터링합니다.

| 글을 마치며

Spark 및 Spark Streaming 작업은 데이터 기반 (data-at-rest) 위에 작동합니다. 데이터 기반은 Spark에서 제공해야하는 기본 추상화인 RDD(또는 Dataframe)형태로 메모리에 저장됩니다. 프로세싱은 데이터쪽으로 전송됩니다.

ABOUT THE AUTHOR


dfa591fd60697ad0369d8b6d699259cd  RITHIVIRAJ DAMODARAN

I work at the interplay of technology, economics, and psychology. I am a climate action activist. I am trying to stop and reverse climate change using decentralization and emergent techniques like BlockChain. I am also into distributed data research and computational linguistics.


// 역자 소개

28468194_2011079945599297_5206148957827382702_n

Software Engineer 15년차 아재입니다.

인터파크에서 하둡3.0과 Spark기반의 빅데이터 분석 플랫폼 및 도서부문 추천 시스템의 구축과 운영을 담당하였습니다.

계속하여 데이터 엔지니어로서의 경험을 이어나가기 위하여, 다른 곳에서의 새로운 시작을 준비하고 있습니다.


Popit은 페이스북 댓글만 사용하고 있습니다. 페이스북 로그인 후 글을 보시면 댓글이 나타납니다.