当前位置: 首页 > news >正文

Ubuntu 部署 ClickHouse:高性能分析型数据库(附shell脚本一键部署↓)

ClickHouse 是一个开源的列式数据库管理系统(Columnar DBMS),专为在线分析处理(OLAP)设计,具备高性能、可扩展性和实时数据分析能力,适用于大规模数据集的快速查询场景。

核心特性

  1. 列式存储与向量化查询
    • 数据按列存储而非行,减少查询时读取的无关数据量,提升聚合操作效率。
    • 向量化执行引擎(SIMD 指令优化)加速批量数据处理,单节点吞吐量可达每秒数百万行。
  2. 实时分析与高吞吐
    • 支持近实时数据插入和查询,适用于实时监控、日志分析等场景。
    • 示例:Yandex 曾实现每秒处理数百万条搜索日志的查询性能。
  3. SQL 兼容性与生态集成
    • 支持标准 SQL 语法,兼容主流 BI 工具(如 Tableau、Power BI)。
    • 提供外部表函数,可直接查询 PostgreSQL、MySQL、MongoDB 等系统数据,或读取 S3、GCS 等对象存储。
  4. 分布式架构与扩展性
    • 支持多节点集群部署,数据分片(Sharding)和复制(Replication)实现水平扩展。
    • 可处理 PB 级数据,高并发场景下保持低延迟。
  5. 高压缩率与存储优化
    • 使用 LZ4、ZSTD 等算法压缩数据,减少存储空间占用(通常压缩比达 5-10 倍)。
    • 支持 Parquet、Avro 等开放文件格式,降低跨系统数据交换成本。

技术优势

  • 性能卓越:列式存储+向量化执行+并行计算,复杂查询响应时间亚秒级。
  • 灵活数据模型:支持动态表结构修改、嵌套数据类型,适应多变分析需求。
  • 开源生态:Apache 2.0 许可证,社区活跃,持续迭代新功能(如 MaterializeMySQL 引擎实现 MySQL 数据实时同步)。

典型应用场景

  1. 实时日志分析
    • 案例:网站访问日志、应用日志实时写入 ClickHouse,支持秒级查询用户行为模式。
  2. 用户行为分析(UBA)
    • 案例:电商、游戏行业构建用户特征大宽表,快速分析点击、浏览、购买等行为,支撑精准营销。
  3. 企业经营分析
    • 案例:处理数亿条业务数据,支持数百维度查询,辅助商业决策(如收入、用户数趋势分析)。
  4. 物联网(IoT)与监控
    • 案例:实时分析设备指标数据,构建高效监控告警系统。

局限性

  • 事务支持弱:不支持 ACID 事务,修改操作(如 UPDATE/DELETE)需通过特殊引擎(如 ReplacingMergeTree)实现。
  • 短查询延迟较高:单条查询可能占用全部 CPU 资源,高 QPS 场景需优化。
  • 社区规模较小:相比 PostgreSQL、MySQL 等,生态工具和文档丰富度有待提升。

适用场景建议

  • 推荐使用:读多写少、数据量大、查询复杂的分析场景(如报表生成、数据挖掘)。
  • 不推荐使用:高频事务处理、强一致性要求的 OLTP 场景。

一、环境准备

sudo apt update                                                        # 更新软件包列表
sudo apt install -y curl apt-transport-https ca-certificates dirmngr   # 安装必要工具

二、添加 ClickHouse 官方仓库

1. 添加 GPG 公钥

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754

2. 添加仓库源

echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list

3. 更新包列表

sudo apt update

三、安装 ClickHouse

sudo apt install -y clickhouse-server clickhouse-client    # 安装服务端和客户端
  • clickhouse-server:数据库服务
  • clickhouse-client:命令行客户端

四、启动并启用服务


sudo systemctl start clickhouse-server     # 启动服务
sudo systemctl enable clickhouse-server    # 设置开机自启
sudo systemctl status clickhouse-server    # 查看状态

五、首次登录 ClickHouse

使用命令行客户端:

clickhouse-client

六、测试基本操作

1. 创建数据库

CREATE DATABASE test_db;

2. 使用数据库

USE test_db;

3. 创建表(示例:日志表)

CREATE TABLE logs (timestamp DateTime,user_id UInt32,action String,duration_ms UInt32
) ENGINE = MergeTree
ORDER BY (user_id, timestamp);

4. 插入数据

INSERT INTO logs VALUES 
('2025-09-28 10:00:00', 1001, 'login', 120),
('2025-09-28 10:05:00', 1001, 'search', 80),
('2025-09-28 10:10:00', 1002, 'login', 150);

5. 查询数据

SELECT user_id, COUNT(*) AS cnt, AVG(duration_ms) AS avg_time
FROM logs
GROUP BY user_id;

七、配置远程访问

1. 编辑配置文件

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

2. 找到 <listen_host>,修改为:

<!-- 允许所有 IP 访问 -->
<listen_host>0.0.0.0</listen_host><!-- 或只允许特定 IP -->
<!-- <listen_host>192.168.1.100</listen_host> -->

3. 重启服务

sudo systemctl restart clickhouse-server.service

八、设置密码

1. 编辑用户配置

sudo nano /etc/clickhouse-server/users.d/default.xml

2. 创建配置文件内容:

<yandex><users><default><password>your_secure_password</password>  <!-- 设置密码 --><!-- 或使用 SHA256 加密 --><!-- <password_sha256_hex>...</password_sha256_hex> --></default></users>
</yandex>

3. 重启服务

sudo systemctl restart clickhouse-server.service

4. 远程连接示例

clickhouse-client --host <your-ip> --user default --password 'your_secure_password'

九、shell脚本自动化安装

#!/bin/sh# =============================================================================
# ClickHouse 安装脚本(一键搞定 systemd + 远程 + 密码)
# 作者:LoneEon
# 2025 年 9 月 28 日 - 稳定 · 安全 · 兼容
# =============================================================================# ================== 🔧 配置区 ==================
ENABLE_REMOTE="yes"
LISTEN_HOST="0.0.0.0"
SET_PASSWORD="yes"
CLICKHOUSE_PASSWORD="MySecurePass123!"  # 👈 修改为你的密码
# ==============================================echo "🚀 开始安装 ClickHouse..."# 1. 清理旧文件
rm -f ./clickhouse# 2. 下载安装器
echo "📥 下载 ClickHouse 安装器..."
if ! curl -sS https://clickhouse.com/ | sh; thenecho "❌ 下载失败"exit 1
fi# 3. 安装
echo "🛠️ 安装中..."
if ! sudo ./clickhouse install; thenecho "❌ 安装失败"exit 1
fiecho "✅ 安装完成"# 4. 停止可能已运行的实例
echo "🛑 停止已有服务..."
sudo pkill -f clickhouse-server || true# 5. ✅ 关键:修复数据目录权限(解决 status=76)
echo "🔧 修复数据目录权限 (/var/lib/clickhouse)..."
DATA_DIR="/var/lib/clickhouse"
sudo rm -rf "$DATA_DIR"/*                    # 清空数据(新安装推荐)
sudo mkdir -p "$DATA_DIR"
sudo chown -R clickhouse:clickhouse "$DATA_DIR"
sudo chmod -R 750 "$DATA_DIR"
echo "✅ 数据目录已清理并设置权限"# 6. 创建 systemd 服务文件
echo "📄 创建 systemd 服务文件..."
SERVICE_FILE="/etc/systemd/system/clickhouse-server.service"
sudo tee "$SERVICE_FILE" > /dev/null << 'EOF'
[Unit]
Description=ClickHouse Server (analytic DBMS for big data)
After=network.target[Service]
Type=simple
User=clickhouse
Group=clickhouse
ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml
ExecStop=/usr/bin/clickhouse-server --stop
Restart=always
LimitNOFILE=65536
StandardOutput=journal
StandardError=journal[Install]
WantedBy=multi-user.target
EOFsudo chmod 644 "$SERVICE_FILE"
echo "✅ systemd 服务文件已创建"# 7. 重载 systemd
sudo systemctl daemon-reload
echo "🔄 systemd 配置已重载"# 8. 启用远程访问
if [ "$ENABLE_REMOTE" = "yes" ]; thenecho "🌐 配置远程访问..."CONFIG="/etc/clickhouse-server/config.xml"if [ -f "$CONFIG" ]; thensudo sed -i '/<listen_host>/d' "$CONFIG"sudo sed -i "/<\/yandex>/i <listen_host>$LISTEN_HOST</listen_host>" "$CONFIG"echo "✅ 已启用远程访问"elseecho "❌ 配置文件不存在: $CONFIG"exit 1fi
fi# 9. 设置密码
if [ "$SET_PASSWORD" = "yes" ]; thenecho "🔐 设置默认用户密码..."PASSWORD_DIR="/etc/clickhouse-server/users.d"sudo mkdir -p "$PASSWORD_DIR"cat << EOF | sudo tee "$PASSWORD_DIR/password.xml" > /dev/null
<yandex><users><default><password>$CLICKHOUSE_PASSWORD</password></default></users>
</yandex>
EOFecho "✅ 密码已设置"
fi# 10. 启动服务(通过 systemd)
echo "▶️ 启动 ClickHouse 服务..."
sudo systemctl start clickhouse-server# 等待启动
sleep 10# 11. 检查状态
if sudo systemctl is-active clickhouse-server >/dev/null 2>&1; thenecho "🎉🎉🎉 ClickHouse 安装成功!🎉🎉🎉"echo ""echo "📌 服务管理:"echo "   • 状态: sudo systemctl status clickhouse-server"echo "   • 启动: sudo systemctl start clickhouse-server"echo "   • 重启: sudo systemctl restart clickhouse-server"echo "   • 开机自启: sudo systemctl enable clickhouse-server"echo ""echo "📌 连接方式:"echo "   • CLI:  clickhouse-client --host localhost --password '$CLICKHOUSE_PASSWORD'"echo "   • HTTP: http://$IP:8123?query=SELECT%201"echo ""echo "💡 提示:确保防火墙开放 8123 (HTTP) 和 9000 (TCP) 端口"
elseecho "❌ 服务启动失败,请运行:"echo "   journalctl -u clickhouse-server --no-pager -n 50"exit 1
fi

十、常用命令速查表

类别功能命令
数据库查看所有数据库SHOW DATABASES;
创建数据库CREATE DATABASE db_name;
使用数据库USE db_name;
删除数据库DROP DATABASE db_name;
查看数据库建表语句SHOW CREATE DATABASE db_name;
表操作查看当前库所有表SHOW TABLES;
创建表(MergeTree)CREATE TABLE table_name (id UInt32, name String, created DateTime) ENGINE = MergeTree ORDER BY id;
查看表结构DESCRIBE TABLE table_name; 或 DESC table_name;
查看建表语句SHOW CREATE TABLE table_name;
重命名表RENAME TABLE old_name TO new_name;
删除表DROP TABLE table_name;
清空表数据TRUNCATE TABLE table_name;
插入数据插入多行数据INSERT INTO table_name VALUES (1, 'Alice', '2025-09-28 10:00:00'), (2, 'Bob', '2025-09-28 10:05:00');
插入指定列INSERT INTO table_name (id, name) VALUES (3, 'Charlie');
从查询结果插入INSERT INTO dst_table SELECT * FROM src_table;
查询数据查询所有数据SELECT * FROM table_name;
条件查询SELECT * FROM table_name WHERE id = 1;
聚合统计SELECT COUNT(*), AVG(duration_ms) FROM logs;
分组查询SELECT user_id, COUNT(*) FROM logs GROUP BY user_id;
排序SELECT * FROM table_name ORDER BY created DESC;
限制行数SELECT * FROM table_name LIMIT 10;
去重SELECT DISTINCT name FROM table_name;
时间范围查询SELECT * FROM logs WHERE timestamp >= '2025-09-28 00:00:00' AND timestamp < '2025-09-29 00:00:00';
系统信息查看正在运行的查询SELECT * FROM system.processes;
查看最近查询日志SELECT query, elapsed FROM system.query_log ORDER BY event_time DESC LIMIT 10;
查看表大小(行数、压缩大小)SELECT table, sum(rows), formatReadableSize(sum(data_compressed_bytes)) FROM system.parts GROUP BY table;
查看磁盘使用SELECT * FROM system.disks;
查看列信息SELECT * FROM system.columns WHERE table = 'your_table';
用户权限创建用户(带密码)CREATE USER IF NOT EXISTS alice IDENTIFIED WITH plaintext_password BY 'secure123';
授予权限GRANT SELECT ON db_name.* TO alice;
查看用户权限SHOW GRANTS FOR alice;
删除用户DROP USER alice;
导入导出导出为 CSVSELECT * FROM table_name INTO OUTFILE '/path/export.csv' FORMAT CSVWithNames;
从 CSV 导入cat data.csv | clickhouse-client --query="INSERT INTO table_name FORMAT CSVWithNames"
从 TSV 导入clickhouse-client --query="INSERT INTO table_name FORMAT TSV" < data.tsv
远程连接命令行连接远程clickhouse-client --host 192.168.1.100 --user default --password 'pwd'
HTTP 接口查询curl "http://ip:8123?query=SELECT+1"
服务管理启动服务sudo systemctl start clickhouse-server
停止服务sudo systemctl stop clickhouse-server
重启服务sudo systemctl restart clickhouse-server
查看状态sudo systemctl status clickhouse-server
查看日志sudo journalctl -u clickhouse-server -f
配置文件路径/etc/clickhouse-server/config.xml
数据存储路径/var/lib/clickhouse/

十一、常用工具与集成

工具用途
DBeaver图形化管理 ClickHouse
Grafana接入 ClickHouse 做可视化仪表盘
Python (clickhouse-connect)Python 操作 ClickHouse
Logstash / Fluentd将日志写入 ClickHouse

十二、卸载 ClickHouse(如需)

# 停止服务
sudo systemctl stop clickhouse-server# 卸载包
sudo apt remove --purge clickhouse-server clickhouse-client -y# 删除数据目录(谨慎!)
sudo rm -rf /var/lib/clickhouse
sudo rm -rf /etc/clickhouse-server

十三、常见问题

问题解决方法
Cannot connect to localhost:9000检查服务是否运行:systemctl status clickhouse-server
内存不足导致崩溃增加内存或限制查询内存:max_memory_usage
插入数据慢使用批量插入,或调整 merge_tree 设置
远程无法连接检查 config.xml 中 listen_host 和防火墙

本文系统地介绍了在 Ubuntu 系统上部署和配置 ClickHouse 的完整流程,涵盖了环境准备、安装启动、远程访问、用户密码设置及日常运维命令,帮助读者快速搭建起高性能的分析型数据库环境。作为一款专为 OLAP 场景设计的列式数据库,ClickHouse 凭借其卓越的查询性能、高效的压缩能力和良好的可扩展性,在实时分析、日志处理和大数据报表等场景中展现出强大优势。通过本文的实践指导,不仅能掌握 ClickHouse 的基础操作,更能深入理解其适用场景与核心价值,为构建高效的数据分析平台奠定坚实基础。

http://www.dtcms.com/a/418670.html

相关文章:

  • 【GUI自动化测试】菜单控件操作与记事本自动化测试实践
  • FFmpeg-vflip滤镜使用
  • 有没有做线播放网站合肥百度快照优化排名
  • 友链交换网站源码中信建设有限责任公司唐万哩
  • 具有品牌的上海网站建设山西运城网站开发
  • 网约车架构
  • K8s StorageClass配置实战:从入门到精通
  • 鼻毛修剪器MCU方案开发设计
  • 为什么LLM会使用到向量这种数学工具?
  • LocalStorage Token vs HttpOnly Cookie 认证方案
  • ArkUI V2中Repeat组件使用注意事项总结
  • 自动字幕翻译避坑指南
  • Go vs. PHP:核心优势劣势对比
  • Go 语言中的**数组 (Array)*用法
  • php 网站部署虚拟主机安装wordpress
  • 浙江省旅游企业网站建设情况做最最优秀的视频网站有哪些
  • 设计模式第五章(门面模式)
  • 海康相机SDK封装
  • 大模型应用:一个基于AI大模型的自动邮件简报系统 - Flask + HTML 方案
  • 开源 C# 快速开发(八)通讯--Tcp服务器端
  • MTK调试-电池识别
  • 网站目标网页制作下载图片代码
  • 钱站网站如何建设手机移动网站
  • Vue调用浏览器打印
  • 捷讯官网 网站建设网站到期只续域名不续空间能打开吗
  • CS231n学习笔记1-4: Image Features
  • DragonBalls_One009*
  • extern关键字
  • 捷为科技亮相新能源汽车产业对接会,数智化平台赋能汽车行业高质量发展
  • ChatBI 学习