본문 바로가기

전체 글

(55)
Spark dataframe 에서 중첩컬럼(nested column) 처리rename/drop/convert to map spark dataframe nested column rename/drop/convert to map Spark dataframe 에서 중첩컬럼(nested column) 처리 Spark Dataframe을 다루다보면 중첩컬럼(a.b 형식과 같은) 데이터를 다루는 경우가 있는데 이는 다른 컬럼과 달리 drop이나 rename이 간단하지는 않아서 여기저기서 찾은 내용을 정리해봅니다. SampleData 준비 val jsonData = sc.parallelize(List(""" {"id":1, "attributes": { "c0":100, "c1":200, "c2":300 } }""")) val logs1 = spark.read.json(jsonData) logs1.printSchema //결과 root |..
Spark Docker Image build on AWS using glue metastore for kubernetes Hive Accessible spark in AWS without EMR (using glue meta-store) emr을 통하면 쉽게 aws에서 spark 환경을 만들수 있지만, 독립된 ec2, 특히 docker/kubernetes 환경에서는 emr사용하지 않지만 glue metastore를 활용하는 spark 환경이 필요하기 때문에 이에 구성에 대해서 설명하도록 하겠습니다. emr hadoop에 필요한 jar를 만들 필요가 있기때문에 emr서버 한대는 필요합니다. Jar 파일 준비 준비해야할 jar파일은 spark관련한 jar와 hadoop/emr 관련한 jar가 있으며 spark 관련 jar $SPARK_HOME/jars (보통 /usr/lib/spark/jars) 에 있는 hadoop*.jar,..
커스텀 측정항목을 통한 쿠버네티스 오토스케일링(custom metrics kuberntes autoscaling) - presto(2/2) - 적용 presto에서 어떤항목을 수집할지 결정 https://prestodb.io/blog/2019/08/19/memory-tracking https://github.com/prestodb/presto/wiki/Monitoring 대부분 guide에서는 FreeDistributedBytes 를 제안하긴 하지만 값이 너무 작아서(사용비율이 2%를 거의 넘지 않음. 아직 제가 잘 모르는 것일수 있습니다. 다른 분들은 수집해서 잘 써보시길 바랍니다), 최근15분 실행쿼리수를 사용해보기로 했습니다. prometheus-adapter https://github.com/DirectXMan12/k8s-prometheus-adapter prometheus metrics를 kubernetes의 custom metrics로 보..
커스텀 측정항목을 통한 쿠버네티스 오토스케일링(custom metrics kuberntes autoscaling) - presto(1/2) - 사전작업 왜? 기존에는 CPU, Memory기반에 HPA를 적용했었는데, presto에서 Memory 사용은 테이블 사용후에 반환되지가 않아서 계속 높고, CPU는 많이 필요로 하지 않는지 thresh-hold를 30%로 해도 query가 들어올때 잠시 늘어났다가 0%로 돌아가기 때문에 scale-out 되었다고 해도 다시 minimum resource로 돌아가기 때문에, 실제로 많이 사용하는 시간에도 scale-out된 효과를 보기가 어려워서 다른 적당한 metrics를 찾는 과정에서 custom metrics를 이용한 HPA를 찾아보게 되었습니다. 결론적으로는 HPA보다 Schuduler를 사용해, 시간대별로 resource를 지정하는 방식을 적용하기는 했지만 custom metrics수집에 대해서 적용해볼수..
kubernetes 에서 주기적 pod삭제 deployments/statefulset 등으로 실행한 pod를 주기적으로 restart 시켜줄 필요가 있을때 사용합니다. kubernetes 내부 기능인 cronjob을 이용해서 pod 삭제 api를 주기적으로 호출해서 pod를 삭제합니다. 필요한기술 kubernetes API(pod삭제관련) https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.16/#delete-pod-v1-core. DELETE /api/v1/namespaces/{namespace}/pods/{name} API 실행관련 auth, role(monitor namespace에서 실행하는것으로 script구성합니다. 우선 인증에서 사용할 Service Account를 만들..
apache hudi 소개 hudi 소개(간단함) hudi는 현재 apache incubator project로서 "big data에 스트림 처리를 제공하며, 기존 batch보다 나은 최신데이터를 제공한다" 라고 나와있습니다. 말이 좀 어려울수도 있는데 hudi에 이름에서 알수있듯이(Hadoop Upserts Deletes Incrementals), Hive에서 CUD(create update delete)가 가능하다는 말이며, 데이터엔지니어들이 어려움을 격었던 Hadoop환경에서의 데이터 변경에 대한 처리를 해결할 수 있을 뿐더러 실시간에 대한 요건도 담당할수 있을것으로 기대가 됩니다. 왜 hudi 인가? hudi 외에 대안은? emr 5.28.0 에서 hudi 적용을 발표 https://docs.aws.amazon.com/ko..
fluentd 를 활용해서 Kubernetes log s3에 직접 기록하기 Fluentd fluentd 는 open source 데이터(로그) 콜렉터로서 다양한 input, output 설정이 가능하며 kubernetes 에서도 많이 사용되는 log collect framework입니다. Kubernetes log는 각 node별 /var/log/containers 밑에 pod별로 생기기 때문에, node별로 fluentd 배포가 필요하며 따라서 k8s에 daemonSets 를 활용해서 배포하게 됩니다. 주로 나오는 use case는 tail(input) -> fluentd -> elasticSearch(output) 이며 기본예제로도 나와있어서 쉽게 따라할수 있습니다. fluentd 에서 aws access key로 kubernetes log 를 s3에 직접기록하기 개발(?)..
하나의 ELB 에서 여러개 Kubernetes 서비스 제공하기 AWS Kubernetes(EKS)에서 하나의 ELB로 여러개의 서비스 제공하는 방법을 나누어보기로 하겠습니다.(providing multiple kubernetes services with one ELB) EKS구성시 개발한 서비스를 외부/내부로 서비스를 하기위해서는 load balancer가 필요하게 되며, ingress-nginx를 사용하면 AWS에서도 ALB, ELB, NLB 의 load balancer(이하 LB)를 사용할수있게 됩니다. 가격이 그리 비싼건아니지만, 개발편의등의 목적으로 하나의 LB에 여러가지 서비스를 제공하고 싶은 경우가 있는데, nginx가 reverse-proxy 기능을 통해서 하나의 ip로 여러가지를 제공하는것 처럼 ingress-nginx 도 비슷한게 있지 않을까 하고 ..