简介本资源为在华为鲲鹏920处理器aarch64架构与麒麟V10操作系统上编译完成的ClickHouse 21.8.14安装包面向需要在国产化自主可控环境中搭建OLAP大数据分析平台的运维与开发人员。包内共20个文件以可执行二进制程序为主涵盖clickhouse-server、clickhouse-client、clickhouse-keeper、clickhouse-copier、clickhouse-benchmark等核心组件另附config.xml、users.xml配置文件及install.sh、uninstall.sh一键安装与卸载脚本压缩包约115.69MB。已有2147人学习下载。借助安装脚本用户可自动完成系统环境检查、依赖库安装、用户与组创建、服务配置及开机自启设置快速在麒麟V10上部署可用的ClickHouse服务省去跨平台编译与依赖调优的繁琐过程适合作为国产化替代场景下大数据分析环境搭建的参考与落地工具。1. 鲲鹏麒麟V10上跑ClickHouse为什么现成包一装就崩在鲲鹏服务器上装 ClickHouse最容易踩的坑不是配置写错而是直接拿了 x86 的官方包往上怼。我见过不止一个团队在麒麟 V10 上折腾半天clickhouse-server启动就报Exec format error或者跑起来后查询直接段错误。原因很简单ClickHouse 官方发布的预编译包默认面向 x86_64 架构而鲲鹏是 ARM64aarch64指令集、内存对齐、SIMD 优化路径全都不一样。这份 clickhouse_21.8.14 安装包就是针对鲲鹏服务器 麒麟 V10 操作系统编译出来的 ARM64 版本解决的就是“官方包跑不起来、自己编译又太耗时”这个具体问题。适合正在做国产化适配、需要在 ARM 环境部署列式数据库的运维和开发人员。21.8 这个版本属于 ClickHouse 较稳定的 LTS 分支社区文档和踩坑记录都比较全拿来落地比追新版本更稳妥。2. 鲲鹏麒麟V10环境准备从系统依赖到目录规划2.1 先确认系统架构和内核版本拿到安装包之前别急着解压。先在鲲鹏服务器上确认三件事CPU 架构、操作系统版本、内核位数。麒麟 V10 有多个 SP 版本不同 SP 对 glibc 和 libstdc 的版本要求有差异这直接影响 ClickHouse 能不能跑起来。# 确认 CPU 架构必须输出 aarch64 uname -m # 查看麒麟 V10 具体版本 cat /etc/kylin-release # 查看 glibc 版本ClickHouse 21.8 一般要求 2.17 以上 ldd --version | head -1 # 查看 libstdc 是否支持 C17 strings /usr/lib64/libstdc.so.6 | grep GLIBCXX_3.4.22逻辑说明uname -m输出aarch64才说明是 ARM64 环境如果输出x86_64那这份包不适合你。/etc/kylin-release能看到具体是 V10 SP1 还是 SP2SP 版本影响后续依赖安装源的选择。ldd --version看 glibc低于 2.17 的话 ClickHouse 21.8 基本跑不起来需要先升级系统或换编译版本。最后一条检查 libstdc 是否包含GLIBCXX_3.4.22这是 C17 特性的最低要求缺了会在启动时报符号找不到。参数说明head -1只取第一行避免输出过多grep GLIBCXX_3.4.22是精确匹配如果没输出说明版本不够需要装更高版本的 libstdc 或者从系统源更新。2.2 依赖安装与目录规划麒麟 V10 默认的 yum 源里有些包版本偏旧ClickHouse 运行需要几个关键依赖。我一般会先装好这些再解压安装包避免启动时缺库。# 安装基础依赖麒麟 V10 自带源即可 yum install -y libicu libcurl openssl-devel zlib-devel # 创建 ClickHouse 专用目录避免默认路径权限问题 mkdir -p /opt/clickhouse/{data,logs,tmp} chown -R clickhouse:clickhouse /opt/clickhouse # 如果系统没有 clickhouse 用户先创建 useradd -r -s /sbin/nologin clickhouse逻辑说明libicu是 ClickHouse 处理字符串排序和编码的核心依赖缺了会报libicuuc.so找不到。libcurl用于访问外部表和 URL 引擎。openssl-devel和zlib-devel是编译期依赖但运行期也可能用到动态库。目录规划上我习惯把 data、logs、tmp 分开放在/opt/clickhouse下而不是用默认的/var/lib/clickhouse因为麒麟 V10 的 SELinux 策略有时会拦截默认路径的写入。参数说明-p确保父目录不存在时自动创建chown -R递归改属主ClickHouse 进程以 clickhouse 用户运行目录权限不对会直接启动失败。useradd -r创建系统用户-s /sbin/nologin禁止登录符合最小权限原则。注意如果麒麟 V10 开启了 SELinux建议先临时设为 permissive 模式测试确认 ClickHouse 能正常启动后再针对性加策略否则会看到莫名其妙的“权限拒绝”但文件权限明明是对的。3. 安装包部署与配置从解压到首次启动3.1 解压安装包并校验文件完整性这份安装包是编译好的二进制集合解压后直接可用不需要再编译。但解压前建议先核对文件列表和大小避免传输过程中损坏。# 解压安装包到指定目录 tar -zxvf clickhouse_21.8.14_kunpeng_kylin.tar.gz -C /opt/clickhouse/ # 查看解压后的目录结构 ls -lh /opt/clickhouse/ # 应该能看到 clickhouse-server、clickhouse-client、clickhouse-common-static 等 # 校验二进制文件是否可执行 file /opt/clickhouse/clickhouse-server # 输出应包含 ELF 64-bit LSB executable, ARM aarch64逻辑说明tar -zxvf中z表示 gzip 压缩x解压v显示过程f指定文件名。解压后重点看clickhouse-server和clickhouse-client两个二进制文件。file命令确认架构是ARM aarch64如果显示x86-64说明包拿错了。clickhouse-common-static是公共库和资源文件缺了 server 起不来。参数说明-C指定解压目标目录必须提前存在。如果安装包是.tar不带 gz去掉z参数即可。ls -lh的h让文件大小人类可读方便核对是否与预期一致。3.2 配置文件关键参数调整ClickHouse 21.8 的配置文件在/etc/clickhouse-server/下但这份安装包可能把配置放在解压目录里。我一般会复制一份到/etc/clickhouse-server/然后改几个关键参数。!-- config.xml 中需要关注的几个参数 -- path/opt/clickhouse/data//path tmp_path/opt/clickhouse/tmp//tmp_path user_files_path/opt/clickhouse/data/user_files//user_files_path logger levelinformation/level log/opt/clickhouse/logs/clickhouse-server.log/log errorlog/opt/clickhouse/logs/clickhouse-server.err.log/errorlog /logger listen_host0.0.0.0/listen_host max_connections4096/max_connections keep_alive_timeout10/keep_alive_timeout逻辑说明path是数据存储根目录必须指向之前创建的/opt/clickhouse/data/否则默认路径可能没权限。tmp_path用于临时文件大查询时会占用较多空间单独挂盘更好。logger里把日志级别设为information调试阶段可以改debug但生产环境别开日志量太大。listen_host设为0.0.0.0允许远程连接如果只本机用可以改127.0.0.1更安全。max_connections根据鲲鹏服务器内存调整4096 是 21.8 的默认值内存小于 32G 建议降到 1024。参数说明keep_alive_timeout控制 HTTP 连接保持时间默认 10 秒如果前面有负载均衡且超时设置更短这里要相应调小。user_files_path是file()表函数和INTO OUTFILE的默认目录不设的话可能写到根目录。3.3 启动服务并验证配置改完后用clickhouse-server命令启动指定配置文件路径。第一次启动建议前台运行方便看报错。# 前台启动观察日志输出 sudo -u clickhouse /opt/clickhouse/clickhouse-server --config-file/etc/clickhouse-server/config.xml # 如果看到 Application: Ready for connections 说明启动成功 # 另开终端用 client 连接 /opt/clickhouse/clickhouse-client --host 127.0.0.1 --port 9000 # 执行简单查询验证 SELECT version(), hostName(), uptime();逻辑说明sudo -u clickhouse确保以正确用户运行避免权限问题。--config-file显式指定配置文件不指定的话会找默认路径。启动成功的标志是日志里出现Ready for connections。clickhouse-client连接后执行SELECT version()应该返回21.8.14.1之类的版本号hostName()返回鲲鹏服务器主机名uptime()返回运行秒数。参数说明--host和--port对应 config.xml 里的listen_host和tcp_port默认 9000。如果连不上先检查防火墙是否放行 9000 和 8123 端口。SELECT version()是最简单的连通性测试比SHOW DATABASES更轻量。提示首次启动如果卡在Loading metadata很久通常是数据目录权限不对或者磁盘 IO 太慢。检查/opt/clickhouse/data/属主是否为 clickhouse以及磁盘是否挂载正常。4. 避坑指南鲲鹏麒麟V10上最容易翻车的五个点4.1 启动报 Exec format error现象执行clickhouse-server直接提示cannot execute binary file: Exec format error。原因二进制文件架构与当前 CPU 不匹配最常见的是把 x86 包放到了鲲鹏上或者反过来。解决用file命令确认二进制架构必须是ARM aarch64。如果确认是 ARM 包还报这个错检查是否在 x86 机器上解压后拷贝到了鲲鹏交叉传输不会改变文件架构但可能因为文件系统差异导致损坏重新在鲲鹏上解压一次。4.2 启动时报 libstdc 符号缺失现象日志里出现version GLIBCXX_3.4.22 not found或类似符号错误。原因麒麟 V10 自带的 libstdc 版本低于 ClickHouse 21.8 编译时使用的版本。解决先strings /usr/lib64/libstdc.so.6 | grep GLIBCXX看最高支持到哪个版本。如果确实缺可以从系统源安装libstdc-static或者手动更新 libstdc但注意不要覆盖系统关键库建议用LD_LIBRARY_PATH指向新版本库目录。4.3 远程连接被拒绝现象本机clickhouse-client能连但其他机器连 9000 端口提示Connection refused。原因config.xml里listen_host默认是127.0.0.1只监听本地回环。解决改成0.0.0.0或具体网卡 IP然后重启服务。同时检查麒麟 V10 的防火墙规则firewall-cmd --list-ports看 9000 和 8123 是否放行没有的话用firewall-cmd --add-port9000/tcp --permanent加上再 reload。4.4 查询时内存暴涨被 OOM Kill现象执行大查询时 ClickHouse 进程突然消失系统日志显示Out of memory: Killed process。原因鲲鹏服务器内存配置和 ClickHouse 默认的max_memory_usage不匹配或者max_bytes_before_external_group_by没设聚合操作全在内存里做。解决在users.xml里调低单查询内存上限比如max_memory_usage设为物理内存的 60%。同时开启外部聚合max_bytes_before_external_group_by设为max_memory_usage的一半max_bytes_before_external_sort同理。这样大查询会落盘不会撑爆内存。4.5 数据目录磁盘写满导致服务假死现象ClickHouse 进程还在但所有查询都超时日志里出现No space left on device。原因/opt/clickhouse/data/所在分区满了或者tmp_path指向了根分区大查询临时文件把根分区写满。解决把 data 和 tmp 放到独立的大容量分区用df -h确认挂载点。如果已经满了先停服务清理tmp目录和旧的data分区中的detached目录再启动。长期方案是配 TTL 或者定期OPTIMIZE TABLE ... FINAL清理旧数据。5. 进阶技巧用 systemd 托管与性能验证5.1 配置 systemd 服务实现开机自启前台启动只适合调试生产环境要用 systemd 托管。麒麟 V10 的 systemd 版本兼容标准 unit 文件。# /etc/systemd/system/clickhouse-server.service [Unit] DescriptionClickHouse Server (ARM64 Kunpeng) Afternetwork.target [Service] Typesimple Userclickhouse Groupclickhouse ExecStart/opt/clickhouse/clickhouse-server --config-file/etc/clickhouse-server/config.xml Restarton-failure RestartSec5 LimitNOFILE65536 LimitNPROC65536 [Install] WantedBymulti-user.target逻辑说明Typesimple适合前台进程。Restarton-failure让服务崩溃后自动拉起RestartSec5等 5 秒再重启避免频繁重启。LimitNOFILE和LimitNPROC调大文件描述符和进程数限制ClickHouse 高并发时默认 1024 不够用。ExecStart路径要和实际解压路径一致。参数说明User和Group必须是 clickhouse否则数据目录权限不对。Afternetwork.target确保网络就绪后再启动。写完 unit 文件后执行systemctl daemon-reload然后systemctl enable --now clickhouse-server开机自启并立即启动。5.2 用 benchmark 和 system 表验证性能装完后别只看能不能跑要验证在鲲鹏上的实际性能。ClickHouse 自带clickhouse-benchmark工具配合 system 表可以看查询耗时和资源消耗。# 生成测试数据并跑 benchmark clickhouse-client --query CREATE TABLE test_bench (id UInt64, name String, ts DateTime) ENGINE MergeTree() ORDER BY id clickhouse-client --query INSERT INTO test_bench SELECT number, toString(number), now() FROM numbers(1000000) clickhouse-benchmark --query SELECT count() FROM test_bench WHERE id 500000 --iterations 10 # 查看查询历史中的耗时分布 clickhouse-client --query SELECT query_duration_ms, read_rows, memory_usage FROM system.query_log WHERE type QueryFinish ORDER BY event_time DESC LIMIT 5逻辑说明先建一个 MergeTree 表插入 100 万行数据。clickhouse-benchmark跑 10 次相同查询输出 QPS 和延迟百分位。system.query_log里能看到每次查询的实际耗时、读取行数和内存占用用来判断鲲鹏上的性能瓶颈在 CPU 还是 IO。参数说明--iterations 10表示跑 10 轮取平均。--concurrency可以模拟并发默认是 1。system.query_log需要log_queries 1才会记录默认开启。read_rows远大于结果行数说明索引没命中需要检查ORDER BY和查询条件是否匹配。5.3 一个我踩过的坑时区配置导致数据错乱麒麟 V10 默认时区可能是Asia/Shanghai但 ClickHouse 内部默认用 UTC 存储 DateTime。如果写入时没指定时区查询时又按本地时区解释会出现数据“偏移 8 小时”的玄学问题。我现在的习惯是建表时显式指定DateTime(Asia/Shanghai)或者在config.xml里设timezoneAsia/Shanghai/timezone让服务端统一时区。从那以后我每次部署 ClickHouse 都强制走一遍时区检查SELECT timezone()确认返回Asia/Shanghai才继续。希望帮到你。本文还有配套的精品资源点击获取