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

posted @ 2021-02-06 11:59  草色青青送马蹄  阅读(1881)  评论(0编辑  收藏  举报