[번역글] Spark Streaming의 내부
여는 글
최근 재미나게 본 영화인 Ready Player One 의 한 컷으로 글을 시작합니다.
이 영화에서 처럼 저와 독자분들께서도 자신의 인생에서 보지 못한 것을 볼 수있는 통찰력을 갖게 되기를 희망합니다.
독서 시간 : 3분
| 발췌...
글의 제목에서 알 수 있듯이, 이 글은 Spark Streaming 입문서가 아닙니다. 솔직히 이 글은 Spark 및 Spark Streaming에서 이미 확립 된 지식 기반을 강화하고자 하는 독자를 대상으로 작성되었습니다. 저는 또한 Spark Streaming의 내부 동작을 알지 못하는 많은 개발자들이 있는 것을 알았습니다. 이 개발자들은 'hello world'가 아닌, 프로덕션 시스템들을 위한 코드를 작성하고 있습니다. 잘못된 것은 아니지만 오픈 소스 프레임 워크의 내부 구조를 잘 알고 있다면 많은 부분에 우수한 디자인 및 성능 결정을 내릴 수 있다고 생각합니다.
그러나, 만약 당신이 Spark 뉴비라면, 이 글을 벽에 던지거나 저를 욕하지 마십시오.
여기, 당신이 시작하기에 좋은 문서들이 있습니다.
- Apache Spark programming guide 아직 기초가 없다면 이 문서로 이동합니다.
- 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 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
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.
// 역자 소개
Software Engineer 15년차 아재입니다.
인터파크에서 하둡3.0과 Spark기반의 빅데이터 분석 플랫폼 및 도서부문 추천 시스템의 구축과 운영을 담당하였습니다.
계속하여 데이터 엔지니어로서의 경험을 이어나가기 위하여, 다른 곳에서의 새로운 시작을 준비하고 있습니다.