본문 바로가기

Hadoop/Kudu

(8)
[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 ..
[Kudu]Kudu와 Presto 그리고 unix_timestamp에 대해 이해하기 Kudu 공식 문서에도 나와있지만 Kudu에서 주로 사용하는 쿼리엔진은 Impala나 Hive다. 하지만 필자는 이미 사용하고 있는 Presto 클러스터가 있어 Presto-Kudu Connector 를 이용하여 Kudu에 쿼리를 수행하고 있었는데, Kudu의 unixtime_micros 타입의 컬럼이 계속 헷갈려 여러가지 테스트를 수행해 보았다. 이 포스팅은 그 테스트 과정 및 결과에 대한 이야기이다. Kudu에 데이터를 넣을때 KST(UTC+9) 시간을 UTC로 변경해서 넣어야 할까? 사실 많은 개발자들이 알고있듯, 유닉스_시간은 1970년 1월1일 부터 현재까지의 시간을 정수형으로 나타낸 값이다. Kudu에도 시간을 나타내는 컬럼인 unixtime_micros 타입의 컬럼이 유닉스 타임을 저장하기 ..
[Kudu] 시간 기준의 Range Partition 시 주의점(timezone, UTC) 잘못된 내용으로 조만간 새로 포스팅 할 계획입니다. Kudu는 시간 컬럼을 저장할 때 unixtime_micros를 이용해서 저장한다. 만약 이 컬럼을 통해 연도별,월별,일별 등 시간으로 Range Partition을 설정할 경우 주의할 점이 있다. Kudu는 질의 엔진이 따로 포함되어 있지 않기 때문에 kudu-client 라이브러리를 사용하여 테이블 생성 및 파티션을 설정하거나, Impala Hive Presto 와 같은 질의엔진을 통해 CREATE TABLE DDL을 통해 테이블을 생성할 수 있다. 이때 질의 엔진을 통해 테이블을 생성할 경우 주의해야 한다. 만약 아래와 같이 날짜를 기준으로 파티션을 했다고 가정해보자. -- query with presto CREATE TABLE sample ( u..
[Kudu] Encoding & Compression Kudu에서는 컬럼의 인코딩과 압축을 통해 저장 데이터의 사이즈를 줄여, 디스크 공간을 효율적으로 사용할 수 있도록 하고 있다. 1. 인코딩 인코딩은 테이블 생성 시 컬럼의 정의로 지정할 수 있다. -- query with impala CREATE TABLE various_encodings ( id BIGINT PRIMARY KEY, c1 BIGINT ENCODING PLAIN_ENCODING, c2 BIGINT ENCODING AUTO_ENCODING, c3 TINYINT ENCODING BIT_SHUFFLE, c4 DOUBLE ENCODING BIT_SHUFFLE, c5 BOOLEAN ENCODING RLE, c6 STRING ENCODING DICT_ENCODING, c7 STRING ENCODIN..
[Kudu] Source 를 이용한 설치 kudu를 설치하는 방법은 cloudera repository를 이용하여 설치하는 방법이 있고, source build를 통해 설치하는 방법이 있는데, cloudera 버전은 라이센스 관련 이슈가 있어서, 사용에 문제가 없는 source build 버전을 통해 설치해보려고 한다. 설치환경 CentOS 7.6 1. 필수 라이브러리 설치 $ sudo yum install -y autoconf automake cyrus-sasl-devel cyrus-sasl-gssapi \ cyrus-sasl-plain flex gcc gcc-c++ gdb git java-1.8.0-openjdk-devel \ krb5-server krb5-workstation libtool make openssl-devel patch \ ..
[Kudu] Write And Compaction 본 포스팅은 아래의 출처의 정보들을 조합하여 나름의 구성을 진행하였다. 잘못 이해하고 있거나, 문제가 있는 부분이 있을수 있음을 사전에 명시하고 시작하도록 하겠다. 출처 및 참고자료 Apache Kudu Read & Write Paths Apache Kudu: Technical Deep Dive Getting Started with Kudu 1. 태블릿 탐색 Kudu에서 데이터를 읽기 전 가장 먼저 해야할 일은 찾고자 하는 데이터가 어떤 태블릿 서버의 어떤 태블릿에 들어가있는지를 찾는 것이다. 위의 이미지에서 잘 표현되어있듯, 가장 먼저 클라이언트는 Master Leader에게 bar 테이블의 key='foo'를 요청한다. 이후 마스터 테이블은 Metadata를 찾아 해당 데이터가 있는 태블릿 정보를 돌..
[Kudu] Kudu Architecture Apache Kudu 는 Columnar Storage로서, 실시간/대용량 데이터 분석이 가능한 저장 엔진이다. 여기에 Impala, Spark를 이용하여 쉽고 빠른 데이터 분석이 가능한 특징이 있다. 1. Kudu의 장점 OLAP성 작업의 빠른 처리 MapReduce, Spark 및 기타 Hadoop 에코 시스템 컴포넌트들과의 통합 Apache Impala와의 강력한 통합으로 Apache Parquet와 함께 HDFS를 사용하는 것보다 좋은 대안이 될수 있다. 강력하지만 유연한 일관성 모델을 통해 엄격한 직렬화 가능 일관성 옵션을 포함하여 요청별로 일관성 요구 사항을 선택할 수 있다. 순차적 및 랜덤 워크로드를 동시에 실행하기위한 강력한 성능. 관리가 쉬움 높은 가용성. 태블릿 서버와 마스터 서버는 R..