概述
读者可前往我的网站获得更好的阅读体验。
笔者最近遇到了许多关于数据分析的文章,大部分都使用了 Dune 等 SaaS
工具,这些工具往往提供了清洗后的区块链数据和数据库分析工具。对于大部分数据分析师而言,这些工具可以应对一系列复杂的数据分析问题,而且免去了搭建数据处理平台的苦恼。
但作为一个爱折腾的工程师,我决定几乎从零开始搭建一套区块链历史数据数据分析系统。在此项目中,我们仅使用了 0xfast
作为数据提供商,如果读者追求纯粹的自建,可以考虑自建以太坊节点抓取历史数据。
为尽可能提高分析系统的效率,我使用了 Clickhouse 作为数据存储和分析工具。本文仅使用 Clickhouse
以完成以下工作:
- 环境搭建。讨论在服务器内安装
Clickhouse
可能会遇到的问题并在个人计算机上安装客户端。 - 数据导入。使用纯粹的 SQL 代码导入数据,此处会涉及到使用
Clickhouse
进行 JSON 处理的内容。 - 数据分析。完成一些基础的数据分析任务,这并不是本文的核心。
注意,Clickhouse
对服务器似乎有着严格的性能要求,但由于本文分析的样本仅为 100 个区块,笔者使用 3 核心 3.5 GB 内存的服务器已经可以完成本博客中的任务。VPS负载如下:
当然,读者也可以考虑使用个人计算机完成此博客中的内容。如果涉及以太坊全区块链数据分析,建议使用高规格服务器,毕竟以太坊全节点数据集近 650GB。
环境搭建
服务端
如果你是一个时间价值比较高的工程师,且不想折腾clickhouse
的安装,你可以选择 Clickhouse Cloud,似乎有一个月的试用期,价格数据如下:
如果你选择此方案,就无需阅读本节。
以下介绍如何在服务器上安装Clickhouse
,本部分主要参考了 Clickhouse install,同时本文也会补充一些部分错误的修复方法。
由于笔者并不是一边搭建一边编写的博客,错误的截图并未给出,如果读者遇到错误,可在本文的评论区内留下截图。
安装Clickhouse
相当简单,步骤如下:
- 下载脚本并执行
curl https://clickhouse.com/ | sh
- 执行安装程序
执行此安装程序过程中,请耐心等待,在前期安装过程中,不会有任何输出提示。sudo ./clickhouse install
- 在安装过程的最后,会要求输入默认密码,建议键入复杂密码:
读者可能已经发现此处使用了Creating log directory /var/log/clickhouse-server. Creating data directory /var/lib/clickhouse. Creating pid directory /var/run/clickhouse-server. chown -R clickhouse:clickhouse '/var/log/clickhouse-server' chown -R clickhouse:clickhouse '/var/run/clickhouse-server' chown clickhouse:clickhouse '/var/lib/clickhouse' Enter password for default user:
clickhouse:clickhouse
用户进行了一系列授权操作,而不是root
用户,所以进行应用操作时请使用clickhouse
用户 - 启动
clickhouse
:sudo clickhouse start
- 校验状态:
合理的输出如下:sudo clickhouse status
如果您的输出格式与之不符,就说明启动失败。/var/run/clickhouse-server/clickhouse-server.pid file exists and contains pid = 10818. The process with pid = 10818 is running.
一旦启动失败,我们就要进入痛苦的debug
阶段,读者可以使用以下命令启动clickhouse
:
sudo clickhouse server --config-file /etc/clickhouse-server/config.xml
此处我们指定了启动配置文件
/etc/clickhouse-server/config.xml
,否则会使用默认文件,造成启动失败的问题。
此命令会将log
输出到终端,读者可以自行查看进行debug
,大部分问题都出现在用户权限配置问题上。
下面列出一个仅用于学习的配置方法,为方便使用,我直接将root
用户置为clickhouse
的管理者,并手动启动服务器,相关命令如下:
- 配置权限:
sudo chown -R root /var/lib/clickhouse /var/log/clickhouse-server /etc/clickhouse-server
- 手动启动服务器:
sudo /usr/bin/clickhouse-server --config-file /etc/clickhouse-server/config.xml --pid-file /var/run/clickhouse-server/clickhouse-server.pid --daemon
如果读者遇到其他问题,请直接放在评论区
最后,请放行相关端口,此过程需要配置系统防火墙,读者请根据自身系统来进行配置。读者可尝试开启 http://服务器IP:配置端口/play
查看是否可以配置正确,若配置正确且放行端口正确,会出现如下显示:
客户端
使用一个优秀的本地SQL
客户端会大幅提高工作效率,由于不想在服务端安装一套clickhouse
,所以我选择了其他的sql
客户端,读者可以查看自己常用的 SQL 客户端是否支持 clickhouse
。在本博客中,我使用了 dbeaver 作为客户端,原因在于:
- 社区版开源且免费
- 压缩后体积仅为 110 MB,较为小巧
- 主流操作系统均支持
读者可以根据自己的系统选择下载对应的版本。