[原创]手把手教你搭建单机clickhouse开发环境
手把手教你搭建单机clickhouse开发环境
Clickhouse是一款非常优秀的高性能统计数据库。近些日子,由于研发工作需要,引入了clickhouse作为实时统计数据库。为了便于和研发团队一起分析问题,在本机搭建了clickhouse环境。过程中,还是不可避免地踩到了一些坑,所以就把这些解决过程都记录了下来,以免有类似问题能够快速定位和解决。
一、准备运行环境
我的工作电脑是华为的MateBookD,处理器i7-8550U 2GHz,内存16GB
操作系统为随机带的Windows10家庭中文版。
选择用虚拟机来搭建clickhouse,虚拟机配置为6.5G内存,两块硬盘各50GB,分配了2个4c的处理器。操作系统CentOS Linux release 8.3.2011
二、安装clickhouse
这一部分重点参考官方手册:https://clickhouse.tech/#quick-start
1、 // 安装管理repository及扩展包的工具yum
sudo yum install yum-utils
2、// 安装clickhouse-key,添加clickhouse.repo源
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/clickhouse.repo
3、 // 安装clickhouse-server和clickhouse-client组件
sudo yum install clickhouse-server clickhouse-client
4、// 设置clickhouse-server随操作系统自动启动
sudo /etc/init.d/clickhouse-server start
5、// 查看clickhouse-server运行状态
service clickhouse-server status
三、本机用clickhouse-client连接到clickhouse-server
首先尝试的是本机访问,通过以下命令:
clickhouse-client 报如下错误。
ClickHouse client version 20.12.5.14 (official build).
Connecting to localhost:9000 as user default.
Code: 210. DB::NetException: Connection refused (localhost:9000)
查看日志发现监听错误,查看配置文件。
vim /etc/clickhouse-server/config.xml,
将<listen_host>::</listen_host>取消注释,保存退出。
重启服务:service clickhouse-server restart,再次运行clickhouse-client连接成功。
四、用python连接到clickhouse-server
先安装python3(python2不支持该驱动):yum install -y python3 python3-devel
用pip3安装clickhouse驱动,pip3 install clickhouse-driver
进入python后,3步访问clickhouse-server:
1、引入该驱动
from clickhouse_driver import Client
2、连接到clickhouse-server
client = Client(host='IP地址', database='default', user='default',password='')
3、执行clickhouse查询语句
client.execute('SHOW DATABASES')
五、远程用clickhouse-client连接到clickhouse-server
用的是windows的linux子系统ubuntu(参考本公众号另一篇文章《用windows10家庭版构建基础的开发环境》)
安装clickhouse-client,然后运行clickhouse-client -h 虚拟机IP命令,报timeout错误,
Code: 209. DB::NetException: Timeout: connect timed out:
先ping虚拟机ip访问正常,然后查看防火墙端口:
firewall-cmd --list-ports 运行结果为空
增加端口远程访问映射,firewall-cmd --zone=public --add-port=9000/tcp --permanent
重启防火墙生效,firewall-cmd --reload
运行clickhouse-client -h 虚拟机IP成功。
六、远程用dbeaver连接到clickhouse-server,我用的dbeaver版本是直接从官网下载的ce版本,Version 7.3.0.20201129213。
1、新建数据库连接,选择clickhouse数据库类型下一步。
2、输入连接信息,如下图点击Test connection,
“1 ”Host:可以输入clickhouse所在服务器地址,端口如果没改过就用8123即可。输入“2 ”schema数据库名称[可不填],输入“3 ”username默认是default,输入“4 ”密码[如未设置则可不填写]。
点击“6 ”Test connection报超时,如第五步,需要把8123端口也加到防火墙访问映射列表上。firewall-cmd --zone=public --add-port=8123/tcp --permanent
重启防火墙生效,firewall-cmd --reload
仍报错无法连接,重点检查驱动设置,点击“5”Edit Driver Settings按照下图选择“Add Artifact”设置驱动信息。驱动以Artifact方式注册,
groupid 用ru.yandex.clickhouse,
Artifact Id用clickhouse-jdbc
Classifier空,
Version:release
然后下载驱动,测试连接成功。这里边比较容易出问题的还是驱动下载,如果出错,就重新加载一下Artifact。
七、给clickhouse-server的默认用户设置一个密码
分3步,1、随机生成sha256密钥(为安全不建议明文)
明文:PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"
密文:echo -n "$PASSWORD" | sha256sum | tr -d '-'
2、vim /etc/clickhouse-server/users.xml
找到“ <password></password>”替换为如下:
<password_sha256_hex>[密文]</password_sha256_hex>
目前为止,基本的clickhouse开发环境就建立起来了。
通用类似以下命令,可以运行编写好的sql文件
clickhouse-client -h [ip address] --password [password] --multiquery < [filename].sql
感谢大家的阅读,后续一些容易出错的地方,我也会持续总结、分享出来。