일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 추천시스템
- dataengineer
- mlops
- Data engineering
- DataEngineering
- 블로그
- hadoop
- recommendation system
- eks
- 하둡에코시스템
- 개발자
- 하둡
- Spark structured streaming
- 빅데이터플랫폼
- 빅데이터
- 데이터엔지니어
- AWS SageMaker
- kubernetes
- spark
- 개발자혜성
- redis bloom filter
- pyspark
- Terraform
- 클라우데라
- Python
- kafka
- BigData
- apache spark
- cloudera
- 데이터엔지니어링
- Today
- Total
목록전체 글 (63)
Hyesung Oh
이슈 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 ..

우리 회사가 CDN을 통해 글로벌 웹 컨텐츠를 제공하고 있다는 사실을 어렴풋이만 알고있었고, 이번에 호기심에 짬내서 살펴보며 공부한 내용을 정리해보았다. CDN CDN(콘텐츠 전송 네트워크)은 지리적으로 분산된 여러 개의 서버이다. 당연하게도 웹 콘텐츠를 사용자와 가까운 곳에서 전송함으로써 전송 속도를 높일 수 있기에 사용하는 모든 웹서비스 회사에서 사용하는 서비스이다. 전 세계 데이터센터는 파일 복사본을 임시로 저장하는 프로세스인 캐싱을 사용한다. 따라서 사용자는 가까운 서버를 통해 웹 활성화 디바이스 또는 브라우저에서 인터넷 콘텐츠에 빠르게 접속할 수 있다. 개인적으로 CDN을 ATM에 비유하는게 제일 맘에 든다. 여러 곳에 ATM을 설치해 놓으면 사용자가 중앙은행에 가지 않고도 ATM 기기에 보관된..