ClickHouse安装和使用技巧

一、简介

ClickHouse是“战斗民族”俄罗斯搜索巨头Yandex公司开源的一个极具"战斗力"的实时数据分析数据库,是面向 OLAP 的分布式列式DBMS。ClickHouse有一个简称"CK",与Hadoop、Spark这些巨无霸组件相比,ClickHouse很轻量级,其特点:

  • 列式存储数据库,数据压缩
  • 关系型、支持SQL
  • 分布式并行计算,把单机性能压榨到极限
  • 高可用
  • 数据量级在PB级别
  • 实时数据更新
  • 索引

ClickHouse最大的特点就是快,快,快,重要的话说三遍。为啥这样快呢?

  • 优秀的代码编写,强⼤的底层优化,严格的单元测试,内置300多个函数
  • A vector engine & Code generation
  • CPU底层指令集的使⽤
  • C++新特性

其实关于性能,可以参考这两篇:

CK出众的原因也跟其引擎有关,合并树(MergeTree)系列的引擎通过主键进行字典序排列. 主键可以是列或表达式的任意 tuple。数据按照主键顺序存储数据,主键自身是稀疏的,它不定位到每一行,而是一些数据范围,当我们从MergeTree引擎中读取数据时,首先定位了可能包含请求数据的范围,要注意的合并树不是一个LSM树,因为它不包含内存表 和日志,插入的数据直接写入到文件系统,在生产环境中,写入的话主要以批量插入数据为主。在查询过程中,数据通过数组来处理(向量或者列Chunk),查询时,操作被转发到数组上,而不是在特定的值上。因此被称为”向量化查询执行”,相对于实际的数据处理成本,向量化处理具有更低的转发成本。

二、单机部署

机器环境是ubuntu18.04LTS联网安装不支持,采用离线下载安装。

1. 离线下载安装包

http://repo.yandex.ru/clickhouse/deb/stable/main/

clickhouse-server-base_1.1.54385_amd64.deb

clickhouse-server-common_1.1.54385_amd64.deb

clickhouse-client_1.1.54385_amd64.deb

2. 执行安装

依次安装上述安装包

sudo dpkg -i clickhouse-server-base_1.1.54385_amd64.deb

sudo dpkg -i clickhouse-server-common_1.1.54385_amd64.deb

sudo dpkg -i clickhouse-client_1.1.54385_amd64.deb

3. 启动

sudo service clickhouse-server start

clickhouse-client

ClickHouse安装和使用技巧_第1张图片

三、配置

默认配置文件存放在:/etc/clickhouse-server

1. 远程访问

sudo vi /etc/clickhouse-server/config.xml

去掉::注释

2. 内存限制设置

sudo vi /etc/clickhouse-server/users.xml

修改500000000000

三、数据插入

1. 建表

MergeTree和Log引擎是clickhouse常见的两种引擎,以Log为例:

create table default.user(uid UInt32,ceil String,qq String,age UInt32,birthday String,height Float32,is_married Float32,duration_of_menstruation UInt32,menstrual_cycle UInt32,star_sign UInt32,weight Float32,province String,city String,recipient String,recip_ceil String) engine=Log;

2. 导入

clickhouse-client --query "insert into default.user format CSV" < user_pro.csv

3. jdbc一键导入

mysql数据表可以直接导入clickhouse,如下:

CREATE TABLE user_pro

ENGINE = MergeTree

order by uid as

select * from mysql('lee:port', 'meiyou', 'user_pro', 'root', 'gitgitgit')

4. 查询性能测试

select star_sign,count(1) from user_pro group by star_sign;

mysql性能:

ClickHouse安装和使用技巧_第2张图片

clickhouse性能:

ClickHouse安装和使用技巧_第3张图片

 

msyql

clickhouse

速度(sec)

0.36

0.008

clickhouse语法和mysql有些不同,需要额外注意写。如最常用的join,clickhouse要加别名(alias),using替换on,any left join替换join等。

mysql写法:

select city,star_sign,uid,ceil,height,weight,aht,awt from

(select uid,ceil,city,star_sign,height,weight from user_pro) t1

join

(select city,star_sign,avg(height) aht,avg(weight) awt from user_pro group by city,star_sign) t2

on t1.city = t2.city and t1.star_sign = t2.star_sign;

clickhouse写法:

select city,star_sign,uid,ceil,height,weight,aht,awt from

(select uid,ceil,city,star_sign,height,weight from user_pro)

any left join

(select city,star_sign,avg(height) AS aht,avg(weight) AS awt from user_pro group by city,star_sign)

using (city,star_sign);

参考文献

https://www.csdn.net/article/2018-01-14/2826786-ClickHouse

https://blog.csdn.net/m0_37739193/article/details/79611560

你可能感兴趣的:(hadoop)