데이터 엔지니어링(46)
-
[Apache Parquet] 공식 문서로 파케이 이해하기
개발 동기 우리는 어떤 하둡 에코시스템에도 사용할 수 있고 압축과 컬럼 기반 데이터 표현의 이점을 만들기 위해 Parquet를 개발했습니다. Parquet는 처음부터 중첩된(nested) 데이터 구조를 위해 개발되었으며, Dremel의 논문에 작성된 record shredding and assembly algorithm을 사용합니다. 우리는 이 접근 방식이 중첩된 name space를 단순하게 붙이는 것보다 좋다고 믿고 있습니다. https://github.com/julienledem/redelm/wiki/The-striping-and-assembly-algorithms-from-the-Dremel-paper Parquet는 효율적인 압축과 인코딩 체계를 지원하도록 개발되었습니다. 여러 프로젝트에서 데이..
2022.01.20 -
[Apache Thrift] 아파치 쓰리프트 간단하게 이해하기
개요 아파치 쓰리프트는 페이스북에서 서로 다른 언어간의 통신을 위하여 개발되었다. 원격 프로시저 호출(Remote Procedure Call)로 언어에 상관 없이 서로 통신할 수 있도록 도와준다. 예를 들면 PHP에서 작성한 기능을 파이썬과 Go언어에서 자유롭게 호출해서 사용할 수 있다. 단순히 하나의 함수 호출이 아니라, REST API 서버처럼 자유롭게 개발을 할 수 있다. thrift와 호환되는 언어들은 모두 비슷하지만 각자 다른 인터페이스 정의 규칙을 가지고 있다. 아파치 쓰리프트에서는 .thrift 파일에 변수의 타입과 이름 그리고 함수의 매개변수, 반환값과 예외 등의 정의를 하고, thrift를 사용하여 옵션으로 변환하려는 언어를 적어주면 .thrift 파일에 입력된 정의로 각 언어에 맞게 코..
2022.01.20 -
[🔥Spark] java.lang.AssertionError: assertion failed: Concurrent update to the log. Multiple streaming jobs detected 해결방법
에러 메세지 java.lang.AssertionError: assertion failed: Concurrent update to the log. Multiple streaming jobs detected for 53 at scala.Predef$.assert(Predef.scala:223) 원인 로그에 대한 동시 업데이트, 여러 스트리밍 작업이 발견되었습니다. 스파크 스트리밍에서 동일한 체크포인트를 사용하는 두 개의 싱크 작업(writeStream)이 동시에 실행되면 발생하는 문제이다. checkpointLocation을 다른 위치로 사용하면 해결할 수 있다. Zeppelin에서 코드를 실행하고 같은 스트리밍 스크립트를 사용할 때 오류가 발생할 수 있다. 기존 같은 location을 사용한다. 동시에 같..
2021.11.04 -
[🔥Spark] StreamingQueryException: Cannot find earliest offsets of Set(topic-name-0)
전체 에러 메세지 StreamingQueryException: Cannot find earliest offsets of Set(topic-name-0). Some data may have been missed. Some data may have been lost because they are not available in Kafka any more; either the data was aged out by Kafka or the topic may have been deleted before all the data in the topic was processed. If you don't want your streaming query to fail on such cases, set the source opt..
2021.11.02 -
[🔥Spark] 스파크 설정하는 방법(Spark Configuration, SparkConf)
About 세 가지 위치에서 스파크 설정을 할 수 있다. Spark properties: SparkConf 객체 사용, Java system properties 사용 val conf = new SparkConf() .setMaster("local[2]") .setAppName("CountingSheep") val sc = new SparkContext(conf) Environment variables: conf/spark-env.sh 환경 변수를 통하여 시스템별 설정 가능 # Options read when launching programs locally with # ./bin/run-example or ./bin/spark-submit # - HADOOP_CONF_DIR, to point Spark t..
2021.11.01 -
[🔥Spark] Spark Streaming + Kafka 연동하기
개요 카프카를 사용하는 경우 데이터를 가공해서 다시 카프카로 넣거나 다른 곳으로 보내는 등의 처리를 해줄 곳이 반드시 필요하다. Spark Streaming을 사용하면 문제를 쉽게 해결할 수 있다. 자체적으로 kafka에서 읽고 처리 후 kafka로 보내는 기능이 포함되어 있으며 Spark에서는 1.2버전부터 파이썬에서 Spark Streaming을 사용할 수 있게 되었다. Spark Streaming에는 DStreams라는 기능이 있고, 그 위에 DataFrame을 사용하여 더 쉽게 처리를 할 수 있는 Structed Streaming이 있다. 여기에서는 Structed Streaming을 사용하려고 한다. 방법 spark.readStream을 사용하여 카프카의 어떤 토픽에서 데이터를 가져올지 정한다...
2021.10.29