ClickHouse 簡單使用(一)


1 前言

1.1 簡介

ClickHouse是一個用於聯機分析(OLAP)的列式數據庫管理系統(DBMS)。在傳統的行式數據庫系統中,處於同一行中的數據總是被物理的存儲在一起。而在列式數據庫系統中,來自不同列的值被單獨存儲,來自同一列的數據被存儲在一起。

ClickHouse 有以下重要優勢:

1. 真正的面向列的數據庫管理系統。在真正的面向列DBMS中,沒有額外的數據與值一起存儲。

2. 數據壓縮。它提供了在磁盤空間和CPU消耗之間權衡取舍的壓縮編解碼器,

3. 獨特的數據磁盤存放方式。按照主鍵對數據進行物理排序,可以提取數據的特定值或值范圍的低延遲(小於幾十毫秒)。

4. 多核並行處理。使用當前服務器上所有可用的必要資源,使大型查詢自然而然地並行化。

5. 在多台服務器上進行分布式處理。在ClickHouse中,數據可以駐留在不同的分片上。每個分片可以是一組用於容錯的副本。

6.  SQL支持。 ClickHouse支持一種基於SQL的聲明式查詢語言,在許多情況下與ANSI SQL標准相同。

7. 向量計算引擎。數據不僅按列存儲,而且通過向量(列的一部分)進行處理,從而可以實現較高的CPU效率。

8. 數據復制和數據完整性支持。ClickHouse使用異步多主復制。寫入任何可用的副本后,所有其余副本在后台檢索其副本。系統在不同副本上維護相同的數據。

 

同時,它也有一些不足:

1. 不支持事務事務。

2. 缺乏以高速率和低延遲修改或刪除已插入數據的能力。但有批量刪除和更新可用於清理或修改數據。

3. 稀疏索引使得ClickHouse在點查詢中根據鍵檢索單行時效率不高。

ClickHouse的特性決定了它適合OLAP場景。本文將介紹clickhouse的基礎知識,常用功能和使用方法。

1.2實驗環境

服務器:

六台服務器,IP 地址和主機名分別如下:

 

IP地址

主機名

10.19.134.22

node01

10.19.134.23

node02

10.19.134.24

node03

10.19.134.25

node04

10.19.134.26

node05

10.19.134.27

node06

 

硬件:

 CPU:邏輯CPU 8個,

內存:32GB

 

操作系統:

CentOS 7.7

 

軟件:

yum

  ClickHouse 20.9.2.20

2 安裝ClickHouse

本文安裝的ClickHouse 20.9.2.20 ,需要以下依賴:

gcc 9.1

ninja 1.7.2

cmake 3.3

yum 3.4.3,並安裝了 Centos-7.repo 和 epel-7.repo

php

pthreads

    

我們分別介紹通過 yum 安裝和源碼安裝的方法。

2.1 通過yum 安裝

這個方法操作簡單,成功率高。

只需要執行如下幾條命令。

 

在中國:

yum install yum-utils

rpm --import https://mirrors.tuna.tsinghua.edu.cn/clickhouse/CLICKHOUSE-KEY.GPG

yum-config-manager --add-repo  https://mirrors.tuna.tsinghua.edu.cn/clickhouse/rpm/stable/x86_64

yum install clickhouse-server clickhouse-client

 

在國外:

yum install yum-utils

rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG

yum-config-manager --add-repo  https://repo.clickhouse.tech/rpm/stable/x86_64

yum install clickhouse-server clickhouse-client

 

安裝后,程序會創建操作系統用戶clickhouse.

2.2 源碼安裝

這種方法操作復雜,成功率低。

 

1. 首先,使用yum安裝依賴組件:

yum -y install gcc

yum -y install gcc-c++

yum -y install zlib

yum -y install zlib-devel

yum -y install libtool

yum -y install -y libstdc++-static

yum -y install -y readline-devel

yum -y install -y libicu-devel

 

2. 安裝 cmake 3.3 以上的版本

2.1 下載 cmake 3.3 以上的版本。這里我們下載cmake-3.19.0-rc1.tar.gz.

2.2 解壓這個包,並進入解壓后的目錄

tar zxvf cmake-3.19.0-rc1.tar.gz.

2.3 編譯並安裝

./bootstrap

make && make install

 

3. 安裝 gcc 9.0

3.1 下載gcc 源碼,版本9.0以上。

wget https://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz

 

3.2 解壓文件包並進入解壓后的目錄:

tar zxvf gcc-9.1.0.tar.gz

cd gcc-9.1.0

 

3.3 執行腳本download_prerequisites,下載所依賴庫。

./contrib/download_prerequisites

或者手動將這些包下載到gcc源碼的目錄中,然后解壓,並創建如下軟連接。

tar zxvf mpc-1.0.3.tar.gz

tar jxvf gmp-6.1.0.tar.bz2

tar jxvf isl-0.18.tar.bz2

tar jxvf mpfr-3.1.4.tar.bz2

ln -sf mpc-1.0.3 mpc

ln -sf gmp-6.1.0 gmp

ln -sf isl-0.18 isl

ln -sf mpfr-3.1.4 mpfr

 

3.4 編譯前配置

./configure --enable-languages=c,c++ --disable-multilib --disable-checking

 

3.5 擴大交換分區。gcc 的編譯和安裝需要很大的存儲空間。

SWAP=/tmp/swap

dd if=/dev/zero of=$SWAP bs=1M count=500

mkswap $SWAP

swapon $SWAP

 

3.6 編譯,這會花費1個小時左右的時間。

make -j 16

 

3.7之后正式安裝

make install

 

3.8 完成上述過程后,gcc會安裝到 /usr/local/bin。進入這個目錄,創建如下軟鏈接

ln -sf /usr/local/bin/gcc /usr/local/bin/gcc-9

ln -sf /usr/local/bin/g++ /usr/local/bin/g++-9

ln -sf /usr/local/bin/gcc /usr/local/bin/cc

ln -sf /usr/local/bin/g++ /usr/local/bin/c++

 

3.9 將動態庫 libstdc++.so 復制到 /usr/lib64 目錄中。對於gcc-9.1 需要復制的是 libstdc++.so.6.0.26。

cp ./x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/ libstdc++.so.6.0.26 /usr/lib64

 

3.10 在/usr/lib64中創建指向libstdc++.so.6.0.26的軟鏈接:

cd /usr/lib64

rm -f libstdc++.so.6

ln -s libstdc++.so.6.0.26 libstdc++.so.6

 

4. 安裝 clickhouse

4.1 聲明如下環境變量:

export CC=gcc-9

export CXX=g++-9

 

4.2 下載 ClickHouse源碼。本文下載的版本是20.9.2.20。

4.3 解壓這個包,並進入解壓后的目錄

tar ClickHouse-20.9.2.20-stable.tar.gz

cd ClickHouse-20.9.2.20-stable

    

4.4 編譯並安裝

mkdir build

cd build

cmake ..

ninja

 

4.5 安裝后,創建用戶clickhouse,用戶組clickhouse。

groupadd -g 993 clickhouse

useradd -g clickhouse --no-create-home -d /nonexistent --shell /bin/false clickhouse

3 配置

ClickHouse 的配置文件位於etc/clickhouse-server/中。ClickHouse支持多配置文件管理。主配置文件是 /etc/clickhouse-server/config.xml。其余文件在目錄 /etc/clickhouse-server/config.d中。

這一章介紹一些基本的配置。第8章會介紹一些針對特定的場景的配置。

 

1. 在初次安裝的clickhouse 中,配置監聽的地址。具體方法是編輯 /etc/clickhouse-server/config.xml,在 <yandex>…</yandex> 內部,配置listen_host。

例如:

<listen_host>::</listen_host>

表示監聽所有ip地址。

 

  配置參數詳見服務器配置

 

2. clickhouse的默認的用戶是“default”,初始是沒有密碼的。為了安全起見,應該為用戶 “default”設置密碼,還應該創建自定義的用戶。

為 default 設置密碼的方法:

1. 獲取自定義密碼的SHA256密文形式。

我們可以自己設置密碼。例如,這里密碼的明文為“default”,則獲取密文的方法如下:

[root@node01 ~]# echo -n "default" | sha256sum | tr -d '-'

37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f

 

也可以生成隨機的密碼:

[root@node01 ~]# PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'

O96NIXfx

094c52130fd080481d988e02bd8fc2226ab12d2ec335a5993b6f3e2188c05337

 

上面的兩行結果分別是是明文密碼和密文密碼。

 

2. 編輯 users.xml,在yandex-> users->default中新增條目 <password_sha256_hex>,內容是上一步獲得的密文密碼,例如:

<password_sha256_hex>37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f </password_sha256_hex>

    

它也支持明文密碼,標簽是 <password>,但安全性不如密文密碼。

 

3. 創建自定義用戶。編輯文件 users.xml,在yandex -> users中,新增用戶。本文中添加用戶 clickhouse,密碼是clickhouse。

<clickhouse>

<password_sha256_hex>7e099f39b84ea79559b3e85ea046804e63725fd1f46b37f281276aae20f86dc3</password_sha256_hex>

        <access_management>1</access_management>

        <networks incl="networks" replace="replace">

            <ip>::/0</ip>

        </networks>

        <profile>default</profile>

        <quota>default</quota>

     </clickhouse>

 

這里 access_management是一個很重要的參數,如果值為1,則表示用戶是超級用戶。如果值為或沒有配置,則用戶只能登錄。除非這個用戶得到超級用戶的授權。

 

4. 如果希望更安全,可以取消屬主以外用戶的對配置文件的讀寫權限。

cd /etc/clickhouse-server

chmod o-rwx *

 

5. 重啟數據庫即可

systemctl restart clickhouse-server.service


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM