zzxworld

M1 版本 macOS 使用 Docker 安装 ClickHouse 数据库

ClickHouse 是一个 OLAP 类型的数据库软件,和 MySQL 这种 OLTP 类型的数据库不同,适合用来做海量数据的分析汇总,目前刚好要开始一项数据报表的业务,我准备尝试一下这个之前从未接触过的数据库。

关于 OLTP 和 OLAP 的简单介绍如下:

  • OLTP(Online Transaction Processing)联机事务处理数据库可以高效地存储和更新大量事务数据,确保数据的完整性和可用性。
  • OLAP(Online Analytical Processing)联机分析处理数据库用来对数据进行合并和分组,可以从不同的角度对数据进行聚合分析。

更详细的信息建议通过搜索去了解,因为不属于本文的主题,这里就不做过多解释。

尝试之前需要先安装,为了能快速体验,我轻车熟路的使用了 Docker。使用 docker search 命令搜索一下,会发现有两个版本的 ClickHouse,一个是 clickhouse/clickhouse-server,一个是 yandex/clickhouse-server。浏览网上使用 Docker 安装 ClickHouse 的文章,两个版本都有人使用,一时之间有点拿不定主意。用 docker pull 命令把两个版本都拉下来后发现镜像 ID 是一样的,看来随便使用哪个都行。

有了镜像后,我迫不及待的用 docker run 命令启动,结果报错:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
runtime: failed to create new OS thread (have 2 already; errno=22)

根据错误提示应该是镜像的系统架构和我的电脑不匹配。我用的是 M1 版本的 MacBook,默认的 x86 系统镜像无法运行,只能使用适用于 ARM 芯片架构的镜像。

Docker Hub 国内目前无法访问,docker 命令貌似也无法搜索镜像的线上标签,好一番查找才终于得到了可用的系统镜像标签 latest-alpine

docker pull clickhouse/clickhouse-server:latest-alpine

镜像拉下来,开始运行 ClickHouse 数据库:

docker run -d -p 18123:8123 -p 19000:9000 \
    --ulimit nofile=262144:262144 \
    --name clickhouse \
    clickhouse/clickhouse-server:latest-alpine

ClickHouse 默认会用到两个端口:8123 和 9000。8123 是 ClickHouse 的 HTTP 协议接口,可以通过发起 HTTP 请求来操作 ClickHouse 数据库。9000 是 ClickHouse 的 TCP 协议接口,一些常用的数据库客户端软件或是程序开发包会使用到这个接口。

--ulimit nofile 参数是一个系统限制设定,定义了单个用户能打开的最大文件数。

另外实际使用时建议还要映射容器中的 /var/lib/clickhouse/ 数据目录和 /var/log/clickhouse-server/ 日志目录到主机,这里只是本地测试,能省就省了。

等容器启动后,就可以使用 ClickHouse 默认的命令客户端连接到数据库:

docker exec -it clickhouse clickhouse-client

ClickHouse 的有些命令和 MySQL 差不多,比如 show databases 列出所有数据库,use 选择数据库,show tables 列出所有数据表。ClickHouse 默认创建了 default 数据库,选择这个数据库后尝试创建了一张数据表:

CREATE TABLE prdoucts(id Int32) ENGINE=MergeTree() ORDER BY id

从上面的语句中可以看到,在具体的操作上跟 MySQL 还是有些区别,这些区别需要深入尝试后才能了解的更多。

最后如果不习惯使用命令操作 ClickHouse,推荐一个 GUI 客户端软件:DBeaver,跨平台,三大系统都可以安装使用,只是界面不够精致,但胜在免费。

DBeaver-screenshot

在 macOS 上可以使用 brew 命令安装 DBeaver:

brew install --cask dbeaver-community