什么是ClickHouse
ClickHouse是一个由俄罗斯最大的搜索公司Yandex开源的列式数据库(DBMS),主要用于在线分析处理查询(OLAP),于2016年开源,采用C++开发。凭借优秀的性能,市场反应非常热烈。
相对行式数据库,像Mysql、Oracle、SqlServer等都是行式存储,是把同一行的数据放到相邻同一数据块种,而列式存储是把同一列的数据放到相邻同一数据块种,这样在进行计算类查询时,可以大大减少IO消耗,返回结果更快,采用列式存储后在进行数据记录写入的时候会麻烦一些。
列式数据库VS 行式数据库
image.png
列式存储的主要优点之一就是可以大幅降低系统的I/O,尤其是在海量数据查询时,I/O向来是系统的主要瓶颈之一。通过下面这张图,相信大家能够彻底明白这一点。
image.png
ClickHouse 很多大厂都在用,本篇主要使用Docker进行安装
安装配置
- 创建目录并更改权限
mkdir -p /app/cloud/clickhouse/data mkdir -p /app/cloud/clickhouse/conf mkdir -p /app/cloud/clickhouse/log chmod -R 777 /app/cloud/clickhouse/data chmod -R 777 /app/cloud/clickhouse/conf chmod -R 777 /app/cloud/clickhouse/log
- 拉取镜像
docker pull yandex/clickhouse-server:20.3.5.21
查看 https://hub.docker.com/r/yandex/clickhouse-server/dockerfile 文件,EXPOSE 9000 8123 9009 了三个端口,而宿主机9000端口已被 MinIO 对象存储服务器占用,所以创建容器暴露该端口用9090替换
root@jazz-pc:~# docker ps --format "table {{.Names}} ------> {{.Ports}}" | grep minio minio ------> 0.0.0.0:9000->9000/tcp
- 创建临时容器
docker run --rm -d --name=clickhouse-server \ --ulimit nofile=262144:262144 \ -p 8123:8123 -p 9009:9009 -p 9090:9000 \ yandex/clickhouse-server:20.3.5.21
- 复制临时容器内配置文件到宿主机
docker cp clickhouse-server:/etc/clickhouse-server/config.xml /app/cloud/clickhouse/conf/config.xml docker cp clickhouse-server:/etc/clickhouse-server/users.xml /app/cloud/clickhouse/conf/users.xml
- 停掉临时容器
docker stop clickhouse-server
- 创建default账号密码
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
会输出明码和SHA256密码 SEGByR98 211371f5bc54970907173acf6facb35f0acbc17913e1b71b814117667c01d96d
- 创建root账号密码
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
会输出明码和SHA256密码 092j3AnV 35542ded44184b1b4b6cd621e052662578025b58b4187176a3ad2b9548c8356e
- 修改 /app/cloud/clickhouse/conf/users.xml
把default账号设为只读权限,并设置密码 yandex-->users-->default-->profile 节点设为 readonly 注释掉 yandex-->users-->default-->password 节点 新增 yandex-->users-->default-->password_sha256_hex 节点,填入生成的密码 - 新增root账号
<root> <password_sha256_hex>35542ded44184b1b4b6cd621e052662578025b58b4187176a3ad2b9548c8356e</password_sha256_hex> <networks incl="networks" replace="replace"> <ip>::/0</ip> </networks> <profile>default</profile> <quota>default</quota> </root>
- 创建容器
docker run -d --name=clickhouse-server \ -p 8123:8123 -p 9009:9009 -p 9090:9000 \ --ulimit nofile=262144:262144 \ -v /app/cloud/clickhouse/data:/var/lib/clickhouse:rw \ -v /app/cloud/clickhouse/conf/config.xml:/etc/clickhouse-server/config.xml \ -v /app/cloud/clickhouse/conf/users.xml:/etc/clickhouse-server/users.xml \ -v /app/cloud/clickhouse/log:/var/log/clickhouse-server:rw \ yandex/clickhouse-server:20.3.5.21
- 用 DataGrip 连接
- 用 dbeaver 连接
附录:
- 中文社区 http://www.clickhouse.com.cn/
- 中文文档 https://clickhouse.tech/docs/zh/
- Meetup https://github.com/ClickHouse-China/ClickhouseMeetup
好了,各位朋友们,本期的内容到此就全部结束啦,能看到这里的同学都是优秀的同学,下一个升职加薪的就是你了!