python通过调用jvm连接impala和phoenix数据库

很多已经入坑了数据挖掘工程师和数据分析师的人,基本上都会接触到mysql、SqlServer、hive、impala以及phoenix等等各种各样的数据库。

作为数据挖掘工程师和数据分析师而言,我们不需要精通数据库环境的搭建,数据库的性能优化,但我们需要掌握如何使用查询。

如果你选择一门语言来做数据分析、数据挖掘的工具,那么这门语言如何连接对应的数据库显得尤为重要。因为进行复杂的数据分析,我们不可能只用一条查询语句解决,我们需要将查询的结果在进行数据清洗等等一系列的操作转换,数据才能打到我们的要求。

下面是python连接impala和phoenix数据库的方式

安装

# 需要提前安装好java环境,最好重启一遍
pip install jaydebeapi

连接impala和phoenix的基类

import jaydebeapi

class JdbcConnectDatabase():
    def __init__(self, conn_url, user, pwd, driver, jar_addr):
        self.conn = jaydebeapi.connect(driver, conn_url, [user, pwd], jar_addr)

    def query(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)
            cols = cursor.description
            col = []
            for i in cols:
                col.append(i[0])
            print(col)
            return col,cursor.fetchall()
    
    # 我们一般只有select权限,可忽略
    def commit_sql(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)
            self.conn.commit()

    def close(self):
        self.conn.close()

连接impala

# 需要的jar包自行下载,以下是我连接需要用到的jar包
IMPALA_JAR = 'impalajdbc\commons-logging-1.1.1.jar;' \
             'impalajdbc\hive_metastore.jar;' \
             'impalajdbc\hive_service.jar;' \
             'impalajdbc\httpclient-4.1.3.jar;' \
             'impalajdbc\httpcore-4.1.3.jar;' \
             'impalajdbc\ImpalaJDBC41.jar;' \
             'impalajdbc\libfb303-0.9.0.jar;' \
             'impalajdbc\libthrift-0.9.0.jar;' \
             'impalajdbc\log4j-1.2.14.jar;' \
             'impalajdbc\ql.jar;' \
             'impalajdbc\slf4j-api-1.5.11.jar;' \
             'impalajdbc\slf4j-log4j12-1.5.11.jar;' \
             'impalajdbc\TCLIServiceClient.jar;' \
             'impalajdbc\zookeeper-3.4.6.jar;'

# request_pool=dev12更改为给你们划分的资源池,jks文件在签审平台下载
conn_url = 'jdbc:impala://ip地址:端口号/数据库名称;AuthMech=3;ssl=1;sslTrustStore=xxx.jks的配置文件路径;request_pool=dev12'


def get_impala_client(user='', password=''):
    return ImpalaClient(
        conn_url=_conn_url,
        user=user,
        pwd=password,
        driver='com.cloudera.impala.jdbc41.Driver',
        jar_addr=IMPALA_JAR
    )

连接phoenix


# 自行修改本地jar包的位置
PHOENIX_JAR = 'phoenixjdbc\phoenix-5.0.0-HBase-2.0-client.jar;' \
              'phoenixjdbc\phoenix-5.0.0-HBase-2.0-thin-client.jar;' \
              'phoenixjdbc\phoenix-core-5.0.0-HBase-2.0.jar'

class PhoenixClient(JdbcConnectDatabase):
    def __init__(self, conn_url, user, pwd, driver, jar_addr):
        super().__init__(conn_url, user, pwd, driver, jar_addr)
        

gmbs_phoenix_url = 'jdbc:phoenix:ip地址,ip地址:端口号'


def get_phoenix_client(user='', password=''):
    return PhoenixClient(gmbs_phoenix_url, user, password,
                         'org.apache.phoenix.jdbc.PhoenixDriver', PHOENIX_JAR)

希望对大家有所帮助,有问题的地方也请大家批评指正,感谢!!

能给个关注就更好了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值