背景
我司今年要立个小的科研项目,前几个项目做完之后数据有了(物联网数据),基于数据也有些简单的图表报表显示了,领导要求今年搞一下,如何基于此可以做些大数据分析,请教了原来大佬同事,给指了条道。让看看clickhouse,所以,井底小蛙的我划分了下学习计划:
(1)什么是clickhouse,能解决啥问题
(2)动手搭建一下,安装部署启动了解一下
(3)客户端的身份介入看看效果
(4)程序连一波combo三连试,看看跑得灵否。
在学习到第三步时,我就跑去问大佬,有啥好用的可视化客户端不?大佬说著名的superset了解下。
接着我又把情况和大致想搭的架构和大佬絮叨了一下:想着从kafka拉数据,然后用ck做批处理(历史数据分析 用),用flink+redis做实时数据的处理,包括指标排名类并存储到redis中去。大佬给说flink+redis是上古之路了,不如去了解下kafka table -》engine merge tree table,这个可以做实时分析,即kafka+ck 可以搞定一切了~~
经大佬提点,如获至宝,下午赶紧在补一下缺少的知识。感谢我领导,给我时间让我探索,杠杠地nice
1.Clickhouse初识
1.1 clickhouse简介
ClickHourse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)是Yandex公司产品,俄语支持最大的搜索引擎,基于点击数据流 click stream的data house数据仓库
1.2 clickhouse特点
- 支持SQL、DDL、DML语句内置数百个函数
- 接口丰富,提供TCP、HTTP、提供JDBC、CLI等 封装接口,支持JAVA、Python、NodeJS等众多第三方接口
- 在线查询:实时应答,无需预处理。支持立方体预聚合
- 分布式:MPP架构,支持集群模式,支持数据分区、分片、副本
- 高性能:列存、高压缩、向量化引擎,单机部署,就有高性能
- 安全可靠:熔断机制、防误删机制(eg:超过50G数据不许删除)
- 权限:客户端接入权限、资源访问权限、操作访问权限、数据行级权限
- 面各表编程,包括代理访问外部资源(eg:Zookeeper、文件等 )
2.Clickhouse 适应场景与不适合场景
- 宽表(<10000列),结构化数据
- 查询QPS相对较低,但是每个请求的数据使用量很高
- 可应用于BI、电信、金融、电子商务、信息安全、网络游戏、物联网等领域
- 不适合场景:(1)OLTP场景(2)Key-Value数据库
3.Clickhouse 安装
3.1 安装包下载地址
rpm安装包地址:https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/;
其它参考官网安装描述;
也可以从以下地址找到需要安装的版本进行安装
3.2 安装包列表描述
- clickhouse-common-static:clickhouse编译的二进制文件
- clickhouse-server:创建clickhouse-server软连接,并按装默认配置服务
- clickhouse-client:创建clickhouse-client客户端工具软连接,并安装客户端配置文件
- clickhouse-common-static-dbg:带有调试信息的clickhouse二进制文件
3.3 安装与部署
3.3.1 系统要求
clickhouse需要在具有SSE 4.2指令集的系统上进行安装,通过以下命令查看系统CPU是否支持SSE4.2命令 ,如果不支持需要额外下载预编译的安装包,可参看官网描述
$ grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
3.3.2 下载安装包并安装
由于我们服务器无法连接外网,所以选择离线方式安装
执行安装命令
rpm -ivh /data/soft/clickhouse-*.rpm
安装完成后提示安装完成[100%]中间如出错,可自查安装依赖,补齐安装即可。通过如下命令可查看安装路径;
小知识补充:Linux系统中目录结果如下所说明
/bin: 存放常用普通命令
/sbin:存放管理员常用的命令
/lib:系统依赖的动态链接库
/sys:系统文件
/etc:存放系统配置文件
/usr:用户安装的应用程序
/var: 日志文件存放
系统的配置文件存在etc下面,可以进入相应路径查看其配置信息
配置信息包括大至内容如下所示:
1.logger :日志信息配置
2.http_port:默认是8123
3.tpc_port: 默认是9000
4.openSSL: ssl的认证配置
5.listen_host:对外提供服务的监听地址,需要把这里注释打开
6.path </var/lib/clickhouse>: 这上是存数据文件的路径,通常可以自定义
7.remote_server:配置clusters用到的
启动服务
两种启动方式,一种手动指一配置文件的方式启动;另一种通过service方式启动,如下命令所示:
(1)sudo -u clickhouse clickhouse-server --config-file=/etc/clickhouse-server/config.xml
注:直接用clickhouse-server --config-file=/etc/clickhouse-server/config.xml启动时报错,提示用sudo -u clickhouse启动,可以按说明填加参数,启动即可如上成功了
(2) /etc/init.d/clickhouse-server start 或 systemctl start clickhouse-server
通过ps -ef |grep clickhouse可以看到进程启动成功
若要停止服务也可以通过服务的方式/etc/init.d/clickhouse-server stop
来停止
客户端连接
通过命令clickhouse-clinet
可以直接连接server了如下图所示:
最后有一句异常提示Code: 210. DB::NetException: Connection refused (localhost:9000)
,需要修改配置文件注释桌红框中内容,放开蓝框中内容,重启服务再次尝试
至此为止,安装与服务启动成功了,这次真的成功了,见图如下:
创建数据库并建表
根据官网描述,clickhouse-client后直接复制了创建数据库的语句CREATE DATABASE IF NOT EXISTS tutorial
创建成功后,接着复制了创建表的语句(建表的时候指定数据类型,建表的时候一定要指定表引擎),结果报错了,原因是clickhouse-client只能执行一行名语,如果要执行多行,需要后面加上-m参数。以下是常用到的命令
clickhouse client -m 执行多行语句时,需要加-m
show databases; 查看数据库
create database tutorial; 创建一个数据库
drop database tutorial; 删除数据库
show tables: 查看表
select currentDatabase(); 查看当前数据库
use tutorial; 选择使用数据库db_zltest
desc hits_v1 ; 查看表结构
官网离线下载了数据示例:hits_v1和visits_v1,并通过tar xvf *.tar /data/clickhouse #path to ClickHouse data directory
导入数据后重启服务service clickhouse-server restart
。通过语句SELECT COUNT(*) FROM datasets.hits_v1
查询是否导入数据成功