본문 바로가기

Data Engineering/PySpark3

[Spark] Local Mode Executor에 대한 고찰 spark를 local mode로 테스트해보면서 잠깐 혼돈되는 지식이 있어 정리하고자 한다. 우선 내 스파크 세션의 설정은 다음과 같다. 처음에 master에 "local[*]" 로 설정했다가, 이후 web ui를 보았다. 이상한 점을 발견하게 되었다. 분명 스파크 세션을 만들 때, master로 "local[*]" 을 줬고, 내 컴퓨터의 cpu 개수는 아래와 같이 16 코어이다. 그런데 왜 Executor Reqs의 cores가 1로 나오는 지 궁금했다. local[*]은 분명 로컬 컴퓨터의 모든 CPU 자원을 이용하는 것으로 들었는 데, 이것만으로 실제 executor에서 모든 자원을 사용하지 않는 걸까? 또한 excutor와 task에 대한 개념을 조금 더 세밀하게 알아야 더 최적화를 시킬 수 있겠.. 2023. 7. 17.
[Spark] 분산 파일 시스템에서의 데이터 지역성 다양한 환경에서 실행가능한 스파크 스파크는 다양한 저장소에 붙여서 분산 처리가 가능한 프레임 워크이다. 하지만, Spark는 처음 개발된 환경은 Hadoop에서 사용하는 HDFS라는 분산 파일 시스템이며 해당 환경에서 In-Memory 기반으로 최적의 분산 처리를 수행하는 데 최적화가 되어있다. 때문에 오늘은 Spark를 분산 파일시스템에서 운영 할 때의 이점을 소개하고자 한다. 결론부터 말하자면 분산 파일시스템에서 Spark를 이용하면 데이터 지역성의 이점을 누릴 수 있다. 대표적인 분산 파일 시스템인 Hadoop에서의 데이터 지역성을 이해하기 전에 최적화에 대한 나의 기본 관점을 공유하고자 한다. 최적화의 기본 프로그램을 최적화 시킬 때, 두 가지 I/O를 줄이는 것이 정말 중요하다고 생각한다. 첫 .. 2023. 7. 5.
[PySpark] Dataset PySpark에서 Dataset을 지원하지 않는 이유 우선, PySpark에서는 DataSet 자료형을 지원하지 않는다. Java나 Scala에서만 지원을 한다. 그 이유느 DataSet은 런타임이 아닌 컴파일 타임에 타입을 체킹하기 때문이다. 파이썬이라는 언어는 변수를 정의할 때 타입을 정의하지 않는다. 값을 할당하면서 타입이 정해진다. 그 예시로 아래 코드를 보자. a = 10 a = "만들어진 변수 a에 문자열 값을 새로 할당합니다" 이 코드가 문제가 생기지 않는 것은 파이썬 런타임에 값을 할당하면서 변수의 타입을 새롭게 쓸 수 있기 때문이다. 프로그래밍의 자유도가 높지만 반대로 자바나 스칼라처럼 컴파일 타임에 데이터 타입을 체킹하기 어려운 점이 있다. 파이스파크에서 Dataset을 지원하지 못하는.. 2023. 6. 24.