【ClickHouse安装教程】从零开始部署高性能列式数据库(附ClickHouse安装包)

关键词: ClickHouse安装教程、ClickHouse部署、CentOS安装ClickHouse、ClickHouse列式数据库、OLAP数据库、ClickHouse配置、ClickHouse基础操作

前言

在当今大数据时代,ClickHouse安装教程 是每一位数据工程师、运维人员和数据分析师必须掌握的技能。ClickHouse 作为一款高性能的列式数据库管理系统(DBMS) ,专为联机分析处理(OLAP) 场景设计。无论您是要搭建实时数据分析平台、构建用户行为分析系统,还是处理海量日志数据,掌握ClickHouse安装教程 都是迈向高效数据处理的第一步

本文将为您提供一份从零开始的ClickHouse安装教程 ,涵盖ClickHouse 的安装、配置、基础操作和进阶操作,确保 您能够顺利完成 部署并快速上手使用。

一、ClickHouse是什么?

ClickHouse 是一款开源的列式SQL数据库管理系统(DBMS) ,由俄罗斯搜索巨头 Yandex 于2009年诞生,2016年正式开源。它专为在线分析处理(OLAP) 场景设计,能够在PB级数据集高摄取速率 场景下实现高性能分析查询

ClickHouse的核心特点:

  1. 列式存储 :数据按列独立存储,查询时只需读取用到的列,大幅减少I/O开销
  2. 极速查询性能 :在1亿行数据上执行分析查询仅需92毫秒 ,吞吐量超过每秒10亿行
  3. 高压缩率 :数据压缩比可达6-10倍显著节省存储空间
  4. SQL支持 :支持标准SQL语法,学习成本低,上手快
  5. 分布式架构 :采用 shared-nothing 架构,支持线性扩展 ,可通过分片和副本实现高可用水平扩展

ClickHouse适用于以下场景:

  • 实时数据分析与BI报表
  • 用户行为与点击流分析
  • 日志数据存储与分析
  • 物联网(IoT)数据处理
  • 广告投放与效果分析
  • 金融交易数据分析

二、ClickHouse安装包下载

🔽 【点击下载】ClickHouse安装包(网盘)

通过网盘分享的文件:clickhouse

链接: https://pan.baidu.com/s/1wKgSAOsGTOMonxguaPMoYw?pwd=7i2s

本教程使用的 ClickHouse版本为20.11.4.13 ,需要下载以下四个安装包

  1. clickhouse-common-static-20.11.4.13.tgz --- 通用静态库
  2. clickhouse-common-static-dbg-20.11.4.13.tgz --- 调试符号库
  3. clickhouse-server-20.11.4.13.tgz --- 服务端
  4. clickhouse-client-20.11.4.13.tgz --- 客户端

三、ClickHouse安装环境要求

📌 安装环境:CentOS操作系统

本教程基于 CentOS 7/8 系统进行安装部署。

CentOS安装参考: https://www.cnblogs.com/dbbull/p/20891421

硬件与系统要求:

项目 要求
操作系统 CentOS 7/8、RedHat或其他RPM系Linux
磁盘空间 至少 2.5 GB 用于安装
内存 建议 4 GB 以上(生产环境建议 16 GB+
CPU x86_64架构
网络 分布式部署建议 10 Gbit 网络

生产环境建议:

  • 禁用操作系统的 swap 文件
  • 预估数据量并计算压缩系数
  • 如需高可用,规划副本数量

四、ClickHouse安装教程

第1步:创建ClickHouse用户和组

ClickHouse建议使用专用用户运行,以提高安全性。

bash 复制代码
# 创建数据目录
mkdir /clickhouse

# 创建用户组和用户
groupadd -g 60001 clickhouse
useradd -u 61001 -g clickhouse clickhouse

# 设置目录权限
chown -R clickhouse:clickhouse /clickhouse
chmod -R 775 /clickhouse

# 设置用户密码
echo "clickhouse" | passwd --stdin clickhouse

第2步:关闭防火墙和SELINUX

⚠️ 注意: 生产环境中请根据安全策略谨慎操作,建议配置防火墙规则而非直接关闭。

bash 复制代码
# 禁用SELINUX
echo "SELINUX=disabled" > /etc/selinux/config
echo "#SELINUXTYPE=targeted " >> /etc/selinux/config
cat /etc/selinux/config
setenforce 0

# 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

为什么要关闭SELINUX? SELINUX可能阻止ClickHouse对数据目录的读写操作以及网络端口的绑定。

第3步:创建所需目录

按以下结构创建ClickHouse的各个目录:

bash 复制代码
mkdir -p /clickhouse/app          # 应用程序目录
mkdir -p /clickhouse/data         # 数据存储目录
mkdir -p /clickhouse/log          # 日志目录
mkdir -p /clickhouse/etc          # 配置文件目录
mkdir -p /clickhouse/soft         # 安装包存放目录

第4步:上传ClickHouse安装包

bash 复制代码
# 安装lrzsz工具(用于文件上传)
yum install lrzsz -y

# 进入安装包目录
cd /clickhouse/soft

# 执行rz命令上传四个安装包
rz

📤 使用rz命令上传之前下载好的四个tgz安装包

第5步:安装ClickHouse

⚠️ 以下操作使用root用户执行

5.1 安装通用静态库
bash 复制代码
cd /clickhouse/app
tar zxf /clickhouse/soft/clickhouse-common-static-20.11.4.13.tgz
mv clickhouse-common-static-20.11.4.13 clickhouse-common-static
./clickhouse-common-static/install/doinst.sh
5.2 安装调试符号库
bash 复制代码
tar zxf /clickhouse/soft/clickhouse-common-static-dbg-20.11.4.13.tgz
mv clickhouse-common-static-dbg-20.11.4.13 clickhouse-common-static-dbg
./clickhouse-common-static-dbg/install/doinst.sh
5.3 安装服务端(核心配置)
bash 复制代码
tar zxf /clickhouse/soft/clickhouse-server-20.11.4.13.tgz
mv clickhouse-server-20.11.4.13 clickhouse-server

修改安装脚本中的目录配置:

bash 复制代码
vi clickhouse-server/install/doinst.sh
# 将以下变量修改为:
CLICKHOUSE_DATADIR=${CLICKHOUSE_DATADIR:=/clickhouse/data}
CLICKHOUSE_LOGDIR=${CLICKHOUSE_LOGDIR:=/clickhouse/log}

修改主配置文件 config.xml

bash 复制代码
vi /clickhouse/app/clickhouse-server/etc/clickhouse-server/config.xml

修改以下配置项:

xml 复制代码
<!-- 日志路径 -->
<log>/clickhouse/log/clickhouse-server.log</log>
<errorlog>/clickhouse/log/clickhouse-server.err.log</errorlog>

<!-- 数据路径 -->
<path>/clickhouse/data</path>
<tmp_path>/clickhouse/data/tmp/</tmp_path>
<user_files_path>/clickhouse/data/user_files/</user_files_path>
<format_schema_path>/clickhouse/data/format_schemas/</format_schema_path>

<!-- 访问权限路径 -->
<path>/clickhouse/data/access/</path>

<!-- 监听所有IP地址(允许远程连接) -->
<listen_host>::</listen_host>

<!-- 设置时区为东八区 -->
<timezone>Asia/Shanghai</timezone>

修改用户配置文件 users.xml

bash 复制代码
vi /clickhouse/app/clickhouse-server/etc/clickhouse-server/users.xml
xml 复制代码
<!-- 启用访问管理(允许创建用户和分配权限) -->
<access_management>1</access_management>

<!-- 设置单查询最大内存使用量(10GB) -->
<max_memory_usage>10000000000</max_memory_usage>

执行服务端安装:

bash 复制代码
./clickhouse-server/install/doinst.sh
5.4 安装客户端
bash 复制代码
tar zxf /clickhouse/soft/clickhouse-client-20.11.4.13.tgz
mv clickhouse-client-20.11.4.13 clickhouse-client
./clickhouse-client/install/doinst.sh
5.5 配置软链接
bash 复制代码
cd /etc/
mv /etc/clickhouse-* /clickhouse/etc/
ln -sf /clickhouse/etc/* .
ls -ls /etc/click*
5.6 设置最终权限
bash 复制代码
chown -R clickhouse:clickhouse /clickhouse
chmod -R 755 /clickhouse

第6步:启动ClickHouse

⚠️ 切换到clickhouse用户启动(重要!)

bash 复制代码
su - clickhouse
nohup clickhouse-server --config=/etc/clickhouse-server/config.xml &

验证启动状态:

bash 复制代码
ps -ef | grep clickhouse

第7步:连接ClickHouse

默认无密码,使用以下命令连接:

bash 复制代码
clickhouse-client -h 192.168.80.80 --port 9000 --user default --password

💡 参数说明:

  • -h:指定服务器IP地址
  • --port:指定TCP端口(默认9000)
  • --user:指定用户名(默认default)
  • --password:密码(默认空,直接回车)

第8步:启动报错及解决方法

如果启动时遇到以下错误:

复制代码
DB::Exception: Effective user of the process (root) does not match the owner of the data (clickhouse). Run under 'sudo -u clickhouse'.

原因: 进程的有效用户(root)与数据所有者(clickhouse)不匹配。

解决方法:

bash 复制代码
# 方法一:使用systemctl启动(推荐)
sudo systemctl start clickhouse-server

# 方法二:使用sudo -u切换用户启动
sudo -u clickhouse clickhouse-server --config=/etc/clickhouse-server/config.xml

# 方法三:给debug目录添加权限
chmod 755 /usr/lib/debug
chmod 755 /usr/lib/debug/usr
chmod 755 /usr/lib/debug/usr/bin
chmod 644 /usr/lib/debug/usr/bin/clickhouse 2>/dev/null

五、ClickHouse基础操作

安装完成后,让我们通过一些基础操作来验证和使用ClickHouse。

5.1 数据库操作

sql 复制代码
-- 查看所有数据库
SHOW DATABASES;

-- 创建数据库
CREATE DATABASE IF NOT EXISTS test_db;

-- 切换数据库
USE test_db;

-- 删除数据库
DROP DATABASE IF EXISTS test_db;

5.2 建表操作

ClickHouse中最常用的表引擎是 MergeTree 系列。

sql 复制代码
-- 创建一张简单的MergeTree表
CREATE TABLE my_table (
    id UInt32,
    name String,
    age UInt8,
    create_date Date
)
ENGINE = MergeTree()
ORDER BY id;

字段类型说明:

  • UInt32:无符号32位整数
  • String:字符串类型
  • UInt8:无符号8位整数
  • Date:日期类型

5.3 插入数据

sql 复制代码
-- 单条插入
INSERT INTO my_table (id, name, age, create_date) 
VALUES (1, '张三', 25, '2026-01-01');

-- 批量插入
INSERT INTO my_table VALUES 
(2, '李四', 30, '2026-01-02'),
(3, '王五', 28, '2026-01-03');

5.4 查询数据

sql 复制代码
-- 查询所有数据
SELECT * FROM my_table;

-- 条件查询
SELECT * FROM my_table WHERE age > 25;

-- 聚合查询
SELECT COUNT(*) AS total, AVG(age) AS avg_age FROM my_table;

-- 分组查询
SELECT age, COUNT(*) AS cnt 
FROM my_table 
GROUP BY age 
ORDER BY cnt DESC;

5.5 其他常用命令

sql 复制代码
-- 查看当前数据库中的所有表
SHOW TABLES;

-- 查看表结构
DESCRIBE my_table;

-- 查看建表语句
SHOW CREATE TABLE my_table;

六、ClickHouse进阶操作

6.1 分区表

分区可以提高查询性能和数据管理效率。只有 MergeTree系列 的表引擎支持分区。

sql 复制代码
-- 按月分区的表
CREATE TABLE orders (
    order_id UInt32,
    user_id UInt32,
    amount Float64,
    order_date Date
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(order_date)  -- 按月分区
ORDER BY (order_date, order_id);

分区管理操作:

sql 复制代码
-- 查看表的分区信息
SELECT * FROM system.parts WHERE table = 'orders';

-- 删除指定分区
ALTER TABLE orders DROP PARTITION 202601;

-- 分离分区(移动到detached目录)
ALTER TABLE orders DETACH PARTITION 202602;

-- 重新附加分区
ALTER TABLE orders ATTACH PARTITION 202602;

6.2 副本(Replication)

副本通过在多台服务器上维护数据的多份拷贝来确保高可用性容错性

使用副本需要配置 ZooKeeperClickHouse Keeper

sql 复制代码
-- 创建带副本的表(需要配置ZooKeeper)
CREATE TABLE replicated_table (
    id UInt32,
    name String,
    create_date Date
)
ENGINE = ReplicatedMergeTree(
    '/clickhouse/tables/{shard}/replicated_table',  -- ZooKeeper路径
    '{replica}'                                     -- 副本名称
)
ORDER BY id;

6.3 分片(Sharding)

数据量过大 单台服务器无法承载,或查询速度过慢时,可以使用分片将数据分散到多台服务器。

sql 复制代码
-- 创建分布式表(不存储数据,只做查询路由)
CREATE TABLE distributed_table ON CLUSTER test_cluster (
    id UInt32,
    name String,
    create_date Date
)
ENGINE = Distributed(
    'test_cluster',    -- 集群名称
    'default',         -- 数据库名
    'local_table',     -- 本地表名
    rand()            -- 分片键(随机分配)
);

6.4 集群配置

集群配置在 config.xmlremote_servers 部分定义。

xml 复制代码
<remote_servers>
    <test_cluster>
        <shard>
            <replica>
                <host>192.168.80.81</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>192.168.80.82</host>
                <port>9000</port>
            </replica>
        </shard>
    </test_cluster>
</remote_servers>

七、ClickHouse配置详解

7.1 主配置文件 config.xml

主配置文件位于 /etc/clickhouse-server/config.xml

核心配置项:

配置项 说明 示例值
<logger><log> 日志文件路径 /clickhouse/log/clickhouse-server.log
<logger><errorlog> 错误日志路径 /clickhouse/log/clickhouse-server.err.log
<http_port> HTTP端口 8123
<tcp_port> TCP端口 9000
<listen_host> 监听地址 ::(所有地址)
<timezone> 时区 Asia/Shanghai
<max_connections> 最大连接数 4096
<path> 数据存储路径 /clickhouse/data

最佳实践: 保持默认的 config.xml 文件不作修改 ,将自定义配置放入 config.d/ 目录中。

7.2 用户配置文件 users.xml

用户配置文件位于 /etc/clickhouse-server/users.xml

核心配置项:

配置项 说明 示例值
<access_management> 启用SQL用户管理 1
<max_memory_usage> 单查询最大内存 10000000000(10GB)
<password> 用户密码 明文或SHA256

配置示例:

xml 复制代码
<users>
    <default>
        <password></password>  <!-- 空密码 -->
        <networks>
            <ip>::/0</ip>      <!-- 允许所有IP访问 -->
        </networks>
        <profile>default</profile>
        <quota>default</quota>
    </default>
</users>

7.3 配置合并机制

ClickHouse支持多配置文件合并

  • 主配置文件 config.xml 优先加载
  • config.d/ 目录下的配置文件按字母顺序合并
  • 可以使用 replace 属性替换整个节点
  • 可以使用 remove 属性删除节点

7.4 查看最终配置

ClickHouse会将所有配置文件合并后存储在预处理目录中:

bash 复制代码
cat /var/lib/clickhouse/preprocessed_configs/config.xml

总结

至此,您已经完成了一份完整的 ClickHouse安装教程 学习之旅。从 ClickHouse 的基本概念、安装包下载、环境准备,到详细的安装步骤基础操作进阶功能 (分区、副本、分片、集群)以及配置文件详解 ,我们全面覆盖ClickHouse安装 和使用的核心知识

掌握 ClickHouse安装教程 只是第一步,ClickHouse 的强大功能远不止于此。建议您在实际项目中不断实践 ,深入探索 ClickHouse 的查询优化、数据导入导出、监控告警等高级特性。

相关推荐
流烟默2 小时前
ClickHouse三种驱动对比分析
clickhouse·驱动对比
TDengine (老段)2 小时前
TDengine 第三方工具 — Telegraf、Kafka Connect、Flink、Spark
大数据·数据库·物联网·flink·kafka·时序数据库·tdengine
小白勇闯网安圈11 小时前
Django 响应对象、文件上传与类视图
数据库·django·sqlite
努力的小雨11 小时前
同一份 SQL 跑多套环境:Ksql 变量怎么用才安全
数据库
科技绘图12 小时前
快鲸GEO vs 传统AI搜索优化:全链路自动化与高效内容生产在转化闭环上的对比
数据库·人工智能·自动化
ltl12 小时前
数据库作为 LLM 记忆体:语义缓存、RAG 与一致性
数据库
ltl12 小时前
WAL 与崩溃恢复:ARIES 协议怎么跑通
数据库
ltl12 小时前
TEE 数据库:EnclaveDB、Oblivious 原语与机密 SQL
数据库
麻瓜code14 小时前
【Mysql】重新学一遍 SQL 执行顺序
数据库·sql