clickhouse简介
ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的用于在线分析处理查询(OLAP :Online Analytical Processing)MPP架构的列式存储数据库(DBMS:Database Management System),能够使用 SQL 查询实时生成分析数据报告。ClickHouse的全称是Click Stream,Data WareHouse。
clickhouse可以做用户行为分析,流批一体
线性扩展和可靠性保障能够原生支持 shard + replication
clickhouse没有走hadoop生态,采用 Local attached storage 作为存储
ClickHouse特性
1.真正的列式数据库
2.数据压缩
3.数据的磁盘存储
4.多核并行处理
5.多服务器分布式处理(数据保存在不同的shard上,每一个shard都由一组用于容错的副本组成,可并行查询所有shard)
6.向量引擎(按列的一部分进行处理,高效实用CPU)
7.实时的数据更新(支持在表中定义主键,数据增量有序存储在mergeTree中)
8.索引(按照主键对数据进行排序,毫秒内完成对数据的查找)
9.适合在线查询
10.支持近似计算(允许牺牲精度的情况下低延迟查询)
11.支持数据复制和数据完整性(异步多主复制技术)
ClickHouse缺点
1.没有完整的事务支持
2.缺少高频率低延迟的修改或删除数据的能力
3.不适合通过其检索单行的点查询
4.联机事物处理
5.二进制数据或文件存储
6.键值对数据高效率访问请求
ClickHouse核心概念
1.表引擎(Engine)
表引擎决定了数据在文件系统中的存储方式,常用的也是官方推荐的存储引擎是MergeTree系列,如果需要数据副本的话可以使用ReplicatedMergeTree系列,相当于MergeTree的副本版本。读取集群数据需要使用分布式表引擎Distribute。
2.表分区(Partition)
表中的数据可以按照指定的字段分区存储,每个分区在文件系统中都是都以目录的形式存在。常用时间字段作为分区字段,数据量大的表可以按照小时分区,数据量小的表可以在按照天分区或者月分区,查询时,使用分区字段作为Where条件,可以有效的过滤掉大量非结果集数据。
3.分片(Shard)
一个分片本身就是ClickHouse一个实例节点,分片的本质就是为了提高查询效率,将一份全量的数据分成多份(片),从而降低单节点的数据扫描数量,提高查询性能。
4. 复制集(Replication)
简单理解就是相同的数据备份,在CK中通过复制集,我们实现保障了数据可靠性外,也通过多副本的方式,增加了CK查询的并发能力。这里一般有2种方式:(1)基于ZooKeeper的表复制方式;(2)基于Cluster的复制方式。由于我们推荐的数据写入方式本地表写入,禁止分布式表写入,所以我们的复制表只考虑ZooKeeper的表复制方案。
5.集群(Cluster)
可以使用多个ClickHouse实例组成一个集群,并统一对外提供服务。
系统初始化
01.hosts文件配置
echo "10.100.21.81 clickhouse81" >> /etc/hosts
echo "10.100.21.82 clickhouse82" >> /etc/hosts
02.操作系统语言显示环境
echo "export LANG=en_US.UTF8" >> ~/.bash_profile
cat ~/.bash_profile
03.创建用户
mkdir /clickhouse
mount /clickhouse
mkdir /clickhouse/soft
groupadd -g 60002 clickhouse
useradd -u 61002 -g clickhouse clickhouse
chown -R clickhouse:clickhouse /clickhouse
chmod -R 775 /clickhouse
echo "clickhouse" | passwd --stdin clickhouse
04.启动级别修改
systemctl set-default multi-user.target
05.修改资源限制参数
cat >> /etc/security/limits.conf << EOF
root soft nofile 1048576
root hard nofile 1048576
clickhouse soft nproc 1048576
clickhouse hard nproc 1048576
clickhouse soft nofile 1048576
clickhouse hard nofile 1048576
clickhouse soft stack 10240
clickhouse hard stack 32768
clickhouse hard memlock unlimited
clickhouse soft memlock unlimited
EOF
06.修改内核参数
cat >> /etc/sysctl.conf << EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_mem= 786432 2097152 3145728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
vm.swappiness=1
vm.min_free_kbytes=204800
vm.overcommit_memory=0
EOF
sysctl -p
07.修改时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
08.配置安全
echo "SELINUX=disabled" > /etc/selinux/config
echo "#SELINUXTYPE=targeted " >> /etc/selinux/config
cat /etc/selinux/config
setenforce 0
09.关防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
10.关闭透明大页
cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvisenever
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvisenever
vi /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
chmod +x /etc/rc.d/rc.local
Clickhouse单机环境安装
01.创建目录
su - clickhouse
mkdir /clickhouse/app
mkdir /clickhouse/data
mkdir /clickhouse/log
mkdir /clickhouse/etc
mkdir /clickhouse/soft
02.软件安装
root:
上传软件到/clickhouse/soft
cd /clickhouse/app
tar zxvf /clickhouse/soft/clickhouse-common-static-22.6.1.1985-amd64.tgz
mv clickhouse-common-static-22.6.1.1985 clickhouse-common-static
./clickhouse-common-static/install/doinst.sh
tar zxvf /clickhouse/soft/clickhouse-common-static-dbg-22.6.1.1985-amd64.tgz
mv clickhouse-common-static-dbg-22.6.1.1985 clickhouse-common-static-dbg
./clickhouse-common-static-dbg/install/doinst.sh
tar zxvf /clickhouse/soft/clickhouse-server-22.6.1.1985-amd64.tgz
mv clickhouse-server-22.6.1.1985 clickhouse-server
./clickhouse-server/install/doinst.sh
tar zxvf /clickhouse/soft/clickhouse-client-22.6.1.1985-amd64.tgz
mv clickhouse-client-22.6.1.1985 clickhouse-client
./clickhouse-client/install/doinst.sh
cd /etc/
mv /etc/clickhouse-* /clickhouse/etc/
ls -ls /etc/click*
0 lrwxrwxrwx 1 root root 33 Dec 2 17:02 clickhouse-client -> /clickhouse/etc/clickhouse-client
0 lrwxrwxrwx 1 root root 33 Dec 2 17:02 clickhouse-server -> /clickhouse/etc/clickhouse-server
chown -R clickhouse:clickhouse /clickhouse
chmod -R 755 /clickhouse
03.启动clickhouse
su - clickhouse
cd /clickhouse/app
vi clickhouse.start
#!/bin/bash
nohup clickhouse-server --config=/etc/clickhouse-server/config.xml &
chmod 775 clickhouse.start
/clickhouse/app/clickhouse.start
su - clickhouse
clickhouse-client -h 10.100.21.81 --port 9000 --user default --password
[clickhouse@clickhouse81 ~]$ clickhouse-client -h 10.100.21.81 --port 9000 --user default --password
ClickHouse client version 22.6.1.1985 (official build).
Password for user (default):
Connecting to 10.100.21.81:9000 as user default.
Connected to ClickHouse server version 22.6.1 revision 54455.
Warnings:
• Linux threads max count is too low. Check /proc/sys/kernel/threads-max
• Maximum number of threads is lower than 30000. There could be problems with handling a lot of simultaneous queries.
clickhouse81 :) show databases;
SHOW DATABASES
Query id: ac610df8-fc6a-4098-843c-f6b6ea1823ca
┌─name───────────────┐
│ INFORMATION_SCHEMA │
│ default │
│ information_schema │
│ system │
└────────────────────┘
4 rows in set. Elapsed: 0.001 sec.
04.数据库忘记密码
cd /etc/clickhouse-server/users.d# 将默认用户配置文件重命名
mv default-password.xml default-password.xml.bak
echo -n 密码 | openssl dgst -sha256
[clickhouse@clickhouse81 users.d]$ echo -n 123456 | openssl dgst -sha256
(stdin)= 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
cp default-password.xml.bak default-password.xml
vim default-password.xml
修改密码
<clickhouse>
<users>
<default>
<password remove='1' />
<password_sha256_hex>8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92</password_sha256_hex>
</default>
</users>
</clickhouse>
clickhouse restart