SPARK_DAEMON_JAVA_OPTSSPARK_DAEMON_JAVA_OPTS는 Spark의 “데몬 프로세스(daemon processes)”에 적용될 JVM 옵션을 지정하는 환경 변수임.여기서 “데몬 프로세스”란 Spark Master, Spark Worker, Spark History Server 등과 같이 장기간 동작하면서 클러스터/작업을 관리하거나 모니터링하는 Spark의 백그라운드 프로세스를 말함.Spark Driver나 Executor 프로세스와는 별도로, Spark 클러스터 자체를 운영하기 위한 프로세스에 적용되는 설정이라는 점이 핵심임. SPARK_DAEMON_JAVA_OPTS의 역할1. Spark 마스터와 워커, 히스토리 서버 등에 공통적으로 적용Spark에는 Master, Worker..
파이썬으로 EMR 클러스터 생성AWS에서 EMR Spark 클러스터를 생성하는 가장 대표적인 방법은 boto3(AWS SDK for Python)를 사용하는 것임.이때, run_job_flow 메서드를 통해 EMR 클러스터를 손쉽게 생성할 수 있음.아래 예시는 기본적인 Spark 클러스터를 파이썬 코드로 구성하는 예시임. 사전 준비 사항1. AWS CLI 설정로컬 환경에서 AWS CLI를 설치하고, aws configure 명령어를 통해 자격 증명(AWS Access Key ID, Secret Access Key)과 기본 리전을 설정해야 함.또는, EC2 인스턴스 등에서 IAM Role을 통해 호출할 수도 있음.이 경우 별도의 키 설정이 필요 없음. 2. boto3 설치pip install boto3 3..
EMR의 유형별 노드AWS EMR(Amazon Elastic MapReduce) 클러스터는 다음 세 가지 유형의 노드로 구성됨. 1. 프라이머리 노드(Primary Node)2. 코어 노드(Core Node)3. 태스크 노드(Task Node) 여기서 각 노드는 Hadoop/Spark 등 다양한 빅데이터 프레임워크를 실행하는 데 필요한 역할을 분담함.클러스터 운영 및 확장/축소에도 중요한 영향을 미침. 프라이머리 노드 : 주요 역할1. 클러스터 전반 제어 및 코디네이션프라이머리 노드는 클러스터를 제어하고 관리하는 핵심 역할을 수행함.전통적인 용어로는 "마스터 노드(Master Node)"라고도 하며, 아래와 같은 주요 프로세스를 실행함. Hadoop YARN ResourceManager: 전체 클러스터에..
EMRAmazon EMR(Amazon Elastic MapReduce)는 AWS(Amazon Web Services) 상에서 대규모 데이터를 신속하고 경제적으로 처리하기 위한 분산 처리 플랫폼임.Apache Hadoop, Spark, Hive, HBase 등 다양한 오픈 소스 분석 엔진과 서비스를 실행할 수 있도록 관리형 클러스터를 제공하므로, 빅데이터 워크로드를 안정적으로 운영하고 민첩하게 확장할 수 있는 것이 특징임. 핵심 개념 및 아키텍처 : AWS EMR의 구성 요소1. 클러스터(Cluster)AWS EMR에서는 “클러스터”라는 단위로 데이터 처리를 수행함.클러스터는 하나의 마스터 노드(Master Node), 0개 이상의 코어 노드(Core Node), 0개 이상의 태스크 노드(Task Node..
파이썬의 GIL파이썬을 어느 정도 사용해 본 사람이라면 “GIL(Global Interpreter Lock)”이라는 용어를 한 번쯤은 들어 봄.GIL은 파이썬 개발 및 운영 환경에서 동시성(Concurrency) 이슈를 다룰 때 매우 중요한 요소로 자주 언급됨. GIL이란 무엇인지1. 정의GIL은 CPython(표준 파이썬 구현체)에서 동시에 여러 스레드가 바이트코드를 실행하지 못하도록 하는 '글로벌(전역) 락'임.즉, 인터프리터 자체에서 단 한 스레드만이 바이트코드(파이썬 코드가 바이트코드로 컴파일된 결과)를 실행하도록 보장하는 일종의 상호 배제(Mutual Exclusion) 장치임. 2. 의미여러 CPU 코어가 있는 멀티코어 환경에서, 동일한 프로세스 안에서 여러 파이썬 스레드를 실행하더라도 동시에..
파이썬의 런타임파이썬(Python)의 “런타임(Runtime)”은 파이썬 코드를 해석·실행하는 인터프리터(Interpreter) 및 그 주변 환경(메모리 관리, 객체 모델, 표준 라이브러리, 스레딩 및 병렬성 모델 등)을 통칭함.즉, 개발자가 작성한 .py 소스 코드가 실제로 어떻게 컴파일(바이트코드 변환)되고, 어떻게 실행(인터프리트)되며, 어떤 방식으로 메모리와 객체를 관리하는지에 관한 모든 메커니즘을 포함함. 파이썬 런타임의 구성 요소1. 인터프리터(Interpreter) / VM파이썬 코드는 실행 시 먼저 바이트코드(bytecode) 로 컴파일되고, 이 바이트코드는 CPython(표준 구현)의 경우 CPython VM(가상머신)에서 해석(Interpretation)됨.다른 구현체(PyPy, Jyt..
PYTHONPATHPYTHONPATH는 파이썬의 모듈 및 패키지 검색 경로(search path)에 영향을 주는 환경 변수(Environment Variable) 로서, 파이썬 인터프리터가 import 문을 처리할 때 특정 디렉터리를 추가로 탐색하도록 설정할 수 있음.즉, 파이썬이 어디서 모듈을 불러올지 결정하는 과정을 제어하는 중요한 수단 중 하나임. 파이썬의 모듈 및 패키지 검색 경로1. 기본 검색 경로파이썬 인터프리터가 시작될 때, 내부적으로 sys.path라는 리스트가 초기화됨.일반적으로 sys.path에는 아래와 같은 경로들이 포함됨.- 현재 작업 디렉터리(혹은 스크립트가 있는 디렉터리)- 표준 라이브러리 경로(예: /usr/lib/python3.9, C:\Python39\Lib 등)- site..
요약CPU 아키텍처는 소프트웨어 전반(특히 저수준 언어나 네이티브 라이브러리를 포함하는 소프트웨어)에 영향을 끼치며, 파이썬 라이브러리 역시 예외가 아님.파이썬 자체가 인터프리터 언어라 하더라도, 많은 라이브러리가 내부적으로 C/C++/포트란 등 네이티브 코드를 포함하거나, CPU의 특정 명령어 세트(AVX, SSE, NEON 등)를 활용하여 성능을 최적화하기 때문임. 파이썬 인터프리터와 CPU 아키텍처1. 파이썬 인터프리터의 빌드일반적으로 파이썬은 x86_64(AMD64) 아키텍처용 바이너리로 가장 널리 배포됨.하지만 ARM(예: Raspberry Pi, Apple Silicon), PowerPC, RISC-V 등 다른 아키텍처용으로도 빌드가 가능함.CPU 아키텍처별로 바이너리 형식(예: ELF, Ma..
파이썬 환경을 분리해서 사용해야 하는 이유파이썬 프로젝트를 진행하다 보면, "환경(Environment)을 분리하는 것"이 매우 중요하다는 이야기를 자주 듣게 됨.실제로 데이터 사이언스, 웹 개발, 머신러닝, DevOps 등 다양한 분야에서 전문가들은 파이썬 환경 분리를 거의 필수적으로 실천하고 있음. 의존성 충돌 방지1. 프로젝트별로 다른 라이브러리 버전 사용프로젝트 A에서는 TensorFlow 2.8을 사용하고, 프로젝트 B에서는 TensorFlow 2.3을 사용해야 하는 경우가 있음.동일한 시스템 전역 환경에 모든 라이브러리를 설치해 두면, 버전 충돌이 일어나거나 기존 프로젝트가 정상적으로 동작하지 않을 수 있음. 2. 하위 호환성, 상위 호환성 이슈pandas, NumPy 같은 핵심 라이브러리들은..
Miniconda미니콘다(Miniconda)는 파이썬/데이터 과학 생태계에서 널리 사용되는 경량 배포판(lightweight distribution)임.아나콘다(Anaconda)의 패키지 관리자(conda)와 필수 파이썬 환경만 제공하는 최소 구성 버전임.아나콘다와 비교했을 때 부피가 작고, 필요한 라이브러리들을 개별적으로 설치함으로써 보다 유연하고 미니멀한 구성을 선호하는 사용자층에게 적합함. 미니콘다의 주요 특징1. 경량 배포판미니콘다는 필수 파이썬(또는 R) 인터프리터와 conda 패키지 관리자만 포함하여 크기가 매우 작음(수십 MB 수준).아나콘다(수 GB 단위)와 달리 초기 설치 용량이 작으므로, 디스크 용량을 절약하며 빠르게 설치할 수 있음. 2. 유연한 환경 관리conda 환경 관리 기능은 ..