添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
 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)

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

能给个关注就更好了

分类:
后端
  •