728x90
반응형
1. ClickHouse 개요
1.1 ClickHouse
- ClickHouse는 OLAP을 위한 고성능, 컬럼 지향형 SQL DBMS이다.
- 기존 데이터베이스보다 100~1000배 더 빠르게 작동하고 초당 수억에서 수십억 행과 수십 기가바이트의 데이터를 처리한다.
- 오픈소스로 무료이고, ClickHouse에서 클라우드로 제공해주는 서비스는 유료이다.
1.2 OLAP (Online analytical processing)
- OLAP란 OnLine Analytical Processing의 약자로 다양한 관점에서 비지니스 데이터를 분석하는 데에 사용할 수 있는 소프트웨어 기술이다.
- 온라인 분석 처리(OLAP)는 다음과 같은 특성을 가진 복잡한 분석 쿼리에 대해 대규모 데이터 세트에 대한 실시간 응답이 필요하다.
- 데이터 세트는 수십억 또는 수조개의 행으로 방대할 수 있다.
- 데이터는 많은 열을 포함하는 표로 구성된다.
- 특정 쿼리에 답변하기 위해 몇개의 열만 선택된다.
- 특정 쿼리에서 뽑은 열의 개수는 상당히 적을 때 - 칼럼 수가 1000개일 때 2개의 칼럼만 조회하는 경우
- 결과는 밀리초 또는 초단위로 반환되어야 함.
- 대부분의 쿼리를 처리하는데 최소 100배는 더 빠름
1.3 OLTP(로우지향) VS 칼럼지향(OLAP)
Row oriented
- 일반적인 DB에 해당
- 데이터가 ROW 단위로 저장됨.
Column oriented
- 데이터분석에 사용되는 DB
- 컬럼 단위의 읽고 쓰기에 최적화되어있음.
- 같은 열에는 유사한 데이터가 반복되기 때문에 매우 작게 압축할 수 있음
- 열별로 데이터가 저장되어있기 때문에 필요한 열만 로드하여 디스크 I/O를 줄인다.
1.4 ClickHouse 주요 특징
- 데이터와 함께 불필요한 값들이 저장되지 않는다.
- 효율적인 데이터 압축이 기능하다.
- 멀티코어 연산이 가능하다.
- 하드를 가상 메모리처럼 쓴다.
- 실제 필요한 용량보다 하드를 좀 더 크게 쓰는 것을 권장한다고 한다.
- 일반적인 SQL 언어 지원
- 쿼리를 빠르게 수행하기 위해 병합트리를 사용하여 정렬한다.
- 백그라운드에서 병합이 진행됨.
- 데이터가 추가 될 때 lock 이 필요 없다.
- 백업 기능 제공
Query 성능 비교
1.5 ClickHouse에서 지원하는 데이터베이스 엔진
- Atomic
- MySql
- Lazy
- PostgreSQL
- Replicated
- SQLite
1.6 ClickHouse에서 지원하는 테이블 엔진
- MergeTree
- 클릭하우스 기능의 핵심.
- 기본테이블 엔진이다.
- pk 별로 데이터를 정렬하여 저장한다.
- 대용량 데이터를 테이블에 삽입 할 수 있도록 설계됨.
- 데이터 수집시 자동 데이터 중복 제거 기능이 있다.
- ReplacingMergeTree, CollapsingMergeTree 사용하면 중복제거 가능
- INSERT 중에 네트워크 문제가 발생한 경우 소프트웨어가 안전하게 다시 시도 할 수 있다.
- 알아서 중복을 제거해 주기 때문에 여러번 데이터를 삽입 해도 문제가 없다.
- MergeTree 테이블 엔진 참고: https://vprog1215.tistory.com/392
- Kafka
- 카프카 토픽에서 메시지를 직접 읽을수 있다.
- S3
- S3와 연동가능
1.7 ClickHouse 단점
- 트랜잭션 지원안함.
- 삽입된 데이터를 수정하거나 삭제하는 기능이 부족하다.
- 단건의 레코드를 조회하는경우에는 OLTP 보다 느리다.
2. 컨테이너 기반 ClickHouse 설치 및 실행
2.1 단일 컨테이너에 Clickhouse 설치 및 실행
~$ sudo docker run -d --name docker_sandbox -d clickhouse/clickhouse-server:latest
~$ sudo docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4a0cb13805ba clickhouse/clickhouse-server:latest "/entrypoint.sh" About a minute ago Up About a minute 8123/tcp, 9000/tcp, 9009/tcp docker_sandbox
~$ sudo docker exec -it 4a0cb13805ba bash
# 컨테이너 내부에서 clickhouse-client 입력하여 Clickhouse 실행
root@4a0cb13805ba:/# clickhouse-client
2.2 docker-compose를 활용하여 다중 컨테이너에 ClickHouse 설치 및 실행
- 3개의 ClickHouse 컨테이너를 생성하여 다중 노드 클러스터 환경에 Clickhouse를 구성하고, 단일 노드에 Zookeeper를 구성한다.
- docker-compose를 사용하여 Clickhouse를 실행하면 필요한 모든 컨테이너를 한번에 실행할 수 있으며, 브리지 네트워크를 사용하여 노드 간 네트워킹이 더 쉬워진다.
2.2.1 docker-compose.yml
version: '3'
services:
zookeeper:
image: 'bitnami/zookeeper:latest'
networks:
- ch_replicated
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
- ZOOKEEPER_CLIENT_PORT=2181
ports:
- "2182:2181"
- "2888:2888"
- "3888:3888"
clickhouse1:
image: clickhouse/clickhouse-server
volumes:
- /mnt/Data/ClickHouse1/data_dir:/var/lib/clickhouse
- /mnt/Data/ClickHouse1/clickhouse_config.xml:/etc/clickhouse-server/config.xml
ports:
- "8002:9000"
- "9123:8123"
ulimits:
nproc: 65535
nofile:
soft: 262144
hard: 262144
networks:
- ch_replicated
depends_on:
- zookeeper
clickhouse2:
image: clickhouse/clickhouse-server
volumes:
- /mnt/Data/ClickHouse2/data_dir:/var/lib/clickhouse
- /mnt/Data/ClickHouse2/clickhouse_config.xml:/etc/clickhouse-server/config.xml
ports:
- "8003:9000"
- "9124:8123"
ulimits:
nproc: 65535
nofile:
soft: 262144
hard: 262144
networks:
- ch_replicated
depends_on:
- zookeeper
clickhouse3:
image: clickhouse/clickhouse-server
volumes:
- /mnt/Data/ClickHouse3/data_dir:/var/lib/clickhouse
- /mnt/Data/ClickHouse3/clickhouse_config.xml:/etc/clickhouse-server/config.xml
ports:
- "8004:9000"
- "9125:8123"
ulimits:
nproc: 65535
nofile:
soft: 262144
hard: 262144
networks:
- ch_replicated
depends_on:
- zookeeper
clickhouse4:
image: clickhouse/clickhouse-server
volumes:
- /mnt/Data/ClickHouse4/data_dir:/var/lib/clickhouse
- /mnt/Data/ClickHouse4/clickhouse_config.xml:/etc/clickhouse-server/config.xml
ports:
- "8005:9000"
- "9126:8123"
ulimits:
nproc: 65535
nofile:
soft: 262144
hard: 262144
networks:
- ch_replicated
depends_on:
- zookeeper
networks:
ch_replicated:
driver: bridge
2.2.2 다중 노드 클러스터 환경에 Clickhouse를 구성하기 위한 config 파일 작성
- remote_servers 설정의 경우 다중 노드의 정보를 설정하는 부분이다.
- zookeeper 클러스터의 세부정보도 추가한다.
- 매크로 replica는 복제된 테이블에서 Zookeeper 경로를 구성하는데 사용된다. (macro 값은 노드마다 다르게 설정해주어야함)
→ ClickHouse의 샤딩 적용을 위한 macro 설정 방법은 다음 게시글 참고
- 기존 config.xml 파일에서 아래 내용을 참고하여 모든 노드에 추가해준다. (/mnt/Data/ClickHouse*/clickhouse_config.xml)
<remote_servers>
<!-- Test only shard config for testing distributed storage -->
<replicated_cluster>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>clickhouse1</host>
<port>9000</port>
</replica>
<replica>
<host>clickhouse2</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>clickhouse3</host>
<port>9000</port>
</replica>
<replica>
<host>clickhouse4</host>
<port>9000</port>
</replica>
</shard>
</replicated_cluster>
</remote_servers>
<zookeeper>
<node index="1">
<host>zookeeper</host>
<port>2181</port>
</node>
</zookeeper>
<macros>
<shard>01</shard>
<replica>ch1</replica>
</macros>
2.2.3 실행
~$ sudo docker-compose up
- 모든 컨테이너가 잘 작동하는지 확인
~$ sudo docker exec -it 159fe792769d bash
# 컨테이너 내부에서 clickhouse-client 입력하여 Clickhouse 실행
root@4a0cb13805ba:/# clickhouse-client -m
다음 게시글
https://daeunnniii.tistory.com/203
728x90
반응형
'Database > Clickhouse' 카테고리의 다른 글
Clickhouse에서의 Sharding (0) | 2024.11.16 |
---|