Data
-
Apache Tez란?Data 2021. 9. 2. 23:18
주요개념 빠르게 확장성있고 효율적인 데이터 플로우 중심 엔진 개발을 목적으로 함. 조금 학술적인 개념을 많이 사용하였고 그것이 코드에 반영되어 있음 DAG: Directed Acyclic Graph로 데이터 프로세싱 워크플로우를 나타냄. 데이터는 edge의 방향으로 흐름. Vertex: 프로세싱의 논리적인 흐름을 나타냄. 프로세싱 스텝은 애플리케이션에서 제공된 코드를 통해 데이터를 변경함. Logical DAG: 논리적 DAG은 vertices 세트로 구성되며 각 vertex는 특정 컴퓨팅 스텝을 나타냄. Task: vertex 내에서 한 단위의 프로세싱을 나타냄. 분산 프로세싱에서 하나의 vertex로 나타내어지는 논리적 work는 물리적으로 여러 기기에서 실행되는 tasks들로 구성됨 Physical..
-
맵리듀스의 제약과 Apache TezData 2021. 9. 2. 23:04
하둡의 분산처리엔진인 맵리듀스는 이후 많은 분산처리엔진에 영향을 주었습니다. 맵리듀스 개선에 대한 많은 논의와 연구와 동시에 한계점을 파악하고 새로운 프레임워크를 만드는데 그러한 맵리듀스의 한계점이 많이 고려되었는데요. 이 글에서는 맵리듀스의 한계점과 하둡 환경에서 대체제로 개선된 성능을 보여주는 테즈(Apache Tez)를 비교하는 내용을 다뤄보도록 하겠습니다. 맵리듀스의 제약들 [1] 하이 레벨 언어의 부재: 맵리듀스 자체로는 어떠한 하이 레벨 언어와 쿼리 레벨의 최적화를 제공하지 않음. 유저는 맵, 리듀스 함수로 구현해야 함. 스키마와 인덱스가 없음: 스키마와 인덱스가 없음. MR 잡은 인풋에 대해 작업을 하고 스토리지에 바로 저장할 수 있으나 이러한 부분은 데이터 모델링의 장점을 제외해 버림. 맵..
-
맵리듀스 처리 흐름 알아보기 (MapReduce Phases)Data 2021. 9. 1. 22:27
맵리듀스는 맵과 리듀스로 구성되어 있습니다. 한 단계 더 나아가 실제 데이터를 읽고 쓰는 처리 흐름을 살펴보면, 좀 더 작은 단위로 나뉠 수 있는 것들로 구성되어 있는 것을 알 수 있습니다. 이번 글에서는 아래와 같은 사항들을 중점으로 맵리듀스 처리 흐름을 자세하게 살펴보겠습니다: 맵리듀스 처리 흐름 개요 Record Reader Map Combiner Partitioner Shuffle and Sort Reduce Output Format 맵리듀스 처리 흐름 개요 파일시스템에서 데이터를 읽어서, 가공하고, 다시 파일시스템에 쓰는 맵리듀스 작업은 아래와 같은 처리 흐름을 가집니다: 맵리듀스의 job은 분산되어 실행되는 몇 가지 map tasks와 reduce tasks로 나뉩니다. 각 task는 할당된 ..
-
맵리듀스 작업 개선을 위한 추가적인 사항들Data 2021. 8. 28. 08:56
맵리듀스는 간단하게 map과 reduce 함수 작성을 통해 구현됩니다. 대부분의 경우에 기본적인 map과 reduce만으로 충분하지만, 특정 상황에서는 몇몇의 추가적인 설정이 매우 유용한데요. 이번 글에서는 [1]에 기반해 그러한 사항들을 알아보겠습니다. 파티셔닝 함수 맵리듀스 사용자들은 원하는 reduce tasks 수(결과물 파일 수)를 설정하게 됩니다. 중간결과물의 키에 대한 파티셔닝 함수를 사용하여 데이터는 이러한 task들에 파티션되게 됩니다. 디폴트 파티셔닝 함수는 hashing을 사용합니다. 이 경우 대부분 적절히 균형잡힌 파티션이라는 결과는 낳는데요. 하지만 어떠한 상황에서는 데이터를 다른 파티셔닝 함수를 사용해 파티션하는 것이 유용하기도 합니다. 예로, 결과물의 키가 URL이고 단일한 호..
-
맵리듀스란? (Hadoop MapReduce)Data 2021. 8. 22. 21:44
맵리듀스는 프로그래밍 모델임과 동시에 구현체를 부르는 말로, 그 구현체는 '분산처리엔진' 역할을 하는 하둡의 중심 모듈 중 하나입니다. 사용자는 키/값 쌍을 처리하는 map 함수를 설정하여 중간 결과물 형태의 키/값 쌍 데이터를 만들고, reduce 함수를 설정하여 앞선 중간 결과물의 키를 통해 같은 키를 가진 값들을 합쳐서 최종 결과물을 만듭니다 [1]. 이렇게 함수형 스타일로 작성된 프로그램은 자동적으로 병렬화되어 처리되며, 일반적인 상용 기기에서(특별한 고성능 기기가 아닌) 대용량으로 처리를 가능하게 합니다. 그렇기에 이러한 프로그램을 사용하여 분산병렬 애플리케이션을 손쉽게 개발하고 사용할 수 있게 합니다. 이 글에서는 '맵리듀스'와 관련해 아래와 같은 내용을 다루겠습니다: 맵리듀스 프로그래밍 모델..
-
CDC(Change Data Capture)란?Data 2021. 7. 16. 08:12
과거부터 데이터베이스 replica 생성, 데이터 수집 등 데이터베이스 복제에 대한 요구사항이 발달하면서, '변경을 다른 곳에 복제하는 것'에 대한 많은 관심이 높아져왔고 관련 솔루션도 점점 발달해 왔습니다. CDC 솔루션은 크게 1) 로그 기반, 2) trigger 기반(DB 프로시져 등을 통한) 형태가 존재합니다. 이번 글에서는 로그 기반 CDC를 중점으로 살펴보겠습니다. 주로 데이터베이스의 복제를 위해 사용되던 replication log는 초기에 외부에 사용되는 API라기보다는 내부 구현용으로 여겨져 왔습니다. 그렇기에 그러한 replication log는 데이터베이스에 가한 모든 변경에 대한 기록을 가지고 있지만, 이러한 모든 변경 기록을 통해 다른 스토리지에 데이터를 복사하는 일은 매우 어려운..
-
Apache Spark(아파치 스파크) Web UI 관찰하기Data 2021. 7. 1. 20:49
스파크 애플리케이션의 상태를 파악하는데에 있어서 Web UI는 매우 중요한 역할을 합니다. 이번 글에서는 Spark Web UI를 살펴보며, 어떤 부분들을 고려할 수 있는지 알아보도록 하겠습니다. 살펴볼 세부적인 사항들은 아래와 같습니다: Jobs: 스파크 애플리케이션의 모든 job에 대한 요약 정보 제공 Stages: 모든 jobs의 모든 stages의 현재 상태 요약 정보 제공 Storage: persisted RDD와 DataFrames 정보 제공 Environment: 다양한 환경 변수값 Executors: 애플리케이션을 위해 생성된 엑서큐터 정보 제공. 메모리와 디스크 사용량과 task, shuffle 정보 등 SQL: 애플리케이션이 Spark SQL 쿼리 실행 시 정보 제공 Streaming:..
-
Apache Spark(아파치 스파크) 학습을 위한 도커 환경 셋업하기 (feat. Zeppelin)Data 2021. 6. 20. 22:08
이 글에서는 빠르게 아파치 스파크를 학습할 수 있도록 도커 기반의 스파크 환경을 구성하는 방법과 간단한 내부 구조에 대한 설명을 다룹니다. docker-compose up Spark 실행해보기 docker-compose up 먼저 아래 코드를 실행하여 docker-compose up을 실행합니다: git clone https://github.com/kadensungbincho/de-hands-on.git cd de-hands-on/docker-apache-spark-zeppelin docker-compose up -d --build ... Starting spark-master ... done Starting spark-worker-2 ... done Starting spark-worker-1 ... d..