data engineering 93

pyspark read mongodb, mysql

이전에 이거 관련해서 글을 썼었는데.. 너무 뒤죽박죽한 글 구성 + 잘 모르는데 여기저기서 이상하게 갖다붙힘 + 버전이 낮아짐에 따라 쓸모 없어진 글이 되버려서 이전 글은 삭제하고 다시 좀 다듬어서 정리합니다. 현재 쓰고있는 spark 3 버전 초반 기준입니다. 1. mongodb 공식 api : https://docs.mongodb.com/spark-connector/current/python-api/ 몽고디비에서 데이터를 읽는 예시를 예로 듦. https://docs.mongodb.com/spark-connector/current/python/read-from-mongodb/ 공식 홈페이지에 코드 예제가 있는데.. pipeline = "{'$match': {'type': 'apple'}}" df = ..

data engineering 2021.12.28

prometheus + grafana getting started(k8s node monitoring)

모니터링을 위해 설치했던 prometheus와 grafana를 가볍게 재정리합니다. 관리하는 k8s의 노드 리소스 모니터링을 진작 만들었어야 했는데 다른거 하느라 못하다가 시간이 남아서 이번에 추가했다. 모니터링은 prometheus + grafana로 하기로 했다. 1. Prometheus 먼저 prometheus의 아키텍쳐에 대해 알아보자면 https://blog.outsider.ne.kr/1254 요 글이 파악하기에 가장 설명이 잘되어있었다. https://prometheus.io/docs/introduction/overview/ prometheus는 크게 Exporter, Push gateway, Server, Alert manager로 나눌수 있다. - Exporter는 모니터링 대상의 메트릭 ..

data engineering 2021.11.08

mysql simple dump process

1. 걸릴 시간을 대략적으로 체크해보기 위해 테이블의 크기를 확인한다. 참조 : https://stackoverflow.com/questions/9620198/how-to-get-the-sizes-of-the-tables-of-a-mysql-database 아래 쿼리를 돌려본다. 테이블의 크기가 어느정도 큰 경우로 생각해서 gb단위로 출력해본다. mysql> select table_name, round(((data_length + index_length) / 1024 / 1024 / 1024), 2) `size (gb)` \ -> from information_schema.TABLES WHERE TABLE_SCHEMA = "{내 디비}"; +-----------------------------------..

data engineering 2021.11.04

customizing spark helm chart

이번에 쓸 글은 spark자체를 커스터마이징 한다기보다 삽질과, bitnami spark helm chart를 구성하는 것들을 살펴보는데 중점을 둔 글입니다. 전에 쓴글 중에 https://qkqhxla1.tistory.com/1164?category=698045 에서 스파크에서도 airflow와 python 세팅이 동일해야 하는 이유를 적었었다.(spark의 python udf 사용 불가능) 최근에 회사에서 이슈가 있어서 k8s 서버를 통째로 옮겨가야 할 일이 생겼다. 랜쳐도 새로 설치했고, 내부의 App들을 옮기는 중인데 spark를 옮기던 도중 지금이 spark에 airflow와 같은 python 버전을 적용해야 할 적기라고 생각해서 세팅한다. 우선 내부의 파이썬 버전을 바꾸기 위해서는 기본적으로 ..

data engineering 2021.10.25

redash, +kibana와 비교

최근에 새로 들어오신 분에게서 redash라는걸 알게되었다. redash는 kibana나 grafana처럼 데이터 시각화 툴이다. 나는 주로 키바나를 사용하는데, 키바나보다 사용법은 훨씬 직관적이고 쉬웠다. 다만 구조가 다르고, 장단점이 확연히 존재하였다. redash를 가볍게 사용하고 느낀점을 정리한다. 일단 redash tutorial링크 : https://redash.io/help/user-guide/getting-started 키바나의 시각화 과정을 가볍게 그리면 아래와 같다. 가볍게 이런식이다. DB에서 파이썬이나 자바로 내가 원하는 형태로 데이터를 가공해서 es에 저장할수 있고, 이 1차적으로 가공된 데이터를 기반으로 2차적으로 가공을 해서 키바나에서 시각화를 할 수 있다. redash의 동작..

data engineering 2021.10.16

pyspark when does python used in spark 'worker'

apache spark를 쓰는데 리모트 환경에서 submit하는 환경이면 주의해야할게 상당히 많았다. 예로 1. spark submit하는곳과 spark server의 버전이 같아야 한다. 메이저 버전이 같으면 호환되는 경우도 있는데 호환 안되는 경우도 많다.. 2. spark submit을 리모트 서버의 도커에서 하는 경우 네트워크를 호스트와 동일하게 해주거나, 도커의 포트 설정을 추가로 해줘야 한다. 이전글 : https://qkqhxla1.tistory.com/1138 등이 있었다. 위의 방법들이 그닥 선호되는 방법은 아니어서 최근에는 일반적인 방법으로 사용해보려고 airflow를 세팅해서 그 안에 스파크를 submit용으로 설치해서 리모트 스파크 서버에 호출해서 쓰는 방법으로 사용하고 있다. 그리..

data engineering 2021.10.14

about self signed certificate(ssc), apply my ssc to rke

인증서에 대해 아는 지식이 거의 없어서.. 이번에 self signed certificate를 만들면서 알게된 내용을 정리함. 여기저기 찾아보고 정리하긴 했는데 확실하지 않은 정보가 좀 있어서 틀린부분 있으면 지적해주시면 정말 감사하겠음.. 읽을거리(개념정리용) : https://m.blog.naver.com/alice_k106/221468341565 대부분의 내용 참조함.(실습용) : https://www.lesstif.com/system-admin/openssl-root-ca-ssl-6979614.html 추가 읽을 거리(영어 버전) : https://phoenixnap.com/kb/openssl-tutorial-ssl-certificates-private-keys-csrs 일단은 개념정리를 먼저 하..

data engineering 2021.10.09

pyspark Cannot cast DOCUMENT into a NullType 관련.

pyspark로 몽고에서 컬렉션을 읽어와 잡을 돌리고 있다. 몽고에서 컬렉션을 읽어와서 title이라는 필드에서 \t,\r,\n을 제거하고 이후의 프로세싱을 하기 위한 작업이다. ....... df = self.spark.read.format("com.mongodb.spark.sql.DefaultSource") \ .option("spark.mongodb.input.partitioner", "MongoSamplePartitioner") \ .option("spark.mongodb.input.partitionerOptions.partitionKey", "_id") \ .option("spark.mongodb.input.partitionerOptions.partitionSizeMB", 128) \ .opti..

data engineering 2021.09.20

airflow Kubernetes Executor, how helm values.yaml works

바로 이전글(https://qkqhxla1.tistory.com/1159) 에서는 kubernetes에서 helm을 사용해 airflow를 구성하는데 초점을 두었었다. 그런데 내가 kubernetes와 helm에 익숙하지 않아서 가장 쉽고 익숙한 airflow를 CeleryExecutor로 구성했었다. airflow-worker에 spark를 통째로 올려놓고, docker-in-docker로 docker를 마운트해놓은다음 대부분의 배치 잡은 DockerOperator로 실행하고, spark잡을 실행할 때는 airflow-worker내에 설치된 스파크를 직접 호출해서 사용한다. 간단한 구성도이다. CeleryExecutor이 기본 설정으로 되어있기도 하고 구성도 쉬워서 이렇게 만들었었는데, 구성하고 이것저..

data engineering 2021.09.05

customizing helm chart (bitnami/airflow)

이전에 다른 제목으로 비슷한 글을 쓴적이 있는데 지금 보니까 정말 별다른 영양가가 없는 글이었다. 그래서 이전 글은 지워버리고 이번에 새로 얻은 지식까지 합쳐서 다시 정리한다. 이전에도 적은것같지만 bitnami라는 회사가 있는데 오픈소스로 helm chart를 상당히 많이 만들었고, 상당히 자주 업데이트해주면서 종류도 많고 완성도도 높아서 여기서 주로 가져다가 app을 만들어서 쓴다. k8s와 helm자체에 익숙하지 않았기에 여태까지는 기본으로 제공해주는 기능만 썼는데 더 필요한 기능이 있어도 수정할줄을 모르고.. 이러다보니 반쪽짜리 지식이 되버렸다. 빡쳐서 주말동안 커스터마이징을 하기 위해 공부와 삽질하고, 얻은 지식을 정리한다. 우선 목적을 적자면 airflow helm chart를 설치해서, ai..

data engineering 2021.08.19

haproxy tutorial (basic loadbalancing example)

haproxy에서 라운드로빈으로 로드밸런싱하는 예제를 올린다. 추가적으로 커스터마이징같은거는 한번 돌아가는걸 확인하면 이것저것 해보면서 테스트가 가능하기에 올리지 않는다. haproxy란? : https://leffept.tistory.com/309에 잘 설명되어있다. 몇가지만 가져왔다. 1. HAProxy는 기존의 하드웨어 스위치를 대체하는 소프트웨어 로드 밸런서로, 네트워크 스위치에서 제공하는 L4, L7 기능 및 로드 밸런서 기능을 제공한다. 설치가 쉽고 빠르기에 서비스 이중화(HA- High Availability)를 구성하는데 주로 사용한다. 2. HAProxy는 기본적으로 reverse proxy 형태로 동작한다. (reverse proxy는 서버로 들어오는 요청을 대신 받아서 서버에 전달하고..

data engineering 2021.07.12

setting k8s using rke + aws ec2

예전에 https://qkqhxla1.tistory.com/1026 에서 rke(rancher kubernetes engine)환경에서 aws cluster를 추가하는 글을 썼었는데 처음부터 만드는 글이 아니라 단순하게 클러스터 추가와 aws 설정에 초점이 맞추어져있었다. 이번에는 처음에 구성하는 글을 적으려고 한다. 근데 aws를 사용하는데 eks가 아니라 단순히 여러대 있는 서버에 설치하듯이 ec2 ubuntu에 세팅할 예정이다. eks로 세팅하는건 아직 잘 몰라서 익숙한 방법인 이 방법으로 세팅한다. 아마 나중에 eks로 세팅할 일이 있으면 다시 글을 적을것 같다. 왠만해서는 처음부터 다시 다 세팅할 일이 없는데.... 인증서 관련 장애로 rancher ui가 다 날라가버렸다. 어떻게든 살리려 노력..

data engineering 2021.06.23

python create parquet format for hive, map type column.

1. make parquet file spark를 사용하는 경우 dataframe.write.parquet처럼 간편하게 하면 되니 패스하고, raw python의 경우는 아래처럼 pandas를 사용해서 pandas dataframe으로 만든다음 parquet로 쓴다. https://www.mikulskibartosz.name/how-to-write-parquet-file-in-python/를 참고한다. pandas + pyarrow조합으로 아래처럼 리스트로 잘 구성해준다. import pandas as pd import pyarrow as pa import pyarrow.parquet as pq column_name = ['title', 'age', 'name', 'score'] datalist = [[..

data engineering 2021.06.09

spark udf

udf(user define function) in spark 초간단히 정리... parquet에서 데이터를 읽어서 dataframe으로 작업을 좀 하고 mysql로 insert를 하는데 필드에 이모찌가 포함이 되어있어서 mysql로 삽입중 에러가 난다. dataframe의 특정 필드에서 이모찌를 지우는 작업을 해주었다. pyspark. https://spark.apache.org/docs/3.0.1/api/python/pyspark.sql.html#pyspark.sql.functions.udf from pyspark.sql import SparkSession from pyspark.sql.functions import udf from pyspark.sql.types import StringType im..

data engineering 2021.05.30

spark + scala mongo to mysql 8+(jdbc), 궁금증 몇개

공부용으로 간단하게 만든 코드를 올린다. 코드를 짜면서 어떤걸 유의해야 되었는지 등을 더 적는다. 제목 그대로 몽고에서 데이터를 가져와서 가공했다고 가정하고, jdbc를 사용해서 mysql(8+버전)으로 삽입하는 예제이다. scalaApp2.scala import org.apache.spark.sql.SparkSession import org.apache.spark.sql.SaveMode import java.util.Properties object scalaApp2 { def main(args: Array[String]): Unit = { val spark = SparkSession.builder.appName("get data").getOrCreate() val (mongo_user, mongo_pa..

data engineering 2021.05.17

spark + scala 세팅.

spark를 공부하면서 scala라는 언어 자체를 깊게 파지는 않더라도 알아둘 필요가 있어서 정리해놓는다. 내 기준으로 이해하기 쉽게 정리해놓은거라서 다른 사람들은 환경이 다를 수 있음. 환경은 spark 3.0.1 + scala 2.12로 하려고 한다. 사실 저번글 qkqhxla1.tistory.com/1143?category=698045 에서 스파크 스트리밍을 가볍게 만지면서 pyspark로 가벼운 예제 코드도 아래에 더 추가하려고 삽질했었다. 그런데 글 끝에 적었듯이 스파크 스트리밍은 아직 pyspark가 지원 안하는게 많다. 예로 mongo로 스트리밍으로 쓰는것도 scala만 지원한다. 데이터 처리를 진짜 끝까지 하려면 스칼라가 그래도 필요하다는 생각에 공부겸 + 업무와 연관해서 조금씩 정리하려고..

data engineering 2021.05.08

spark streaming(dstream, structured streaming) 정리 + 삽질

spark streaming 에 대해 읽고 간단히 정리한다. spark streaming에는 dstream과 structured streaming의 두가지가 있다. 1. dstream (spark.apache.org/docs/latest/streaming-programming-guide.html#input-dstreams-and-receivers) dstream의 input으로는 파일스트림, 소켓 연결, 카프카로의 입력이 기본적으로 제공된다. custom receiver를 구현할 수도 있는데 scala나 java를 사용해 구현해야 한다. spark.apache.org/docs/latest/streaming-custom-receivers.html 흐름을 파악하기 위해 소켓 연결 워드카운트 예제를 가볍게 정..

data engineering 2021.05.06

kafka관련 좋은글 링크

글 대부분을 유용한 팁을 적어주시고, 필요한 것 위주로 이해하기 쉽게 적어주심. 몇년전 글이지만 여러번 읽어볼것 같다. 카프카 운영자가 말하는 처음 접하는 카프카 : www.popit.kr/kafka-%EC%9A%B4%EC%98%81%EC%9E%90%EA%B0%80-%EB%A7%90%ED%95%98%EB%8A%94-%EC%B2%98%EC%9D%8C-%EC%A0%91%ED%95%98%EB%8A%94-kafka/ 카프카 운영자가 말하는 카프카 컨슈밍 그룹 : www.popit.kr/kafka-consumer-group/ 카프카 설치시 가장 중요한 config : www.popit.kr/%ec%b9%b4%ed%94%84%ec%b9%b4-%ec%84%a4%ec%b9%98-%ec%8b%9c-%ea%b0%80%ec..

data engineering 2021.05.03

Spark Architecture, Job exectution flow

www.edureka.co/blog/spark-architecture/#:~:text=Scala%20and%20Python.-,Spark%20Architecture%20Overview,Resilient%20Distributed%20Dataset%20(RDD) 에서 필요한 정보만 가져다가 정리합니다. 바로 앞 글처럼 스파크가 어떻게 동작하는지는 알아두고싶어서 정리합니다. Spark Architecture Overview 아파치 스파크는 모든 컴포넌트와 레이어가 느슨하게 결합된, 구조적으로 잘 정의된 아키텍쳐이며, 다양한 라이브러리가 통합되어 있습니다. 스파크 아키텍쳐는 두가지 개념을 기반으로 만들어졌습니다. Resilient Distributed Dataset(RDD) Directed Acyclic Gra..

data engineering 2021.04.17

Hive Architecture, Job exectution flow

www.guru99.com/introduction-hive.html 에서 가져옴. 자주 사용하는 하이브(apache hive)가 어떻게 동작하는지는 알아두고 싶어서 필요한 부분만 번역해놓습니다. Hive Architecture. 하이브는 3개의 코어 파트를 유지합니다. 1. Hive Clients 2. Hive Services 3. Hive Storage and Computing Hive Clients 하이브는 여러 타입의 어플리케이션들과 통신하기 위해 여러가지의 드라이버를 제공합니다. 예로 Thrift기반의 어플리케이션은 Thrift 클라이언트를 통신에 사용합니다. 자바 기반의 어플리케이션은 JDBC 드라이버를 사용할 것이고, 그 외의 다른 타입은 전부 ODBC 드라이버를 사용합니다. 이 클라이언트와 ..

data engineering 2021.04.11

spark installation using helm, spark-submit docker

앞의 글에서 계속 언급을 했는데 우리 팀 자체적으로 쿠버네티스 서버가 있다. 근데 쿠버네티스는 순수하게 cli로만 사용하면 러닝커브가 커서 rancher라는 gui를 설치해서 쓴다고 언급했었다. App설치도 간편하다. qkqhxla1.tistory.com/1105 에서 언급한것처럼 helm chart를 추가해주고(bitnami만 추가해주면 왠만해서 다 있다..) qkqhxla1.tistory.com/1133 에서 언급했듯이 클릭만 하면 airflow같은 앱이 간단하게 만들어진다. 그런데 spark chart현 최신버전인 5.4.0을 설치해보면 제대로 되지 않았다. 앱을 지우고 재설치해도 계속 뜨고 버전을 조금 낮춰봐도 에러가 뜬다. 구글링을 몇일동안 죽어라 해도 원인을 찾을수 없어서 포기했다. chart..

data engineering 2021.04.06

parquet vs orc vs avro (big data file format )

1. www.datanami.com/2018/05/16/big-data-file-formats-demystified/ 공통점. 3개 타입은 전부 하둡에 저장하는데에 최적화되어있다. orc, parquet, avro 3개 전부 기계가 읽을수 있는 바이너리 포맷이다. orc, parquet, avro는 여러개의 디스크로 나뉘어질수 있으며 이 특징으로 인해 확장성과 동시처리가 가능해진다. 반면에 json이나 xml은 나뉘어서 저장이 불가능하며, 그로 인해 확장성과 동시성에 제한이 있다. 3개 포맷 모두 스키마를 파일이 가지고 있어서 다른곳으로 옮겨서 처리하는게 가능하다. 차이점. orc, avro, parquet의 가장 큰 차이점은 데이터를 어떻게 저장하느냐이다. parquet과 orc는 데이터를 column..

data engineering 2021.03.25

elastic kibana basic visualization

kibana에 대해서는 qkqhxla1.tistory.com/1024 에서 정리를 가볍게 했었는데... 저 글에서도 적었지만 겨우 한 글에 너무 전반적인 내용을 다 적으려고 하다가 이도 저도 아닌 글이 되버렸다. 이번에는 실제로 사용하는 데이터를 이용하여 가장 헷갈리는 부분인 키바나 gui를 이용해 시각화하는 부분만 다룰 예정이다.키바나 gui를 사용해서도 만들 수 있는 그래프가 상당히 많은데, 그중에 많이 사용하는, 간단한 패턴만 몇개 적는다. 다른 복잡한 작업들도 할수 있을건데 내 입장에서는 대충 아래 패턴정도로 키바나 파악이 끝나면 대충 이리저리 만져서 만들어낼 수 있다고 생각한다. '이렇게 넣으면 이렇게 그려지겠지' 감을 잡는게 가장 어려웠다. 1. 실시간 데이터의 카운트를 그래프로 모니터링하는 ..

data engineering 2021.03.03

git push - jenkins - docker build자동화, 간단한 카운터 구현

이미 구글에 jenkins docker build and publish, jenkins docker 배포 등으로 검색해보면 많은 좋은 한글 자료가 있다. https://medium.com/hgmin/jenkins-github-webhook-3dc13efd2437 이글이 가장 도움 잘 됐고 현재 한 작업이랑 큰 차이도 없음. 현재 도커 이미지 만드는 프로세스를 예전에 만들었었는데.. 지식이 많이 없기도 했고 그땐 젠킨스를 안 쓰기도 했고 해서 도커 이미지 만드는 프로세스가 복잡하다. 1. 리모트 깃헙 서버에 푸시해서 소스코드를 저장해놓음. 2. 푸시한 소스를 로컬 깃에서 pull해서 최신 버전으로 업데이트. 3. 2번에서 pull한 최신 소스를 참조해서 도커 이미지를 로컬에서 직접 빌드. 인데 매번 git..

data engineering 2021.01.24

ansible playbook을 사용한 간단한 흐름 이해

개념 : https://kim-dragon.tistory.com/13 참고 블로그 : https://blog.naver.com/alice_k106/221333208746 guide : https://docs.ansible.com/ansible/latest/user_guide/index.html playbook guide 좋은 블로그 : https://moonstrike.github.io/ansible/2016/09/22/Ansible-Playbooks.html ansible playbook에 대해서만 튜토리얼 형식으로 간단하게 다시 정리합니다. 튜토리얼이나 블로그를 많이 봤는데 일단 한번 동작하는걸 확인하고 모르는게 있으면 구글링으로 확장해서 찾아나가는 저로써는 뭔가 이해하기가 쉽지가 않더군요. ansi..

data engineering 2021.01.13

kafka consuming 기본 흐름제어 플로우

운영하는 시스템중에 카프카가 있는데 일부 데이터는 프로듀싱만 하고 다른곳에서는 컨슈밍만 한다. 현재 운영환경에서 하나의 토픽에 파티션이 9개로 나뉘어져있는데, 프로듀싱 시에는 파티션을 딱히 신경 쓰지 않아도 된다. 프로듀싱하면 알아서 나눠지기 때문이다. 근데 컨슈밍시에는 기본적으로 신경쓸게 더 많다. 중요한 데이터의 경우 토픽이 파티션으로 나뉘어져있으면 파티션별 어디까지 읽었는지에 대한 정보인 오프셋도 신경을 써야 한다. 일단 카프카에 데이터가 있는지는 아래의 카프카 콘솔로 컨슈밍해봐서 확인이 가능하다. ./kafka-console-consumer.sh --bootstrap-server 카프카서버:9092 --topic 토픽이름 --from-beginning 데이터 양이 적거나 중간에 데이터가 유실되어도..

data engineering 2020.12.28