일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 개발자
- 데이터엔지니어링
- 하둡에코시스템
- DataEngineering
- cloudera
- 빅데이터플랫폼
- 블로그
- Data engineering
- hadoop
- Python
- 빅데이터
- 개발자혜성
- Terraform
- pyspark
- scala
- IT블로그
- 클라우데라
- kafka
- spark
- AWS
- apache spark
- hdfs
- dataengineer
- 스파크
- eks
- 데이터엔지니어
- kubernetes
- 하둡
- BigData
- Spark structured streaming
- Today
- Total
목록분류 전체보기 (56)
Hyesung Oh
개요 현재 팀의 Machine Learning 파이프라인의 모델 학습 워크로드는 아래와 같은 컴포넌트들로 구성되어있습니다. 출처: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html model.train()를 entrypoint로 하는 pod pod node의 gpu resource allocation 및 container가 사용할 device config 정보를 kubelet에 등록하는 nvidia device plugin daemonset pod container runtime 및 runc prestart hook을 통해 container에서 사용할 수 있는 device를 설정해주는 nvidia cont..
이슈 AWS RDS mariadb -> AWS Aurora MySQL 3.0 으로 마이그레이션 이후, 특정 OLAP 쿼리에서 아래 에러가 발생하였습니다. java.sql.SQLException: The table '/rdsdbdata/tmp/#sql6f81_38f4982_2' is full 원인파악 Mysql 8.0에선 아래 조건이 만족될 때 내부적으로 임시 테이블을 생성합니다. https://dev.mysql.com/doc/refman/8.0/en/internal-temporary-tables.html Evaluation of [UNION]() statements, with some exceptions described later. Evaluation of some views, such those ..
개요 Spark에서는 JDBC api를 통해 접근할 수 있는 datasource(dbms)를 지원합니다. jdbc datasource를 사용하기 위해선 JDBC interface를 구현한 Driver class가 필요합니다. *현재 사용 중인 mysql-connector-java-8.0.23을 기준으로 작성했습니다. spark.read.jdbc option으로 driver class path를 아래와 같이 설정해주면 됩니다. driver class path: com.mysql.cj.jdbc.Driver # Read from MySQL Table df = spark.read \ .format("jdbc") \ .option("url", "jdbc:mysql://localhost:3306/emp") \ .o..
서론 배치성 Spark Job은 Airflow에서 trigger 하였지만 Streaming application은 이와 달리 클러스터를 상시 점유하고 있어 다음과 같은 요구사항을 가진다. 애플리케이션 배포, 상태를 선언적으로 관리할 수 있어야 한다. 하나 이상의 Kakfa Topic을 구독하는 애플리케이션(subscriber) 배포 시에 필요한 resource 정의 (코드)를 재활용할 수 있어야 한다. 개발자는 master에 merge 하면 코드는 자동으로 배포되어야 한다. 참고로 필자는 1을 만족하기 위해 ack-emrcontainers-controller를, 2를 위해 helm chart를, 3을 위해 argocd를 사용하였지만, 이는 각자 처한 상황에 맞게 다르게 가져갈 수 있다. 또한 아래 기술들..
서론 사내 인프라는 개발 환경별로 별도 AWS 계정으로 운영중이고, 만찬가지로 팀에서 운영중인 데이터 인프라 또한 별도 AWS 계정으로 분리되어있다. Datalake로 부르는 S3는 운영환경 계정에 존재하며, 이는 빅데이터 특성상 방대한 양의 데이터를 환경별로 관리하는데 드는 비용과 데이터 저장 비용을 고려했을 때 합리적인 선택지였다. 하지만 이로 인해 인프라적인 복잡도가 다소 올라가긴하였다. Batch, Streaming workload는 모두 EKS위에서 동작 중이지만, RDBS와 S3, Athena 등의 데이터 소스는 모두 운영환경에만 존재하기 때문이다. 이 과정에서의 문제 해결경험들을 정리해보려한다. 상황 이해 상황은 아래 그림과 같다. 그림에선 생략했지만 Application은 Data 환경의 ..
ADD, COPY The path must be inside the context of the build; you cannot ADD ../something /something, because the first step of a docker build is to send the context directory (and subdirectories) to the docker daemon. If is a directory, the entire contents of the directory are copied, including filesystem metadata.The directory itself is not copied, just its contents. ADD vs COPY COPY는 로컬 파일을 Con..
Python에서 async, await로 비동기 프로그래밍을 작성하다, 간혹 Node.js 쪽 코드 작성을 하다보면 매우 유사한점을 느껴 내부 작동방식도 유사한지 공부해보았다. 자세한 내용은 다루지 않겠지만 그래도 내가 이해한 내용의 핵심만 요약해보았다. Python은 generator를 이용해 corutine을 구현하여 비동기 시스템을 구현하였다. 그리고 코루틴 테스크간의 제어권 컨트롤의 중심에 event loop process가 있다. python의 stack이 heap 영역에 존재하는 언어 특성을 살린 케이스이다. Node.js는 event loop 역할은 유사하나, 좀 더 event driven 적인 접근이다. event들은 callback 함수가 return한 결과이고 이들을 관리하는 별도 st..
테스트 주도 개발을 통해 더 좋은 코드와 아키텍처를 만들어 나갈 수 있을까? 반은 맞고 반은 틀리다. 중요한 것은 테스트 그 자체가 아니라 내가 테스트를 하는 이유에 대해 끊임없이 질문하고 개선하는 활동에 있기에 반은 틀리다. TDD의 진짜 의의는 왜 테스트 하고있는지에 물음을 가지는 것에 있다고들 강조한다. Unit Testing vs Integration Testing vs Functional Testing Unit Test는 말그대로 하나의 단위를 테스트 하는 것이다. 아래에서 처럼 하나의 함수를 테스트 하는 것을 예를 들 수 있다. 주의할 것은, 단위란 정의하기 나름이다. 예를 들어, 하나의 함 수는 사실 두 개의 함수로 분리되는게 더 바람직 할 수 있다. def func(x): return x ..