Python连接ClickHouse失败排查:端口查询及代码问题分析
ClickHouse连接失败及代码问题排查
一、查看ClickHouse端口的方法
- 查看配置文件:打开ClickHouse服务器的主配置文件(通常路径为
/etc/clickhouse-server/config.xml),搜索以下标签获取对应端口:<http_port>:HTTP协议端口,默认8123<tcp_port>:TCP协议端口,默认9000(clickhouse_driver默认使用此端口)<interserver_http_port>:集群节点间通信端口,默认9009
- 命令行查看监听端口:在ClickHouse服务器上执行以下命令,直接查看正在运行的ClickHouse进程监听的端口:
netstat -tulpn | grep clickhouse # 或用ss命令(更现代) ss -tulpn | grep clickhouse - 通过ClickHouse客户端查询:如果能本地连接ClickHouse,执行SQL查询获取端口配置:
SELECT name, value FROM system.settings WHERE name IN ('http_port', 'tcp_port');
二、代码中的问题分析与修复
1. 连接参数错误
- Host参数错误:代码中
host='user'是错误的,这里应该填写ClickHouse服务器的IP地址或主机名,比如本地运行填'localhost',远程服务器填对应IP(如'192.168.1.100')。 - 端口与协议不匹配:
clickhouse_driver默认使用TCP协议(对应端口9000),如果要连接8123(HTTP端口),必须显式指定协议:
如果用默认TCP协议,端口应改为9000(若未修改过配置):client = Client(host='正确的服务器地址', port=8123, protocol='http')client = Client(host='正确的服务器地址', port=9000)
2. 数据插入问题
- 表名拼写错误:代码中
INSERT INTO custmer VALUES的表名custmer应为customer(与CSV文件名customer_df.csv对应,大概率是拼写失误)。 - 逐行插入效率极低:循环逐行插入会产生大量网络请求,建议批量读取数据后一次性插入:
from clickhouse_driver import Client import csv # 修复连接参数 client = Client(host='localhost', port=9000) with open('/home/user/Desktop/customer_df.csv') as csvfile: reader = csv.reader(csvfile) next(reader) # 跳过表头(如果CSV有表头的话) data = list(reader) # 批量读取所有数据 client.execute('INSERT INTO customer VALUES', data) # 一次性插入 - 未处理表头:若CSV文件第一行是表头,直接插入会导致数据类型不匹配,需用
next(reader)跳过表头行。
内容的提问来源于stack exchange,提问作者Suhas T
相关产品推荐
相关产品推荐

