ClickHouse简介及安装
Tags: ClickHouserpm安装yum安装环境搭建
简介
近几年很火的ClickHouse是俄罗斯的Yandex在2016年开源的列式数据库,软件使用的是C++语言编写,主要使用的场景是OLAP(在线分析领域),能够用SQL语句实时的生成分析报表。
ClickHouse 是一个用于联机分析 (OLAP) 的列式数据库管理系统 (DBMS)。来自于 2011 年在纳斯达克上市的俄罗斯本土搜索引擎企业 Yandex 公司,诞生之初就是为了服务 Yandex 公司自家的 Web 流量分析产品 Yandex.Metrica,后来经过演变,逐渐形成为现在的 ClickHouse,全称是:Click Stream,Data WareHouse
ClickHouse 官网:https://clickhouse.tech/,它具有 ROLAP、在线实时查询、完整的 DBMS 功能支持、列式存储、不需要任何数据预处理、支持批量更新、拥有非常完善的 SQL 支持和函数、支持高可用、不依赖 Hadoop 复杂生态、开箱即用等许多特点。
在 1 亿数据集体量的情况下,ClickHouse 的平均响应速度是 Vertica 的 2.63 倍、InfiniDB 的 17 倍、MonetDB 的 27 倍、Hive 的 126 倍、MySQL 的429 倍以及Greenplum 的 10 倍。详细的测试结果可以查阅:https://clickhouse.tech/benchmark/dbms/。
ClickHouse 非常适用于商业智能领域(也就是我们所说的 BI 领域),除此之外,它也能够被广泛应用于广告流量、Web、App 流量、电信、金融、电子商务、信息安全、网络游戏、物联网等众多其他领域。
ClickHouse 是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域。目前国内社区火热,各个大厂纷纷跟进大规模使用:
今日头条内部用 ClickHouse 来做用户行为分析,内部一共几千个 ClickHouse 节点,单集群最大 1200 节点,总数据量几十 PB,日增原始数据300TB 左右。
腾讯内部用 ClickHouse 做游戏数据分析,并且为之建立了一整套监控运维体系。
携程内部从 18 年 7 月份开始接入试用,目前 80% 的业务都跑在 ClickHouse 上。每天数据增量十多亿,近百万次查询请求。
快手内部也在使用 ClickHouse,存储总量大约 10PB, 每天新增 200TB, 90% 查询小于 3S。
ClickHouse 缺点:
1、没有完整的事务支持
2、稀疏索引导致 ClickHouse 不擅长细粒度或者 key-value 类型数据的查询需求
3、缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据
4、不擅长 join 操作
以下两幅图来自于官方,展示了行式数据库和列式数据库工作模式的的不同。
行式
列式
列存的好处如下:
比如在I/O方面,针对分析类查询,通常只需要读取表的一小部分列,在列式数据库中你可以只读取你需要的数据。例如,如果只需要读取100列中的5列,这能帮助你最少减少20倍的I/O消耗。由于数据总是打包成批量读取的,所以压缩是非常容易的。同时数据按列存储这也更容易压缩,可以进一步降低I/O容量。由于I/O的降低,也会帮助更多的数据被系统缓存。
在CPU方面,由于执行一个查询需要处理大量的行,因此在整个向量上执行所有操作将比在每一行上执行所有操作更加高效。关于向量执行引擎(Vectorized execution engine),其实是对内存中的列式数据,一个batch调用一次SIMD指令。可以减少函数调用次数、降低了cache miss,充分发挥SIMD指令的并行能力,大幅缩短了计算耗时。
https://github.com/ClickHouse/ClickHouse/releases
安装
ClickHouse 可以通过源码编译、预编译压缩包、Docker 镜像和 RPM 等多种方法进行安装。
安装包:
https://packagecloud.io/Altinity/clickhouse
https://repo.clickhouse.tech/tgz/
ClickHouse需要使用SSE硬件指令集加速,大大加快了CPU寄存器计算效率,所以,安装ClickHouse之前先要检查是否支持SSE4.2
指令集。
1 2 | [root@lhrclickhouse /]# grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported"|| echo "SSE 4.2 not supported" SSE 4.2 supported |
yum安装
https://packagecloud.io/Altinity/clickhouse/install#bash-rpm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | docker run -d --name lhrclickhouse -h lhrclickhouse \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.2 \ /usr/sbin/init -- 配置yum源 curl -s https://packagecloud.io/install/repositories/Altinity/clickhouse/script.rpm.sh | sudo bash -- 安装 yum install -y clickhouse-server clickhouse-client -- 会需要如下几个安装包 clickhouse-server 35 M clickhouse-common-static 66 M clickhouse-server-common 14 k clickhouse-client 6.2k -- 启动 /sbin/chkconfig clickhouse-server on /etc/init.d/clickhouse-server start /etc/init.d/clickhouse-server status |
简单使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | [root@lhrclickhouse /]# clickhouse-client ClickHouse client version 20.8.3.18. Connecting to localhost:9000 as user default. Connected to ClickHouse server version 20.8.3 revision 54438. lhrclickhouse :) lhrclickhouse :) show databases; SHOW DATABASES ┌─name───────────────────────────┐ │ _temporary_and_external_tables │ │ default │ │ system │ └────────────────────────────────┘ 3 rows in set. Elapsed: 0.003 sec. lhrclickhouse :) use system; USE system Ok. 0 rows in set. Elapsed: 0.002 sec. lhrclickhouse :) show tables; SHOW TABLES ┌─name───────────────────────────┐ │ aggregate_function_combinators │ │ asynchronous_metric_log │ │ asynchronous_metrics │ │ build_options │ │ clusters │ │ collations │ │ columns │ │ contributors │ │ current_roles │ │ data_type_families │ │ databases │ │ detached_parts │ │ dictionaries │ │ disks │ │ distribution_queue │ │ enabled_roles │ │ events │ │ formats │ │ functions │ │ grants │ │ graphite_retentions │ │ licenses │ │ macros │ │ merge_tree_settings │ │ merges │ │ metric_log │ │ metrics │ │ models │ │ mutations │ │ numbers │ │ numbers_mt │ │ one │ │ parts │ │ parts_columns │ │ privileges │ │ processes │ │ query_log │ │ query_thread_log │ │ quota_limits │ │ quota_usage │ │ quotas │ │ quotas_usage │ │ replicas │ │ replication_queue │ │ role_grants │ │ roles │ │ row_policies │ │ settings │ │ settings_profile_elements │ │ settings_profiles │ │ stack_trace │ │ storage_policies │ │ table_engines │ │ table_functions │ │ tables │ │ time_zones │ │ trace_log │ │ user_directories │ │ users │ │ zeros │ │ zeros_mt │ └────────────────────────────────┘ 61 rows in set. Elapsed: 0.006 sec. [root@lhrclickhouse /]# clickhouse-client -q "show databases" _temporary_and_external_tables default system |
配置文件
主配置文件:/etc/clickhouse-server/config.xml ,config.xml文件中,包含两类设置: 1、服务器参数设置 2、常规配置参数设置
1 2 3 4 5 | [root@lhrclickhouse ~]# cd /etc/clickhouse-server/ [root@lhrclickhouse clickhouse-server]# ll total 44 -rw-r--r-- 1 root root 33738 Oct 6 2020 config.xml -rw-r--r-- 1 root root 5587 Oct 6 2020 users.xml |
这里配置文件必须是XML 格式,同时,文件中的开头结尾必须是 <yandex> </yandex>
, 以下是一些常用的重要的配置参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | -- 在文件中max_connections 为设置最大的连接数 <max_connections>4096</max_connections> Clickhouse 在关闭连接之前等待传入的请求秒数 <keep_alive_timeout>3</keep_alive_timeout> 最大同时处理的请求数 <max_concurrent_queries>100</max_concurrent_queries> 设置时区,这里建议使用Asia/Shanghai <timezone>Asia/Shanghai</timezone> 设置MergeTree 表引擎使用的标记缓存的近似大小,单位字节 <mark_cache_size>5368709120</mark_cache_size> clickhouse默认的数据库 <default_database>default</default_database> 监听地址 ::代表所有地址 <listen_host>::</listen_host> -- 日志记录配置项 <logger> -- 日志记录的级别 <level>trace</level> -- 日志的存储的位置 <log>/var/log/clickhouse-server/clickhouse-server.log</log> -- 错误日志的位置 <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog> -- 日志的大小,达到大小后,会将日志存档重命名 <size>1000M</size> -- 最大的日志存档的数量,超过就会开始清理 <count>10</count> -- CLICKHOUSE 使用的服务器内存, 0 为自动 <max_server_memory_usage>0</max_server_memory_usage> -- 当表达到多大的情况下,开始删除表, 0 表示不限制 <max_table_size_to_drop>0</max_table_size_to_drop> -- 数据文件存放的目录 <path>/var/lib/clickhouse/</path> -- 通过那个端口来访问CLICKHOUSE <tcp_port>9000</tcp_port> -- 在处理大量数据时,临时文件所存放的地点 <tmp_path>/var/lib/clickhouse/tmp/</tmp_path> |
更多配置参考信息地址:
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/settings/
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/