본문 바로가기

전체 글

(55)
spark on kubernetes vs EMR 도입배경 기존에 EMR을 사용해서 Data Mart 데이터 생성작업을 처리하고 있었는데 spark on kubernetes 를 도입해서 기존 batch를 모둔 전환했습니다. 2019년 말에 전환 했지만 장단점에 대해서 정리하고자 문서화 합니다. Spark on Kubernetes 관련 reference https://spark.apache.org/docs/latest/running-on-kubernetes.html 기존 local, yarn, mesos 등으로 resource관리하였는데 kubernetes를 resource manager로 대체하는 구조 실행 spark이 설치된 container에서 submit할수도 있지만, spark operator 설치로 API등으로 실행가능 https://githu..
Convert Pandas with MapType Value to Pyarrow Pandas MapType column을 pyarrow로 변환했을때 default 로 struct type으로 변환이되며 Hive 테이블을 동일하게 Map Type으로 설정하면 Hive에서 해당컬럼데이터를 못 읽음. 꼭 Map Type으로 변환하고 싶다면 다음과 같이 schema을 설정해서 파라메터로 추가하고 MapType 컬럼은 Tuple로 변환함 d = {'conditions': [{"b":"1","aa":"22"},{"1":"22"}]} df1 = pd.DataFrame(data=d) pyarrow.Table.from_pandas(df1, preserve_index=False) pyarrow.Table conditions: struct child 0, 1: string child 1, aa: str..
Pandas dataframe에 MapType Value 컬럼추가 d = {'col1': [1, 2], 'col2': [3, 4]} df = pd.DataFrame(data=d) df df["additional"] = {"aa":11,"bb":22} # map type value가 row수와 같으면 에러는 안나지만 원하는 MapType이 들어가지는 않고 df["additional"] = {"aa":11,"bb":22,"cc":33} # 에러남 df["additional"] = pd.Series([{"aa":11,"bb":22,"cc":33} for x in range(len(df.index))]) # works!!!
Jupyter Notebook & Spark on Kubernetes in AWS using glue metastore Jupyter Notebook 과 spark은 데이터 처리 분석을 위한 훌륭한 툴이며 이전부터 다양한 회사에서 서비스로 제공해왔습니다. Jupyter Notebook과 Apache Spark을 kubernetes를 이용해서 구성을 하게되면 자체적으로 독립된 resource를 가지고 개발할수 있을수 있어 해당 feature에 대해서 설치를 해보았습니다. Jupyter Notebook & Spark on Kubernetes in AWS using glue metastore Jupyter Notebook이 driver역할을 하면서 executor를 pod형태로 실행하는 개념입니다. Jupyter Notebook을 k8s에 설치는 https://github.com/jupyterhub/helm-chart 를 참조..
Data Platform 구축시 비용효율적/관리용이한 AWS Products Data Platform 을 구축하면서 경험한 AWS Products 에 대한 개인적인 의견입니다. 틀린 부분이 있을수 있습니다 S3 평가 : 가격은 저장비용 0.025$/GB/Month + Transfer 비용으로, 대용량 데이터를 저장하고 분석하는 경우에 아주 적은 금액은 아니지만 다른 서비스에 비해 저렴합니다. 신뢰도 99.999999999% 의 높은 신뢰도와 여러가지 다양한 기능의 Storage Class, 보안적용이 가능함 동시성 문제에 대해서는 물음표이지만, EMR/Presto/Athena/Redshift spectrum 등의 bigdata solution의 source가 되어 데이터플랫폼 구축에서 DataLake역할에 적합합니다. 추천 : 👍👍👍 EKS 평가 : Kubernetes 는 여러가..
Spark Dataframe에서 특정 컬럼이 없을경우 한 문장으로 컬럼 추가하기 How to add Spark Dataframe Column, when the column does not exist. spark dataframe 생성 후에 table로 변환 후 쿼리를 적용한다거나 할때 항상 들어오던 column 이 없을경우 오류가 발생할수 있습니다. 하나씩 추가하는것보다는 Column Sets와 fold를 사용해서 한꺼번에 처리하는 방법 소개합니다. dataframe이 df일경우, 누락될수 있는 컬럼List를 Set로 만들고 다음과 같이 적용합니다. (Set("column1","column2", "column3") -- df.columns.toSet).foldLeft(df)((df, col) => df.withColumn(col , lit("") ) ).createOrReplaceT..
apache hudi 적용해서 aws 에서 glue metastore 기반 테이블만들기 이전에 소개드린데로 apache hudi가 EMR에 적용이 되었고 예제는 https://aws.amazon.com/ko/blogs/korea/new-insert-update-delete-data-on-s3-with-amazon-emr-and-apache-hudi/에 잘 나와있습니다. 여기에 glue metastore 기반한 테이블 생성 및 unique 데이터 insert하는 방법에 대해서만 추가해서 설명해보도록 하겠으며 이 예제를 활용하게되면 운영데이터의 ODS 데이터 적재도 별다른 테이블작업 없이 가능해보입니다. Hive 테이블 생성 Hive(glue metastore)와 동기화하려면 HIVE_DATABASE_OPT_KEY 와 HIVE_SYNC_ENABLED_OPT_KEY 를 설정해줍니다. 예제가 되는..
hudi 실행에러 - HoodieException: uuid(Part -uuid) Caused by: org.apache.hudi.exception.HoodieException: uuid(Part -uuid) field not found in record. Acceptable fields were :[application, ....] hudi를 통해서 insert 할경우 위와같이 uuid가 없다는 에러가 있었는데, 이유는 RECORDKEY_FIELD_OPT_KEY option을 설정하지 않아서 입니다. RECORDKEY_FIELD_OPT_KEY parameter의 default 값이 "uuid" 컬럼인데 해당 parameter를 설정하지 않으니 default로 "uuid"를 찾고 그 컬럼도 없을경우 위와같은 에러를 발생시키게 됩니다.