본문 바로가기

Hadoop

(16)
[Apache Avro] Avro 구조와 사용법 Apache Avro는 serialization library이다. Avro 특징 특징 json 형식으로 스키마를 지정하고 이 스키마 파일을 통해 serialize/deserialize 를 진행한다. java의 경우 플러그인을 통해 json 타입의 avro 스키마 파일을 읽고 .java 클래스를 생성할 수 있다. 장점 타 포멧 대비(ex. json) 데이터 사이즈가 컴팩트하다. Programing language에 상관없이 serialize/deserialize 가능하다.(자바에서 serialize 된 후 python에서 deserialize 가능) 다양한 데이터 타입을 지원한다. 스키마 변경을 유연하게 처리할 수 있다(Schema Evolution) 단점 binary 형태로 저장시 디버깅이 어렵다. J..
[Apache Hudi] 3-2. Components - Table Type & Query Type hudi의 table과 Table 타입, 그리고 쿼리 타입에 대해 정리해보고자 한다. Table Type hudi는 두가지 테이블타입을 지원한다. Copy On Write: Columnar File Format(parquet)으로 데이터를 저장한다. 데이터를 쓸때 이전의 base file과 새로들어온 데이터를 병합하여 새로운 버전의 base file을 생성한다. Merge On Read: Columnar File Format(parquet) + Row Based File Format(avro)파일로 결합하여 저장된다. 업데이트 되는 신규 파일은 먼저 Avro포멧으로 생성된 Delta File에 먼저 쓰여지며, 이후 Compaction 작업을 통해 기존의 base file + Delta File을 병합하여..
[Apache Hudi] 3-1. Components - Timeline Timeline Hudi에서 발생한 모든 오퍼레이션을 저장하는 공간으로 basepath/.hoodie에 저장된다. 데이터가 인입되게 되면 타임라인에 어떤 작업이 수행되어는지를 모두 기록하고, base file에 실제 데이터를 저장하게 된다. timeline의 데이터는 모두 순차적으로 저장이 되게 된다. .hoodie 디렉토리 하위에 하나의 파일 형태로 저장되는것은 아니고, Action Type별로 파일이 생성되고 관리된다. Timeline Action Type COMMITS: 레코드들을 테이블에 Atomic 하게 쓰는 것을 의미한다. CLEANS: 오래된 버전의 파일을 제거하는 백그라운드 작업을 나타낸다. DELTA_COMMIT: 테이블 타입이 Merge On Write일 경우 delta log 파일에 ..
[Apache Hudi] 2. 파일 구조 Apache hudi는 DFS에 파일 형태로 저장된다. 테이블 타입에 따라 parquet 파일로만 저장이 되기도하고, parquet + avro로 저장이 되기도 하는데, 먼저 DFS에 어떠한 구조로 저장이 되는지, 각 파일은 어떠한 형태를 띄는지 정리해보도록 하자. BasePath Hudi Table의 데이터가 저장되는 root path이다. 해당 경로 하위로 각종 메타 디렉토리, 파티션 디렉토리등이 생성이 된다. public class InsertDataApp { private static final String tableName= "hudi_trips_cow"; private static final String basePath = "file:///tmp/hudi_trips_cow"; //테스트로 로컬..
[Apache hudi] 1. hudi란 무엇일까? Apache Huid에 대해 POC할 기회가 생겨 잊어버리지 않도록 블로그에 정리해보고자 한다. 1. Hudi란 무엇일까? Apache Hudi는 DFS(hadoop hdfs 또는 Cloud Storage)를 기반으로 대량의 분석데이터를 저장하고, 관리할수 있는 스토리지이다. Hudi는 스트림을 통해서 실시간 데이터를 가져올수도 있고, 전통적인 batch 프로세싱으로 데이터를 저장할 수도 있다. Hudi가 처음이라면 위의 글이 잘 와닿지 않을것이다. 스트리밍으로 데이터를 가져와서 저장하는게 특이한것도 아니고, 배치로 데이터를 저장하는것 또한 마찬가지이기 때문이다. 다만 인입되는 데이터의 사이즈가 아주 크고, Daily가 아닌 더 짧은 주기로 데이터를 분석하기 위해 스트리밍으로 데이터를 싱크해야한다면,그리..
[Kudu] pyspark with kudu python 3.8 kudu 1.10.0 1. pyspark Installation $ pip install pyspark==2.3.3 //https://mvnrepository.com/artifact/org.apache.kudu/kudu-spark2 에서 kudu버전에 맞는 jar 다운로드 후 로컬에 저장 $ wget https://repo1.maven.org/maven2/org/apache/kudu/kudu-spark2_2.11/1.10.0/kudu-spark2_2.11-1.10.0.jar 2. read & write with spark from pyspark.sql import * spark = SparkSession.builder.appName("KuduExample").getOrCreate() ..
[Kudu] FlushMode의 종류 및 주의점 오늘은 이 FlushMode의 사용법과 주의점에 대해서 써보려고 한다. Kudu에 데이터를 쓸 때 KuduSession 인스턴스를 확보하고, flush 하게 되는데, 이때 Kudu에서는 3가지의 FlushMode를 지원한다. 1. Java Library를 이용한 기본 사용법 import org.apache.kudu.client.*; public class KuduTest { public static void main(String[] args) throws KuduException { String tableName = "sample"; try(KuduClient client = new KuduClient.KuduClientBuilder(masterAddr).build()) { KuduTable table ..
[Hadoop] Active Namenode 구하는 법 distcp 나 hadoop fs 같은 하둡 커맨드를 사용할 때 Active Namenode를 통해서 잡을 수행해야 하는데, Active/StandBy 로 Namenode가 구성되면 HA 구성된 Namenode들 중 Active Namenode를 찾아 잡을 수행시켜야 한다. 이번 포스팅은 커버로스 인증이 적용된 하둡 클러스터에서 Active Namenode를 찾아내는 몇가지 방법에 대해 정리해 보고자 한다. 1. shell을 통한 Active Namenode 구하기 //커버로스 인증이 필요할 경우 키탭을 이용하여 커버로스 티켓을 생성한다. $ kinit -kt ${keytab_path} ${principal} $ curl --negotiate -u : http://${namenode_domain}:500..