ClickHouse开源项目解析:RHEL 8环境配置与开发实践
90
10 5 月, 2025
2 分钟阅读
0 阅读
ClickHouse开源项目解析:RHEL 8环境配置与开发实践
引言
ClickHouse是Yandex开源的列式数据库管理系统,专为在线分析处理(OLAP)场景设计。它以卓越的查询性能著称,特别适合大规模数据分析。本文将详细介绍在RHEL 8系统上配置ClickHouse开发环境并进行基础开发的完整流程。
准备工作
环境要求
- RHEL 8操作系统(本文以RHEL 8.4为例)
- 至少4GB内存(推荐8GB以上)
- 20GB可用磁盘空间
- sudo权限账户
前置知识
- Linux基础命令操作
- SQL基础语法
- YUM包管理工具使用
第一部分:ClickHouse安装配置
1. 添加ClickHouse官方仓库
首先需要添加ClickHouse的官方YUM仓库:
代码片段
sudo yum install -y yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
参数说明:
– yum-utils
:提供yum-config-manager等实用工具
– rpm --import
:导入ClickHouse的GPG密钥用于验证软件包
– yum-config-manager
:添加新的软件源仓库
2. 安装ClickHouse服务端和客户端
代码片段
sudo yum install -y clickhouse-server clickhouse-client
注意事项:
1. 安装过程中会自动创建clickhouse用户和组
2. ClickHouse默认会安装在/var/lib/clickhouse
目录下
3. 启动ClickHouse服务
代码片段
sudo systemctl enable clickhouse-server
sudo systemctl start clickhouse-server
验证服务状态:
代码片段
systemctl status clickhouse-server
如果看到”active (running)”表示服务已正常启动。
4. 连接客户端测试
代码片段
clickhouse-client
成功连接后会显示如下提示符:
代码片段
localhost :)
可以执行简单的SQL测试:
代码片段
SELECT version()
第二部分:基础开发实践
1. 创建数据库和表
在ClickHouse客户端中执行以下SQL:
代码片段
-- 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS test_db;
-- 使用数据库
USE test_db;
-- 创建MergeTree引擎表(适合时间序列数据)
CREATE TABLE IF NOT EXISTS user_activity (
event_date Date,
user_id UInt32,
event_type String,
duration_sec UInt32,
device String DEFAULT 'unknown'
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_date)
ORDER BY (event_date, user_id);
引擎说明:
– MergeTree
是ClickHouse最常用的引擎,支持索引和分区
– PARTITION BY
定义了分区键,这里按年月分区提高查询效率
– ORDER BY
定义了主键,影响数据存储顺序和查询性能
2. 插入测试数据
代码片段
-- 单条插入(不推荐生产使用)
INSERT INTO user_activity VALUES ('2023-01-01', 1001, 'login', 30, 'mobile');
-- 批量插入(推荐方式)
INSERT INTO user_activity VALUES
('2023-01-01', 1002, 'purchase', 120, 'desktop'),
('2023-01-02', 1001, 'logout', 5, 'mobile'),
('2023-01-02', 1003, 'login', 45, 'tablet');
最佳实践:
1. ClickHouse适合大批量写入(每次至少1000行)
2. INSERT语句尽量包含多行数据减少网络开销
3. SQL查询示例
a)基础查询
代码片段
-- SELECT基本查询
SELECT * FROM user_activity WHERE event_date = '2023-01-01';
-- GROUP BY聚合查询
SELECT
event_date,
count() AS total_events,
sum(duration_sec) AS total_duration,
uniq(user_id) AS unique_users
FROM user_activity
GROUP BY event_date;
b)高级分析函数
代码片段
-- Window函数计算用户行为时长排名
SELECT
user_id,
event_type,
duration_sec,
rank() OVER (PARTITION BY user_id ORDER BY duration_sec DESC) AS duration_rank
FROM user_activity;
ClickHouse优化实践技巧
a)数据批量导入最佳实践
对于大数据量导入,建议使用CSV文件批量加载:
1.准备CSV文件(user_data.csv):
“`
2023-01-03,1004,”view”,60,”desktop”
2023-01-03,1005,”login”,20,”mobile”
2023-01