WordCount예제로 보는 Map & Reduce
·
DATA Engineering/Hadoop
Word Count 예제 흔히 말하는 MapReduce 는 Map태스크와 Reduce태스크로 구성되고, 이를 설명하기 위해 WordCount예제를 들어보려고한다 위 예제는 전체 Input중에 동일한 단어가 몇번이나 나오는지를 확인하는 예제이다 MapReduce의 태스크는 크게 4가지 부분으로 구성된다 전체는 Spliting, Mapping, Shuffling, Reducing으로 구분되고 그중 Map Task는 Spliting & Mapping Reduce Task는 Shuffling & Reducing 을 지칭한다 JOB 튜닝 블록크기 → namenode heap메모리에 영향받음. 128mb replication 갯수 : (복제갯수)일반적으로 3 CHILD 프로세스 재사용 : Map or Reduce태..
Secondarynamenode(SNN), fsimage, HDFS Balancer
·
DATA Engineering/Hadoop
세컨더리네임노드(SNN) namenode는 파일시스템에 대한 이미지 관리를 fsimage라는 이름으로, Namenode가 떠있는 디스크에 얘를 저장하게 되어있음. fsimage는 일종의 스냅샷형태로 관리함. 이 로그는 edits에 저장됨 namenode가 처음 구동되면 fsimage를 쭉~ 읽고, 메모리에다가 스냅샷을 구성함. 그 다음에 edits로그를 다 읽고 변경된 내용을 메모리에 반영함. Edits로그를 병합해줘야하지 않을까? 파일시스템에서 활동,변경한 내역로그는 모두 edits에 저장되는데 나중을 위해서 edits로그를 병합해줘야한다 어디서 해야할까? namenode에서는 직접병합을 하지않고, SNN에서 병합을 한다음에, 이를 fsimage스냅샷으로 만들고, 원본 fsimage와 바꿔치기한다 SN..
Datanode가 죽었을때, Masternode가 죽었을때
·
DATA Engineering/Hadoop
이름설명 Name node : 하둡 분산파일시스템에 대한 Master 역할 (데이터의 메타데이터 저장) Job Tracker : 어플리케이션 관리에 대한 Master 역할 Datanode : 하둡 분산파일시스템에 대한 Slave역할 (실제 데이터 저장) Task tracker : 어플리케이션 관리에 대한 Slave역할. 일을 실제로 하는 역할 일반적으로 DN + TT를 하나의 묶음으로 띄운다 Replica와 Datanode 하둡에서는 파일을 128mb로 쪼개서 Datanode로 저장한다. 이때, 안정성을 위해서 Replica(복사본) 을 가지는데, 원본과 Replica를 합쳐서 3개를 전체서버에 저장한다. Datanode의 노드상태 Namenode에 알리기 위해 주기적으로 Heartbeat를 보내는 방식..
하둡에서 블록 용량 디폴트가 128MB인 이유
·
DATA Engineering/Hadoop
선요약 Namenode, TaskTracker가 블록을 탐색할때 파일의 정보를 최대한 빨리 찾기 위해서, 메타정보를 줄이기 위한 용도로 사용한다 이름설명 Name node : 하둡 분산파일시스템에 대한 Master 역할 (데이터의 메타데이터 저장) Task tracker(TT) : 어플리케이션 관리에 대한 Slave역할. 일을 실제로 하는 역할 Block 저장 하둡에서 사용하는 HDFS포맷(하둡파일시스템) 의 특징인데 하나의 파일을 여러개의 Block으로 쪼개서 저장한다. 초기엔 64MB를 디폴트로 설정하여 저장했는데, 지금은 128MB를 디폴트로 사용중이다 왜 128MB 인가? 256, 512로도 바꿀수 있긴 하지만, 디폴트는 128mb 128mb면 좀 큰단위긴한데, 위에 나와있는 Namenode, T..
Zero-copy 를 위한 노력. Zerializer: Towards Zero-Copy Serialization
·
DATA Engineering/Kafka
💡 주의! 해당 리뷰는 매우 낮은 수준에서 리뷰합니다. 실제 레퍼런스를 찾아보시기를 권장합니다. Reference RHOTOS 2021 학회에서 진행한 발표. USENIX워크샵 중 하나. 논문 : https://www.cs.yale.edu/homes/soule/pubs/hotos2021.pdf 자료 : https://www.youtube.com/watch?v=6ORl8nnd19A 독스 : https://zerial.readthedocs.io/en/latest/ Zero-copy와 Serializer-Deserializer Zero-Copy는 데이터 송수신하는 상황에서 데이터 복사본을 적게 만들고, 어플리케이션 영역과 커널영역을 적게 드나드는 것 을 목적으로 만들었다 그래서 데이터를 송신할때는 Serial..
Apache Arrow가 뭘까?
·
Dev
개발 플랫폼 Apache Arrows는 일종의 개발 프로그램이라고 보는것같다 In-Memory로 작동하고, 데이터간 이동하는 기술을 Python에서는 Pyarrow로 구현할수 있다 Zero-Copy ROW기반이 아닌 Column기반(열기반) 의 인메모리 포맷으로 Zero-Copy 직렬화를 수행한다고함 원래는 데이터가 인프라를 공유하기위해선 Serialization, Deserialization이 필요했는데, 이 과정에서 데이터가 크면 클수록, Overhead가 크다는 단점이 있었다 그래서 직렬화를 없에버리려는 목적으로 Zero-copy Serialization framework 가 탄생되었다 ( 당연히 serialization을 하지않기때문에, deserialization도 하지않는다 )
In-Memory 는 왜 쓸까?
·
CS지식
선요약 In-Memory는 데이터의 처리가 끝나지않았다면, 메모리에서 계속 가지고 있는 형식이다 읽기 쓰기 횟수를 줄임으로써, 속도를 빠르게 가져갈수 있다 In-Memory 가 뭘까? 쉽게 말해서 In-Memory는 ‘데이터를 메모리 위에서만 가지고 있겠다’ 라는 뜻이다 이해를 돕기위해 Hadoop과 Spark의 자료를 첨부한다 Hadoop은 스토리지에서 데이터를 가져오고, 다시처리해서 스토리지에 넣는 과정을 반복한다 Spark는 스토리지에서 데이터를 가져오고, 다시 처리한다음에 메모리에 넣고, 처리하는 과정을 반복하고, 모든 처리가 끝나면 스토리지에 넣는다 기존방식과 In-Memory의 차이 기존방식 ‘Storage’에서 읽고 ‘Memory’에 올린다 → 데이터를 처리하여, ‘Storage’에 넣는다 ..
Parquet는 왜 쓸까?
·
Dev
한줄요약 Data를 저장할때 ‘행기반’ 과 ‘열기반’ 으로 나누어져 저장된다 열기반(Column-Based)의 장점이 필요할때 사용한다 정형데이터와 비정형데이터 일반적으로 소규모 데이터베이스 상황에서 데이터를 저장해야할때 정형데이터 - RDB 비정형데이터 - NoSQL 이런식으로 구분하여 저장하는것이 일반적이었다 만약 대용량 데이터를 저장해야한다면? 일반적으로 데이터레이크를 구축할때, 오브젝트스토리지를 사용하는것이 일반적인데 그중 하나의 클라우드 서비스로는 AWS S3 가 있다 대용량 데이터를 저장해야할 정도면, 당연히 하둡생태계를 고려할것이고 이때 고려할만한 타입이 Parquet(파케이) 타입이다 Parquet(파케이) 주된 특징으로는 S3 에 주로 사용하는 데이터 포맷이고 빠르게 읽기가 가능하고 압축..
PyObject 객체와 Numpy
·
Dev
데이터의 지역성 ram이 아무리 빨라봐야 cache보다 느리고, cache가 아무리 커봐야 ram보다는 작다 그래서 CPU는 사용할 Data를 cache에 저장하고, Register로 가져와서 계산을 진행한다 CPU가 Data를 찾을때 Data가 Cache에 없으면 (Cache Miss) 데이터를 RAM, SSD 에서 찾아야하는데 이거 시간소모가 꽤 크다 CACHE MISS를 막기위해서 일반적으로 주변의 데이터를 통째로 가져온다(뭉탱이로 가져옴) 근데 이게 PythonObject에서는 배열에 넣어서 인접해보인다고 쳐도, 실제로는 포인터의 주소를 넣은거기때문에, 연속된 값을 넣었다고해도, 실제로 메모리에 할당되는 부분이 인접해있는지를 보장할수가 없는거다 (⇒ Cache Miss가 더 빈번히 발생하겠지) 근..
스칼라 문법정리1 (Variable Value, Tuple, if-else, List)
·
DATA Engineering/Scala
문법 val [:] = var [:] = Type inference #직접 자료형을 명세해주는경우 val x: Int = 20 val symbol : Char = "@" #자료형을 명세해주지않고, 컴파일러가 직접 타입을 추론하게 하는것 val x = 20 val symbol = "@" Variable vs Value Variable(변수)는 데이터를 재할당 하는것이 가능함 Value(값)은 데이터를 재할당 하는것이 불가능함 Value를 위주로 사용하면서, Variable을 최대한 적게 사용하는것이 스칼라의 프로그래밍 전략 연산자 == : 같은값을 참조하는것이 아니라, 데이터가 같은 값인지 확인하는 역할 & : 앞에 1개만 평가 && : 앞뒤를 모두 평가 Tuple index는 1부터 시작한다 #1단위 튜..
jjongguet
뒤죽박죽 데이터엔지니어링