목록분류 전체보기 (409)
이야기박스

오늘은 하둡 에코시스템에 대하여 간단하게 정리하는 글을 갖고, 앞으로 여유가 생길 때마다 하둡 구성원들을 하나씩 정리해서 포스팅하도록 하겠습니다. 하둡이란? 대용량 데이터를 여러 컴퓨터에 분산시켜 처리할 수 있는 자바 기반의 오픈 소스 프레임워크 2006년, 야후의 더그 커팅으로부터 비정형 빅데이터 처리를 위해 구글에서 발표한 GFS와 MapReduce 논문을 참조하여 개발되었으며, 이후 아파치 재단의 오픈 소스로 공개되었습니다. Hadoop Ecosystem ecosystem; 생태계. 상호작용하는 유기체들과 또 그들과 서로 영향을 주고받는 주변의 무생물 환경 하둡이 자바 기반의 분산처리 프레임워크라고 바로 위에서 말씀드렸죠. Hadoop Ecosystem이란 하둡을 구성하고 있는 수많은 하위 프로젝트..

요약 Subprocess에 *(Asterisk)를 사용하고 싶다면, Shell=True가 필요합니다. If shell is True, the specified command will be executed through the shell. This can be useful if you are using Python primarily for the enhanced control flow it offers over most system shells and still want convenient access to other shell features such as shell pipes, filename wildcards, environment variable expansion, and expansion of ~..

# 개요 프로그램에서의 laziness란? 게으른 프로그램? 일반적으로 생각되는 부정적인 의미의 게으름과 프로그램에서 말하는 `laziness`는 다릅니다. 정확하게 필요한 순간, "Smart"하게 동작하는 것! 그것을 프로그램에서의 `laziness`라 말합니다. Lazy initialization - Wikipedia In computer programming, lazy initialization is the tactic of delaying the creation of an object, the calculation of a value, or some other expensive process until the first time it is needed. It is a kind of lazy eva..

# 개요 Python3에서의 GIL(Global Interpreter Lock)이란 어떤 것인지, 그리고 이러한 환경에서 Thread, Process는 어떻게 사용해야 할지 이야기해보도록 하겠습니다. # Process & Thread [POSIX; 프로세스와 스레드]에 작성된 문서를 바탕으로 정리를 해보았습니다. Python Thread 영역은 CPython과 밀접한 연관이 있고, 프로세스와 스레드의 개념을 잘 설명해주어서 복습한다는 느낌으로 읽어보았습니다. `프로세스`란? 컴퓨터에서 연속적으로 실행되고 있는 프로그램, 즉 작업(Task)들을 일컷는 말. `스레드`란? 프로세스 내부에 실행되는 작은 작업 단위. 스레드는 프로세스의 `code`, `data`, `heap` 영역을 공유하고, `stack` ..

대용량 파일을 분할하려고 하는데, 통으로 읽어서 하려다 자꾸 OOM이 나서 스트림 처리 분할 로직을 만들어 봤습니다. 매번 자바만 하다가 파이썬을 하니 굉장히 재밌더라고요. 대학생 때로 돌아간 것 같고.. # 정책 스택 드라이버 코드를 참고해서 만들었고, 기본 동작 방식은 다음과 같습니다. 1. `block_size` 크기만큼 파일을 읽습니다. --> `block` 2. `block`에서 `marker`가 나올 때마다 해당 값들을 `rows`에 넣습니다. 3. `rows`가 특정 크기 이상되면 파일을 씁니다. # 코드 def split_file(): marker = '{delimiter}' partition_no = 0 max_row_cnt = 500000 block_size = 8192 encoding..

# 개요 Dataframe에 위대함을 깨우쳐 봅시다! 라는 게 이 챕터의 핵심입니다. 표현이 아주 거창하죠? 표현이야 어쨌든 굉장히 편리한 건 사실입니다. Dataframe은 스키마와 강력한 API를 제공하니까요. 스파크를 잘 사용하려면 논리적 계층(어플리케이션 계층)과 물리적 계층(하드웨어 계층)을 모두 잘 알아야 합니다. 여기서 Dataframe은 스파크의 논리적 계층을 대표한다고 보면 될 것 같습니다. RDD(Resilient Distributed Dataset)는 스파크의 초기 데이터셋입니다. 이 챕터에서 다루는 Dataframe은 RDD를 기반으로 구성되었습니다. 그리고 앞으로 Spark를 사용하면서 Dataframe과 Dataset, RDD를 끊임없이 다루게 됩니다. Dataframe, Dat..

# 개요 [Databricks 공식 문서; A Tale of Three Apache Spark APIs: RDDs vs DataFrames and Datasets]의 해석본입니다. 각종 오역이 난무할 수 있습니다. 위 글은 spark 2.2 이후의 내용을 다루고 있고 RDD, DataFrame, Datasets의 API 관점에서 작성되었습니다. 특히, spark 2.0에서 Dataframe과 Datasets이 통합되었기 때문에 이 두 API의 내용이 많습니다. 두 데이터 API를 통합한 이유는 Spark API를 간결하고 쉽게 하기 위해서 Structured Data 처리 방법을 하나로 제한하였기 때문입니다. 이렇게 하나의 구조화된 처리는 Spark의 높은 추상화를 제공하고 이는 다양한 언어에서 Spar..

오래전 타이틀만 만들어둔 글을 이제야 완성시키네요. Gitlab 사용자 그리고 CI/CD에 관심 있으신 분들께 도움이 될 수 있으면 합니다. # CI/CD CI(Continuous Integration), 지속적인 통합은 애플리케이션에 대한 새로운 코드와 같은 변경사항이 일어났을 때, 정기적으로 테스트, 빌드 과정을 거쳐 공유 리퍼지토리에 통합되는 과정을 의미합니다. 다수의 개발자가 같은 시기에 작업을 하여 발생할 수 있는 충돌을 해결하는데 도움을 줍니다. CD(Continuous Delivery/Deployment), 지속적인 제공/배포는 CI 과정을 거친 애플리케이션을 리퍼지토리에 자동 업로드 또는 서비스 환경까지 바로 배포하는 것을 의미합니다. ## Gitlab CI/CD Gitlab은 on-pre..