首页 > 解决方案 > 有没有办法用 Python 加速 Hive 查询

问题描述

我目前正在使用Pyhive连接到我们Hiveserver2的由Kerberos.

conn = hive.Connection(host=HIVE_HOST,
                           port=HIVE_PORT,
                           database=HIVE_DB,
                           auth='KERBEROS',
                           kerberos_service_name="hive")

我主要使用以下查询从该表中读取数百个标签的时间序列数据(10 秒间隔):

sql = """
select dt, 
max(case when tag_id = 'tag1' then val end) as tag1,
max(case when tag_id = 'tag2' then val end) as tag2,
max(case when tag_id = 'tag3' then val end) as tag3,
max(case when tag_id = 'tag4' then val end) as tag4,
.....
.....
from (

    select tag_id,
        cast(concat(year_mon_day,' ',lpad(hour_val,2,'0'),':',lpad(minute_val,2,'0'),
               ':',lpad(second_val,2,'0')) as timestamp) dt,
        val
    from tag_data
    where cast(year_mon_day) as date) >= '2018-09-01'
    and cast(year_mon_day) as date) < '2018-09-15'
) sub
group by dt
"""
cur = conn.cursor()
cur.execute(sql)
results = cur.fetchall()

此查询大约需要 40 分钟才能返回约 100,000 行和 400 多列。这只是 15 天的数据。最终,我们需要一次提取数月或数年的数据来进行机器学习。

我想知道是否有一种方法可以加快pyhive查询速度。我知道它sqlalchemy在后台,但是查询是否根据可用资源并行运行?我们有一个非常好的 HPC 资源可供使用。我怎样才能更快地运行它?

我应该使用PySpark并运行SparkSQL查询吗?但是我似乎无法找到如何使用 PySpark 连接到 hive2+kerberos。

标签: pythonhivepysparkkerberos

解决方案


推荐阅读