
Spark의 Murmur3 hash 구현이 일반적인 Murmur3 구현과 약간 다르다는 점을 알고 계신가요?이번 글에서는 Spark에서 hash() 함수를 사용하며 겪었던 Murmur3 해시의 호환 문제에 대해 다뤄보겠습니다. Spark에서의 Hash 함수에 대해 다룬 이전 게시글을 읽고 오시면 이해에 도움이 됩니다! Spark 속 해시 이야기 - Murmur3와 xxHashSpark에서는 데이터를 분산하고 처리 속도를 높이기 위해 내부적으로 해시를 폭넓게 활용합니다.해시는 데이터를 균등하게 분산시키고 복잡한 값을 빠르게 비교할 수 있다는 장점이 있습니다.openkmj.tistory.com 문제 상황Spark를 통해 데이터를 집계한 후, 그 결과를 바탕으로 key-value lookup 테이블을 생성하..

Spark에서는 데이터를 분산하고 처리 속도를 높이기 위해 내부적으로 해시를 폭넓게 활용합니다.해시는 데이터를 균등하게 분산시키고 복잡한 값을 빠르게 비교할 수 있다는 장점이 있습니다. 이번 글에서는 해싱의 기본적인 개념과 Spark에서 사용되는 해시 함수의 작동방식에 대해 살펴보겠습니다. 해싱이란?해싱(Hashing)은 입력값을 고정된 크기의 출력값(해시값)으로 변환하는 과정을 말합니다.# Hash Example"apple" -> 100"banana" -> 26"x" -> 11225 -> 99 위와 같은 해시함수가 있을 때, "apple"과 "banana"를 직접 비교하는 대신 해시값인 100과 26을 비교함으로써 효율적으로 값을 비교할 수 있습니다. 이처럼 해시는 데이터를 고정된 크기로 압축하여 ..

Spark에서 데이터를 다룰 때는 보통 소스 데이터로부터 고유한 ID를 제공받는 경우가 많습니다. 하지만 모든 데이터가 그렇게 친절하진 않은데요, 제공된 ID가 없거나 explode 함수 등을 통해 새로운 행을 생성하는 경우처럼 각 행에 대해 직접 고유한 ID를 생성해야 하는 상황이 종종 있습니다. 관계형 데이터베이스에 익숙하다면 아마 Auto Increment Key가 먼저 떠오를텐데요, 분산 환경에서는 이야기가 조금 다릅니다.순차적으로 증가하는 값을 생성하기 위해서는 각 노드들이 공유하는 전역 상태가 필요한데, 이를 유지하기 위한 락이나 동기화 같은 메커니즘이 성능 저하와 병목을 발생시킵니다. 그래서 대부분의 분산 시스템에서는 이를 지원하지 않고 분산 환경에 적합한 다른 방식의 키를 사용합니다. (R..
Unique Key를 생성할 때 흔히 관계형 데이터베이스의 Auto increment 칼럼을 사용하는 방식을 떠올리곤 합니다.이 방식은 단일 서버 환경에서는 간단하고 효율적이지만 분산 환경에서는 충돌이나 마스터 노드의 병목 문제가 발생할 수 있습니다. 이러한 한계를 극복하기위해 등장한 방식이 바로 UUID(Universally Unique Identifier)입니다.UUID는 각 노드가 독립적으로 전역에서 고유한 ID를 생성할 수 있어, 중앙 관리 없이도 충돌 없는 ID 생성이 가능하다는 점에서 분산 환경에서 특히 적합합니다. 이번 글에서는 Python uuid 모듈 구현을 살펴보며 UUID에 대해 정리해보겠습니다. UUID란?UUID는 이름 그대로 전역에서 고유한 식별자를 만들기 위한 표준입니다.총 1..
많은 분산 처리 프레임워크들이 JVM 위에서 돌아간다.하지만 자바는 익숙치 않아서 앞으로 JVM에 대해 조금 공부해볼까 한다. JVM 탄생 배경Java는 원래 다양한 가전제품의 임베디드 시스템에서 실행될 소프트웨어를 개발하기 위한 목적으로 시작되었다. 이러한 특성상, 다양한 하드웨어와 운영체제에서 실행될 수 있는 호환성이 필요했다.하지만 C/C++의 경우 운영체제나 CPU 아키텍처에 따라 각각 빌드해야 하고, 아예 코드를 따로 작성해야 되는 경우도 있다.그래서 Java는 한번 개발하면 어디서든 실행 가능하도록(Write Once, Run Anywhere) 설계되었다.Java 프로그램은 운영체제나 하드웨어에 독립적인 JVM이라는 실행 환경에서 이루어지기 때문에 다양한 환경에서도 별도의 수정 없이 실행될 수..

MapReduce(맵리듀스)는 2004년 구글에서 발표한 논문으로, 이를 구현한 Hadoop(하둡)은 대규모 데이터 생태계의 중심이 되는 위치를 차지하고 있다. 맵리듀스는 대규모 데이터를 분산 환경에서 병렬적으로 처리할 수 있도록 하는 프로그래밍 모델이다.맵리듀스의 아래 두가지 의의를 갖는다.복잡한 데이터의 분산 처리를 Map(맵)과 Reduce(리듀스) 함수 두 개로 추상화하여 이를 구현하는 개발자의 부담을 덜었다.저사양의 서버 여러대를 조합하여 고사양의 작업을 처리함으로써 확장성을 높이고 비용을 절감하였다.오늘은 이 논문을 읽고 맵리듀스를 이해해보자. AbstractMapReduce는 대규모 데이터 셋을 처리하고 생성하기 위한 프로그래밍 모델이다. 사용자는 Key/Value 쌍을 처리하여 중간 Ke..
- Total
- Today
- Yesterday