python通过SSH管道访问ClickHouse

news2024/9/27 15:30:43

目录

  • 前言
  • 什么是跳板机
  • 什么是SSH协议
  • SSH管道访问ClickHouse
  • 参考文献

前言

因为新业务需要,数据都存储在阿里云服务器的ClickHouse数据库里,最近想取点数探索一下,于是下载了客户端工具DBeaver并成功连接ClickHouse,然后想通过python脚本来访问ClickHouse数据库,于是屁颠屁颠的装了一个clickhouse_driver模块,ip,端口,账号,密码等如下代码,折腾了半天始终不得要领,不是报102错误代码,就是209错误代码,不是说我没权访问就是说我访问超时,后来向运维人员一问,原来是没法本地直接访问远程服务器上的ClickHouse,需要通过跳板机,通过SSH管道访问ClickHouse数据库。

from clickhouse_driver import Client
client = Client(host ='***.***.*.***', port = '9000', user = '******', password = '******', send_receive_timeout=20)
print("ok")
sql = 'SHOW TABLES'
data = client.execute(sql)
print(data)

报错如下

Failed to connect to ***.***.*.***:9000
Traceback (most recent call last):
  File "C:\Users\bowen\AppData\Roaming\Python\Python39\site-packages\clickhouse_driver\connection.py", line 395, in connect
    return self._init_connection(host, port)
  File "C:\Users\bowen\AppData\Roaming\Python\Python39\site-packages\clickhouse_driver\connection.py", line 325, in _init_connection  
    self.socket = self._create_socket(host, port)
  File "C:\Users\bowen\AppData\Roaming\Python\Python39\site-packages\clickhouse_driver\connection.py", line 297, in _create_socket    
    raise err
  File "C:\Users\bowen\AppData\Roaming\Python\Python39\site-packages\clickhouse_driver\connection.py", line 288, in _create_socket    
    sock.connect(sa)
socket.timeout: timed out
Traceback (most recent call last):
   data = client.execute(sql)
  File "C:\Users\bowen\AppData\Roaming\Python\Python39\site-packages\clickhouse_driver\client.py", line 361, in execute
    with self.disconnect_on_error(query, settings):
  File "D:\software\Anaconda3\lib\contextlib.py", line 119, in __enter__
    return next(self.gen)
  File "C:\Users\bowen\AppData\Roaming\Python\Python39\site-packages\clickhouse_driver\client.py", line 305, in disconnect_on_error   
    self.establish_connection(settings)
  File "C:\Users\bowen\AppData\Roaming\Python\Python39\site-packages\clickhouse_driver\client.py", line 292, in establish_connection  
    self.connection.force_connect()
  File "C:\Users\bowen\AppData\Roaming\Python\Python39\site-packages\clickhouse_driver\connection.py", line 254, in force_connect
    self.connect()
  File "C:\Users\bowen\AppData\Roaming\Python\Python39\site-packages\clickhouse_driver\connection.py", line 416, in connect
    raise err
clickhouse_driver.errors.SocketTimeoutError: Code: 209. (***.***.*.***:9000)

什么是跳板机

举个例子,你要跨过一条1.8米宽的小溪,而你一次只能跨1米长,这是时候你是不是想在溪水中间搭一个石墩子用来垫脚呀,跳板机就像这个石墩子一样承担了一个跳板的角色,跳板机因此而得名。
跳板机

跳板机(Jump Server)也称堡垒机,是一种可作为跳板批量操作的远程设备的网络设备,是系统管理员和运维人员常用的操作平台之一,很多场景下,由于网络原因我们没法直接连接远程服务器,那么我们如何访问远程服务器呢?先弄一台可以与本地连接的中间服务器,而这台中间服务器可以访问目的服务器,先通过访问中间服务器,然后再访问目的服务器,从而达到间接访问的效果。那么在这中间摆了一道,程如何保证身份认证等工作呢?这就需要用到SSH协议。

什么是SSH协议

SSH(安全外壳协议 Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,用于在网络中实现客户端和服务端的连接,我们在本地电脑通过SSH连接远程服务器,它为我们访问提供了身份认证。

SSH协议
跳板机结合SSH协议,这从一定程度上提升了服务器的数据安全性,也提升了服务器的可维护性,但同时也带来了一定的繁琐性和不稳定性。

SSH管道访问ClickHouse

在对跳板机和SSH协议有一个大致了解之后,我们可以着手通过SSH管道对云端的ClickHouse进行访问,请注意跳板机的ip地址,端口号,账号和密码与远程服务器上ClickHouse的ip地址,端口号,账号和密码的区别,这个最好向运维人员问清楚。

from sshtunnel import SSHTunnelForwarder
from clickhouse_driver import Client

with SSHTunnelForwarder(
        ssh_address_or_host = ('***.***.*.***', 22),  #ssh地址及端口
        ssh_username='****', #ssh连接的用户名
        ssh_password='*******', #ssh连接的密码
        remote_bind_address=('********', 9000), #clickhouse所在的地址及端口
        local_bind_address=('127.0.0.1', 9000)
       ) as server:
    server.start() #启动服务

    client = Client(host= '127.0.0.1', # 此处必须是必须是127.0.0.1
                    port= server.local_bind_port, ##clickhouse服务器的端口9000,
                    user='*****', #clickhouse账号
                    password='******', ##clickhouse密码
                    send_receive_timeout=1000);
    c_sql = "SELECT * FROM ods_base.time_temp limit 10" #sql语句
    data = client.query_dataframe(c_sql)
    print(data.head())

以上代码就是我们通过跳板机和SSH协议并成功访问服务器上的ClickHouse,其实不单ClickHouse数据库, MySQL,redis等各种数据库都可以通过这种跳板机加SSH管道方式进行访问,她提供了一种远程服务器上数据库访问范式。

参考文献

1,利用python连接clickhouse数据库
https://blog.csdn.net/laocuohui7583/article/details/102487741
2,Python 连接clickhouse数据库以及新建表结构,csv导入数据
https://blog.csdn.net/qq_45956730/article/details/127246423
3,Python连接Clickhouse遇坑篇,耗时一天成功连接!
https://blog.csdn.net/weixin_44786530/article/details/128094447
4,MySQL连接:传统方案连接还是通过SSH连接?哪个好?
https://www.jianshu.com/p/76f3a0d3b802
5,python 使用mysqldb模块通过SSHTunnelForwarder隧道连接mysql
https://www.cnblogs.com/rmticocean/articles/15754617.html
6,https://pypi.org/project/sshtunnel/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/496971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端面试题】这些js功能你一定要学会

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 1.图片失败,重新加载 如果图片资源不存在,那可以设置图片失败的占位…

深度学习——A3C算法

A3C算法(Asynchronous Advantage Actor-Critic) DDPG算法之后,DeepMind对其改造,提出了效果更好的 Asynchronous Advantage Actor-Critic(A3C)算法(论文是 Asynchronous Methods for Deep Rein…

【谷粒商城之远程调用和异步调用丢失请求头问题】

本笔记内容为尚硅谷谷粒商城远程调用和异步调用丢失请求头问题部分 目录 一、Feign远程调用丢失请求头 二、Feign异步调用丢失请求头问题 一、Feign远程调用丢失请求头 ​ ​ 问题: feign在远程调用之前要构造请求,调用了很多的拦截器。 浏览器发送请…

u01使用率100%报错归档满的问题

今天下午客户报数据库无法连接了,我也立刻登录查看 因为显示orcl1归档满了,我就登录查看磁盘组的空间,发现空间空余很多 就sqlpus登录了,发现u01使用率满了 [oracledb1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 …

《面试1v1》动态代理

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官: 那你能说一下反射和动态代理的关系吗? 候选人: 当然可以。动态代理是一种基于反射的机制,它可以在运行时动…

动设备维护管理的新趋势——在线监测与故障诊断系统

随着工业自动化水平的提高,动设备在现代工业中扮演着越来越重要的角色。然而,动设备故障率高、维修难度大、维护费用高是工厂面临的重要挑战之一。针对这些问题,在线监测与故障诊断系统逐渐成为动设备维护管理的新趋势。 图.设备工程师正在维…

Spring Cloud Alibaba: Gateway 网关过滤器 GatewayGatewayFilter factory (记录)

目录 AddRequestHeader GatewayFilter factory AddRequestHeadersIfNotPresent GatewayFilter factory AddRequestParameter GatewayFilter Factory AddResponseHeader GatewayFilter Factory CircuitBreaker GatewayFilter factory circuit breaker based on the status…

真题详解(构造二叉树)-软件设计(六十八)

真题详解(归纳法)-软件设计(六十七)https://blog.csdn.net/ke1ying/article/details/130517187 CMM能力成熟模型 CL0(未完成):过程域未执行或未得到定义的目标。 CL1(已执行):将可标识的输入工作产品转换成可标识的…

数组中的empty剖析

数组中的empty剖析 一、首先empty是怎么来的 直接通过new Array来新建,手动修改数组的length,逗号之间没有任何数据等 const array new Array(3); console.log(array); //* (3) [empty 3]const array2 [1, , 3]; console.log(array2); //* [1, e…

【软考|软件设计师】进程p1,p2,p3,p4,p5和p6的前趋图

目录 题目: 答: 题目: 进程p1,p2,p3,p4,p5和p6的前趋图如下图所示。用PV操作控制这6个进程之间同步与互斥 的程序如下,程序中的空(1)和空(2)处应分别为________,空(3)和空(4)处分别为________, 空(5)和空(6)处应分别为_______…

数据结构:图的插入和删除

线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图中的数据元素我们称之为顶点(Vertex)。 线性表中可以没有数据元素,称之为空表。树中可以没有结点,叫做空树。但图没有空图。 线性表中,…

2023年好用的MacBook文件管理软件推荐

我们已经有多年的 macOS 编程经验,也开发了很多大家都可以使用的工具。 我们可以解决各种 Mac 问题。 CleanMyMac X 这里是一些小建议:下载 CleanMyMac 即可快速解决本文章中提到的一些问题。但是,为了帮助您自行操作,我们还整理…

举一反三,从“温度转换“到“python蟒蛇绘制“,快速掌握Python语法

1.温度转换实例 我们先用Pychar写一个小程序,从这个小程序出发,我们将快速学习到python中的基础语法.本章中涉及到的语法只是初始语法部分,后续章节将会详细讲解python语法. "温度转换"实例编写:将两种温度体系转换.摄氏度转换为华氏度华氏度转换为摄氏度. 设计算法…

前端项目的通用优化策略

一、虚拟滚动 当我们开发的时候,遇到大数据加载,页面卡顿的问题应该如何处理?大多数情况下,我们都是尽量通过分页的方式处理这类问题,但是总有一些特殊的情况我们必须把数据全部加载到前端进行处理。我曾经遇到过一个…

智能优化算法:基于厨师的优化算法-附代码

智能优化算法:基于厨师的优化算法 文章目录 智能优化算法:基于厨师的优化算法1.基于厨师的优化算法1.1 初始化1.2 阶段1:厨师导师小组更新( X S 1 XS_1 XS1​到 X S N c XS_{Nc} XSNc​更新)1.3 阶段2:厨师…

Arduino处理json较大数据流以及GZIP数据流方法

Arduino处理json较大数据流以及GZIP数据流方法 ✨在一些需要使用网络并从网络数据平台获取数据的项目中,大多数据平台,提供支持的数据流格式,一般以json数据格式返回为主。 📓Arduino json数据流格式化处理方法 🏳‍🌈一般处理json数据基于都是通过ArduinoJson库来处理…

运营-9.内容消费

一个优秀的产品,页面层级要尽量浅 所以,对于常见的内容产品,用户做内容消费一般只涉及两层页面: 内容消费-图文 内容消费-视频 内容消费——免费消费模式 对于绝大部分内容产品来说,它们的内 容都提供免费消费模式。…

文本的清洗和标准化:如何处理混乱的数据?

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

Dubbo源码篇02---从泛化调用探究Wrapper机制的原理

Dubbo源码篇02---从泛化调用探究Wrapper机制的原理 什么是泛化调用从传统三层架构说起反射调用尝试优化 泛化调用泛化调用怎么用通过Spring使用泛化调用 利用泛化调用改造现有服务 泛化调用小结 Wrapper机制自定义代理dubbo底层wrapper原理小结 小结 什么是泛化调用 从传统三层…

java实现大气污染排放传输路径模拟(iClientOpenlayer前端渲染)

开头先看下模拟实现效果图 一、技术应用及背景说明 了解大气污染传输路径模拟可以帮助我们更好地了解空气污染的来源和传播方式,从而采取更有效的控制措施。这种模拟技术可以根据大气环境和气象条件,模拟出污染物在大气中的传播路径和影响范围&#xff0…