목록전체 글 (87)
엔지니어 블로그

1. Spark의 기본적인 아키텍처Spark은 기본적으로 3 부분으로 나누어 볼 수 있다.1.Driver2.Cluster Manager3.Executor1.DriverDirver는 Spark Application을 실행하는 역할이다. main 함수를 실행하고 SparkContext 객체를 생성하게 된다.2.Cluster ManagerDriver로 부터 실행계획을 전달 받아 필요한 만큼의 Worker를 생성하게 된다. YARN,K8S가 사용되며 Worker의 failover도 담당하게 된다.3. Executor다수의 Worker 노드에서 실행되는 프로세스로 Spark Driver가 할당한 작업을 수행하여 결과를 반환한다.2. Spark 작동 과정 1.Spark SumitDriver에게 작업 내용 전달 2...

1.Spark란 무엇인가Spark는 Data Engineering, Science, ML 등의 작업을 수행할 수 있는 Muilti-Language 엔진/프레임워크다. 단일 노드 및 cluster 형태로 대량의 컴퓨팅 자원을 사용할 수 있고, 대량의 데이터에 대해 분산퇸 컴퓨팅 처리를 신뢰성 있게 처리할 수 있다.2.Spark 주요 기능Batch/Streaming단일 모델과 프레임워크로 Batch,Streaming을 통합 개발 할 수 있다.SQL AnalyticsANSI SQL로 빠른 분산 처리 결과를 얻을 수 있다. 기존의 DW 솔루션보다 빠르게 결과를 얻을 수 있다.Data Sciencepetabyte-scale 데이터에 대해 Downsampling 없이도 EDA가 가능하다MLML 알고리즘 학습이 가능..

문제상황python 에서 postgresql을 사용하기 위해 패키지 설치 중 발생한 에러다.가만 읽어보면 pg_config executable not found. 가 보인다.시스템에 postgresql이 설치가 되지 않아 pg_config가 존재하지 않는 것으로 보인다. *pg_config는 psql의 정보가 있는 파일이다. 해결방법해결 방법은 시스템에 postgresql을 설치해주면 된다.나의 경우 ubuntu 환경이기 때문에 apt install postgresql 로 설치 후 해결했다.

풀이문제는 생각보다 간단하다. 다양한 종류의 괄호가 있고 이 괄호들이 문자열 s 안에 있을때 제대로 닫혀있는지 확인하면 되는 문제였다. 이전에 문제를 풀면서 너무 깊게 생각하면 자꾸 산으로 가는 경향이 있던 것을 떠올려 쉽게 쉽게 생각하기로 했다. 우선 각각의 괄호 값을 매핑한 dict를 생성한 후 s 의 값을 하나씩 list에 담아가면서 닫혀있는지 확인하는 식으로 진행하는 것으로 방향을 잡았다. 코드class Solution: def isValid(self, s: str) -> bool: stack = [] str_dict = {'{':'}','[':']','(':')'} for str in s: if str in str_dict.value..

아키텍처가 나온 후 인프라 구성에 들어갔다. 이전 글에 적어 둔 것처럼 k3s위에 airflow를 올려서 사용 할 예정이다.k3s의 설치는 아주 간단하다. 내부적으로 설정을 잡아 줄 일이 있다면 복잡해지지만, 단순히 설치만 하고 사용 할 것이라면 설치 스크립트 하나로 설치가 가능하다. Executor vs PodOperatorkubernetes에 airflow를 구성할 때 2가지 방식을 고려해 볼 수 있다. 제목에 있는 것 처럼 KubernetesExecutor와 KubernetesPodOperator를 사용하는 것이다. 두 방식의 차이는 결국 executor와 operator의 차이다. Executor는 task의 실행 방법을 결정한다. 대표적인 설정은 Celery,Local,Kubernetes등이 있..

최근 데이터 엔지니어링에 대해 다시 공부하고있다. 지금까지 공부한 내용들을 바탕으로 하나의 작은 프로젝트를 해보려고 한다. 그리고 프로젝트가 아닌, 프로젝트 진행 과정에서 나의 작업과 활동을 중심으로 글을 써 내려갈 생각이다. 진행기간2025년 2월 10일 ~ 2025년 2월 17일(예상) 프로젝트 목표Data Pipeline 구축본 프로젝트를 진행하는 목표는 지금까지 공부한 데이터 엔지니어링 생애 주기를 구현해보면서 실제 기술들이 어떤 상황에서 왜 사용되는지 직접 확인해보는 것이다. Infra 구축데이터 파이프라인이 구성 될 인프라 부터 구축 하는 것이 목표다. 프로젝트를 진행하며 파이프라인/인프라 구축 목표를 잡았다. 구축을 통해 나의 기술적인 지식들을 향상시키고 점검 할 수 있을 것이며 장애 대응 ..

풀이이 문제는 s가 t에 속하는지 판별하는 문제다. 단순히 속하는지 여부만 확인하는 것이 아니고, s의 문자 배열 순서가 t에서도 동일해야한다. 무턱대고 t에 속한 s의 문자들을 지웠다가 실패를 맛봤다.two pointer를 사용하기로 했다. i와 j를 두고 s[i] 가 t[j] 와 같다면 list에 추가한 후 s와 동일한지 확인하도록 구성했다. 코드class Solution: def isSubsequence(self, s: str, t: str) -> bool: i = 0 ans = [] for j in range(len(t)): if i >= len(s): break if s[i] == t[j..

풀이기존에 for문을 중첩해서 사용하는 방법으로 문제를 풀었다. 정답은 됐지만 상당히 속도가 느린 정답이 되어 효율적인 방법을 고민해보았고, hash table을 사용하여 새롭게 문제를 풀었다. 물론 아이디어는 떠올려냈지만 구현은 솔루션을 살-짝 컨닝했다 ㅎ 코드class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: hash_dict = {} for i,num in enumerate(nums): if target - num in hash_dict: return [i,hash_dict[target-num]] hash_dict[nu..