brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Jun 17. 2018

Python: Spark-Kafka-Sql(1)

# DevOps, # Spark-Kafka-Streaming-SQL

Spark 에서 Python 을 이용한 개발은 자바, 스칼라 언어보다 속도면에서 조금 떨어질 수 있다.


RDD 개념에서 생각해보면, 자바 패키지를 이용한 데이터 프로세싱 과정에서 생기는 오버헤드 정도로 여길 수 있다.


하지만, 데이터프레임 개념으로 접근하면 이런 차이점(?)을 없앨 수 있다.

바로 spark-kafka-sql 을 사용하여 데이터를 가공하는 방법이다. 나도 pyspark 관련 서적을 읽으면서 이 부분을 알게 되었다.


이를 운영상태로 녹이기 위해서는 코딩이 어렵다거나 구성이 복잡하다라는 Excuse 는 더이상 문제로 삼지 못한다.


이유는! Spark, Kafka 가 자바기반으로 움직이고, Pyspark 를 쓰려고 하여도 Py4j 를 통해 자바 패키지를 사용하기 때문에이다. 즉, Dependencies 맞추는 부분이 가장 신경써야 할 부분이다.


Version Check 를 꼭 기록해 두어야 한다.

예를 들어서,


Spark 버젼은 2.3.1 / Kafka 버젼은 1.0.0 / Java 1.8 / Python 3.5.x / Scala 2.11.x 등등...

신경써야 할 부분이 굉장히 많다.


spark-sumit CLI 를 통해서 작성한 파이썬 파일을 실행시킨다.

이때, --packages 옵션에 자신의 버전에 맞는 spark-kafka 관련 패키지를 파라미터로 넘겨주어야 한다.


이를 해결하기 위해서 처음에는 많은 시행착오를 거쳤다.

이 글을 보는 사람은 부디 그런 시행착오에서 빨리 빠져 나와서 재미있는 프로그래밍을 했으면 좋겠다.


예를 들어,

내가 지금 spark-sql 을 통해서 streaming 서비스를 구현하려고 한다면,

${SPARK_HOME}/bin/spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.3.1

이라는 명령을 사용한다.


좀 더 자세히 보면,

spark-sql-kafka-0-10_2.11 에서 0-10 을 보면 카프카의 버젼을 나타낸다.

2.11 을 보면 스칼라 버젼을 나타낸다. 마지막 :2.3.1 은 지금 사용하는 스파크의 버젼을 뜻한다.


다은 예를 들어,

내가 지금 spark-streaming 을 통해서 데이터를 가공하려고 한다면,

${SPARK_HOME}/bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8-assembly_2.11:2.3.1

이라는 명령을 사용한다.


참고로 spark-streaming-kafka 는 스파크2 에서는 Deprecated 상태다.

그래서 0-8-assembly 라는 패키지를 사용한다. 뒤의 버젼은 동일하다.


함께 혼용해서 쓸 수 없다는 것은 직접 실행을 통해서 알게 되었다.


spark-sql 의 강력함을 보여주기에 글로써는 부족하다. SQL 을 조금이라도 사용해 보았다면, NoSQL 에서의 불편함에 기존의 RDBMS 를 추억(?)해 보았음직 하다.


spark-sql 은 이를 가능하게 해준다. RDBMS 에서 사용한 방식처럼 데이터를 select 하고 where 를 통해 필터를 주고, group, order 등등의 기능이 가능하다. JSON 데이터 위에서.


다음 글에서는 spark-sql 을 어떻게 실제 프로젝트에 접목하여 사용하는지 간단히 소개해 보려고 한다.

작가의 이전글 Python: Spark-Kafka-Dev
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari