-
Data Engineering
[Apache Spark] 로컬 환경에서 Apache Spark 설치하기
로컬 환경에서 단일 클러스터로 Apache Spark를 설치하기 위해서는 1. JDK 설치 2. Python 설치 3. Apache Spark 설치 4. Hadoop Winutil 설치 5. 시스템 환경변수 설정 이렇게 총 5단계를 거쳐야 한다. 1. JDK 설치 Apache Spark는 Scala로 구현되어 있고 JVM 위에서 동작하기 때문에 Java를 먼저 설치해주어야 한다. 본인의 경우, 원래 Java 17 환경이 세팅되어 있었는데 version 때문인지 Spark 실행이 되지 않아 11.0.18로 재설치 해주었다. Download the Latest Java LTS Free Subscribe to Java SE and get the most comprehensive Java support avai..
-
CS
[python] time.sleep을 잘 써야하는 이유
오늘은 파이썬에서 많이 쓰는 time.sleep에 대해서 알아보려고 한다이유는.. 회사에서 내가 저걸 막 쓰다가 코드를 다시 짰기 때문에.. ㅎㅎ 우선구현 상황은 이랬다이렇게 deque 내에 데이터들이 담겨있고, 각 데이터에는 timestamp가 존재한다이 데이터들을 rabbitmq에 각 timestamp 간격에 맞춰서 쏴줘야 하는데, 이걸 구현하기 위해서 나는 데이터를 하나 쏜 후에 다음 데이터까지의 timestamp 간격만큼 time.sleep을 집어넣었다그런데 코드를 다 짜고 테스트를 해보니까 실제로 sleep한 시간이 timestamp 간의 간격보다길어서 데이터들 간의 싱크가 맞지 않는 것이 아닌가?회사에서 다루는 대부분의 데이터가 실시간 데이터였기에 데이터 싱크가 맞지 않는 문제는 허용할 수 있..
-
Data Engineering
[airflow] Docker에서 airflow 환경 설정 및 실행하기
이번 포스팅에서는 Docker-compose를 활용하여 apache airflow를 실행하는 방법을 다룬다. 본 포스팅은 airflow 공식 document의 "Running airflow in Docker"를 참고하였으며 하단의 링크를 통해서 해당 문서로 이동할 수 있다. Running Airflow in Docker — Airflow Documentation airflow.apache.org Before You Begin (필수 도구 설치) 설치 이전에 airflow 이미지를 실행하기 위한 Docker와 Docker-compose의 설치 or 업데이트가 필요하다. Install on Windows docs.docker.com 본인은 Windows의 환경에서 설치를 진행하였으므로 위 링크를 통해서 Do..
-
Data Engineering
[요리고 Airflow 도입기] 0. Airflow 사용을 결정한 이유
SW마에스트로 과정에서 본인은 AI 및 데이터 파트를 담당하여 "요리고" 모델에 대한 2개의 AI 모델 개발 및 데이터 파이프라인(이라고 부르지만 서빙이 전부)을 개발하였다. 소마가 끝난 후에 여러모로 데이터 파이프라인 부분에 아쉬움이 많이 남았고, 간단한 사이드 프로젝트로 airflow를 활용하여 데이터 파이프라인을 개선해보려고 한다. 기존 "요리고"의 시스템 구성은 다음과 같다. AI 모델의 경우, 서버비 절감을 위해서 Preprcessing, Inference, Postprocessing을 하나의 도커 이미지로 빌드하고 클라이언트의 요청이 있을 때마다 람다를 통해서 컨테이너를 생성하는 형태로 서빙을 진행했고 동작에는 무리가 없었으나 다음과 같은 문제점이 있었다. 1. Preprocessing이나 새..
-
알고리즘 & 자료구조
[백준] 2294 - 동전 2
보자마자 다이나믹 프로그래밍으로 풀어야겠구나 생각했던 문제이다. n = 3, k = 7, 동전은 2, 5, 7가 있다고 가정했을 때를 살펴보자. k 0 1 2 3 4 5 6 7 동전 개수 0 inf inf inf inf inf inf inf 2, 5, 7의 가치를 가진 동전으로는 k == 1을 만들 수 없으므로 계속 inf이다. k 0 1 2 3 4 5 6 7 동전 개수 0 inf 1 inf inf inf inf inf 2의 가치를 가진 동전으로 k == 2를 만들 수 있으므로, cache[2]는 cache[2 - 2] + 1과 cache[2] 중 작은 수인 cache[2 - 2] + 1 = cache[0] + 1 = 1이 된다. 이런 식으로 cache를 채워나가면, k 0 1 2 3 4 5 6 7 동전..