ClickHouse初始+安装


ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。  

一、特点

1.列式存储

对于列的聚合,计数,求和等统计操作优于行式存储 由于某一列的数据类型都是相同的,针对数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。 由于数据压缩比较好,一方面节省了磁盘空间,另一方面对cache也有很大的发挥空间  

2.DBMS的功能

几乎覆盖了标准SQL的大部分语法,包括DDL和DML,以及配套的各种函数,用户管理及权限管理,数据的备份与恢复  

3.多样化引擎

clickhouse和MySQL类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树、日志、接口和其它四大类20多种引擎  

4.高吞吐写入能力

clickhouse采用类LSM Tree的结构,数据写入后定期在后台compaction。通过类LSM Tree的结构,clickhouse在数据导入时全部是顺序append写,写入后数据段不可更改,在后台compaction时也是多个段merge sort后顺序写会磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,即便在HDD上也有着优异的写入性能。 官方公开benchmark测试显示能够达到50MB-200MB/s的写入吞吐能力,按照每行100byte估算,大约相当于50w-200w条/s的写入速度  

5.数据分区与线程级并行

clickhouse将数据划分为多个partition,每个partition再进一步划分为多个index granularity(索引粒度),然后通过多个CPU核心分别处理其中的一部分来实现并行数据处理。在这种设计下,单条query就能利用整机所有CPU。极致的并行处理能力,极大的降低了查询延时。 所以,clickhouse即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多CPU,就不利于同时并发多条查询。所以对高QPS的查询业务,clickhouse并不是强项。   适合存储大宽表,基于大宽表的聚合操作  

6.对比

单表查询   关联查询(尽量避免join) 关联时会将右表加载到内存,和左表比对   结论:clickhouse像很多OLAP数据库一样,单表查询速度优于关联查询,而且clickhouse的两者差距更为明显。    

二、安装部署

 

1.环境准备

  Centos操作: 查看系统限制
ulimit -a
MacBook-Pro:bin FengZhen$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2560
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8176
cpu time               (seconds, -t) unlimited
max user processes              (-u) 5333
virtual memory          (kbytes, -v) unlimited
修改资源限制
vim /etc/security/limits.conf
fengzhen@group soft noffile 65536
fengzhen@group hard noffile 65536
fengzhen@group soft nproc 131072
fengzhen@group hard nproc 131072 
第一列标记用户,如果为所有用户标记,直接* 第二列soft、hard,强软限制,一般软<=硬,标记-则表示两者一起配置,值相同 第三列 noffile:可打开文件数    nproc:进程数 第四列具体数值  
vim /etc/security/limits.d/20-nproc.conf
将上边四行也放入这个里边 上述配置重新登录即可   安装依赖
yum install -y libtool
yum install -y *unixODBC*
  centos取消selinux
vim /etc/selinux/config
SELINUX=disabled
默认是enforcing开启状态 查看:getenforce 临时生效:setenforce 0(关闭) 1(开启)     *MacOS操作:
vim /Library/LaunchDaemons/limit.maxfiles.plist
 
#添加以下内容
<?xml version="1.0" encoding="UTF-8"?>
"-//Apple//DTD PLIST 1.0//EN"
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
"1.0">
  
    Label
    <string>limit.maxfilesstring>
    ProgramArguments
    
      <string>launchctlstring>
      <string>limitstring>
      <string>maxfilesstring>
      <string>524288string>
      <string>524288string>
    
    RunAtLoad
    <true/>
    ServiceIPC
    <false/>
  

 
# 然后执行以下命令
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
 
# 然后重启,通过 ulimit -n看是否生效
ulimit -n

2.安装

A.Mac【启动失败】

wget 'https://builds.clickhouse.com/master/macos-aarch64/clickhouse' chmod a+x ./clickhouse ./clickhouse  

A.Mac + docker【启动失败】

拉取服务端 docker pull yandex/clickhouse-server 拉取客户端 docker pull yandex/clickhouse-client   启动容器
docker run -d --name ck-server --ulimit nofile=262144:262144 -p 8123:8123 -p 9000:9000 -p 9009:9009 --volume=/Users/FengZhen/Desktop/Hadoop/clickhouse/some_clickhouse_database:/var/lib/clickhouse -v /Users/FengZhen/Desktop/Hadoop/clickhouse/etc/:/etc/clickhouse-server/ yandex/clickhouse-server
  修改/etc/config.xml 注释去掉::,表示不做IP限制 重启   报错
MacBook-Pro:clickhouse FengZhen$ docker logs -f -t --since="2018-03-31" --tail=100 ck-server
2022-03-31T08:38:29.202014966Z Configuration file '/etc/clickhouse-server/config.xml' isn't readable by user with id '101'
  查看服务 $ docker ps 进入到这个容器中 $ docker exec -it ck-server /bin/bash 然后执行 $ clickhouse-client 进入容器成功,再执行 :) show databases;  即可查看数据库   测试 CREATE TABLE default.user_table(id UInt16, name String, age UInt16 ) ENGINE = TinyLog();  

B.centos-自动

sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo sudo yum install -y clickhouse-server clickhouse-client   sudo /etc/init.d/clickhouse-server start clickhouse-client # or "clickhouse-client --password" if you set up a password.  

C.centos-手动【推荐】

下载安装包
https://packages.clickhouse.com/rpm/stable/
 
clickhouse-client-22.3.2.2-2.noarch.rpm
clickhouse-common-static-22.3.2.2-2.x86_64.rpm
clickhouse-common-static-dbg-22.3.2.2-2.x86_64.rpm
clickhouse-server-22.3.2.2-2.noarch.rpm
  20.5版本:final支持多线程 20.6.3版本:支持explain 20.8:新引擎:实时同步MySQL   clickhouse目录下:
rpm -ivh *.rpm
会提示输入密码,用户:default 1234qwer   确认是否安装
rpm -qa|grep clickhouse
[root@superset-BI rpm]# rpm -qa|grep clickhouse
clickhouse-client-22.3.2.2-2.noarch
clickhouse-common-static-22.3.2.2-2.x86_64
clickhouse-server-22.3.2.2-2.noarch
clickhouse-common-static-dbg-22.3.2.2-2.x86_64
  默认路径
conf -> /etc/clickhouse-server /etc/clickhouse-client 
bin -> /usr/bin/
lib -> /val/lib/clickhouse
log -> /var/log/clickhouse
  查看/etc/clickhouse-server目录下文件
cd /etc/clickhouse-server
[root@superset-BI clickhouse-server]# ll
总用量 80
dr-x------ 2 clickhouse clickhouse  4096 3月  31 18:19 config.d
-r-------- 1 clickhouse clickhouse 61569 3月  18 01:01 config.xml
dr-x------ 2 clickhouse clickhouse  4096 3月  31 18:19 users.d
-r-------- 1 clickhouse clickhouse  6248 3月  18 01:01 users.xml
 
config.xml    服务端配置
users.xml    参数配置(CPU、最大内存使用量)
  上述两个文件为只读,添加可编辑权限
chmod +w config.xml 
chmod +w users.xml 
  取消IP限制
vim config.xml
不对IP做限制
::
  数据目录,可以自己修改,不建议改
/val/lib/clickhouse
  日志
trace
/var/log/clickhouse-server/clickhouse-server.log
/var/log/clickhouse-server/clickhouse-server.err.log
    常用命令
sudo clickhouse start
sudo clickhouse status
sudo clickhouse stop
sudo clickhouse restart
  启动
[root@superset-BI clickhouse-server]# sudo clickhouse start
 chown -R clickhouse: '/var/run/clickhouse-server/'
Will run su -s /bin/sh 'clickhouse' -c '/usr/bin/clickhouse-server --config-file /etc/clickhouse-server/config.xml --pid-file /var/run/clickhouse-server/clickhouse-server.pid --daemon'
Waiting for server to start
Waiting for server to start
Server started
 
[root@superset-BI clickhouse-server]# sudo clickhouse status
/var/run/clickhouse-server/clickhouse-server.pid file exists and contains pid = 19428.
The process with pid = 19428 is running.
  启动成功后使用client连接(端口默认9000) clickhouse-client     -m:支持换行     -h:主机名     -p:端口     --password:如果配置了密码     --query:可直接写SQL    
clickhouse-client -m --password
[root@superset-BI ~]# clickhouse-client -m --password
ClickHouse client version 22.3.2.1.
Password for user (default):
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 22.3.2 revision 54455.
superset-BI :)

建表测试

superset-BI :) CREATE TABLE default.user_table(id UInt16, name String, age UInt16 ) ENGINE = TinyLog();
CREATE TABLE default.user_table
(
    `id` UInt16,
    `name` String,
    `age` UInt16
)
ENGINE = TinyLog
Query id: 42ed57fd-76a1-4996-be45-d47804b1c013
Ok.
0 rows in set. Elapsed: 0.011 sec. 
superset-BI :) show tables in default;
SHOW TABLES FROM default
Query id: 74e494da-566e-46ae-a32d-4cfca95e363d
┌─name───────┐
│ user_table │
└────────────┘
1 rows in set. Elapsed: 0.002 sec. 

成功。