python连接hiveserver2_hiveserver2 python client

2023-11-05

一个hiveserver2 python客户端的例子,大部分代码来自于hue。

忽略了一些必要的判断,只是做一个简单的例子。

需要安装thrift以及把hive-0.10.0-cdh4.3.0/src/service/src/gen/thrift/gen-py目录拷贝到项目目录中。

thrift文件在hive-0.10.0-cdh4.3.0/src/service/if/TCLIService.thrift

默认需要通过sasl客户端,前端的表现是连接了没反应,后端hiveserver2有错误日志

java.lang.RuntimeException: org.apache.thrift.transport.TTransportException

at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:219)

如果不用sasl客户端,可以设置参数(参考stackoverflow)

hive.server2.authenticationNOSASL

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys

import os

cur_dir = os.path.dirname(os.path.abspath(__file__))

sys.path.append(os.path.join(cur_dir, "gen-py"))

from TCLIService import TCLIService

from TCLIService.ttypes import TOpenSessionReq, TGetTablesReq, TFetchResultsReq,\

TStatusCode, TGetResultSetMetadataReq, TGetColumnsReq, TType,\

TExecuteStatementReq, TGetOperationStatusReq, TFetchOrientation,\

TCloseSessionReq, TGetSchemasReq, TGetLogReq, TCancelOperationReq

from thrift import Thrift

from thrift.transport import TSocket

from thrift.transport import TTransport

from thrift.protocol import TBinaryProtocol

class HiveServerTColumnValue:

def __init__(self, tcolumn_value):

self.column_value = tcolumn_value

@property

def val(self):

# TODO get index from schema

if self.column_value.boolVal is not None:

return self.column_value.boolVal.value

elif self.column_value.byteVal is not None:

return self.column_value.byteVal.value

elif self.column_value.i16Val is not None:

return self.column_value.i16Val.value

elif self.column_value.i32Val is not None:

return self.column_value.i32Val.value

elif self.column_value.i64Val is not None:

return self.column_value.i64Val.value

elif self.column_value.doubleVal is not None:

return self.column_value.doubleVal.value

elif self.column_value.stringVal is not None:

return self.column_value.stringVal.value

class HiveServerClient(object):

user = 'fatkun'

session_handle = None

def connect(self):

transport = TSocket.TSocket('localhost', 10000)

transport = TTransport.TBufferedTransport(transport)

protocol = TBinaryProtocol.TBinaryProtocol(transport)

client = TCLIService.Client(protocol)

transport.open()

self._client = client

def open_session(self, username):

req = TOpenSessionReq(username=username, configuration={})

res = self._client.OpenSession(req)

session_handle = res.sessionHandle

print res

return session_handle

def call(self, fn, req, status=TStatusCode.SUCCESS_STATUS):

if self.session_handle is None:

self.session_handle = self.open_session(self.user)

if hasattr(req, 'sessionHandle') and req.sessionHandle is None:

req.sessionHandle = self.session_handle

res = fn(req)

return res

def execute_statement(self, statement, max_rows=100):

req = TExecuteStatementReq(statement=statement, confOverlay={})

res = self.call(self._client.ExecuteStatement, req)

return self.fetch_result(res.operationHandle, max_rows=max_rows)

def fetch_result(self, operation_handle, orientation=TFetchOrientation.FETCH_NEXT, max_rows=100):

fetch_req = TFetchResultsReq(operationHandle=operation_handle, orientation=orientation, maxRows=max_rows)

res = self.call(self._client.FetchResults, fetch_req)

if operation_handle.hasResultSet:

meta_req = TGetResultSetMetadataReq(operationHandle=operation_handle)

schema = self.call(self._client.GetResultSetMetadata, meta_req)

else:

schema = None

return res, schema

def main():

client = HiveServerClient()

client.connect()

client.execute_statement(statement='SET hive.server2.blocking.query=true')

statement = 'select name from test'

res, schema = client.execute_statement(statement)

for row in res.results.rows:

for column in row.colVals:

print HiveServerTColumnValue(column).val

if __name__ == '__main__':

main()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python连接hiveserver2_hiveserver2 python client 的相关文章

  • vscode配置码云

    参考 https blog csdn net watfe article details 79761741 1 通过git init命令把这个目录变成Git可以管理的仓库 建立本地仓库 本地仓库和代码开发的不是同一个 git init In
  • 关于elasticsearch连接时断时续以及Kibana出现server is not ready yet的问题,大坑!

    代码小白 记录自学制作谷粒商城遇到的坑 如有错误请轻喷 1 问题的出现 elasticsearch连接时断时续 在加完分词插件之后 出现了elasticsearch连接失败的情况 但是经过多次刷新之后居然是可以成功连接上去的 查看日志也没发
  • react的jsx的基本语法和创建脚手架

    初始react react是一个构建用户界面的javascript库 创建一个简单react 第一步 引入核心库 第二步 在真实dom中提供一个挂载点 div div 第三步 业务代码 创建虚拟dom对象 createElement let
  • Keil如何提升性能和减小代码大小

    在编译程序的过程中 需要考虑两个问题 一个是使用的代码够不够快 另一个是编译的代码够不够小 下面汇集一些解决方法 主要针对Keil ARMCC编译器 1 让代码够小 如图 1 未进行任何优化时 keil编译生成的文件大小为 9668字节 第
  • 基于麻雀算法优化的深度极限学习机DLM的预测算法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章讲解 1 概述 根据ELM AE的特征表示能力 将它
  • 循环机换变速箱油教程_「图文并茂」最先进的自动变速箱油更换全过程

    自动变速箱发展至今 内部的电子和液压控制等已经变得异常复杂 因此定期保养自动变速箱就显得尤为重要 一般来说 更换自动变速箱油的期限汽车厂家建议6 8万公里或2 3年左右 4S店会建议缩短更换里程 不及时更换自动变速箱油会直接影响车辆的性能
  • 关于机器学习数据挖掘的算法总结(优缺点)

    目录 一 支持向量机 SVM 二 朴素贝叶斯 三 逻辑回归Logistic Regression 四 线性回归 五 最近领算法 KNN 六 决策树 七 K Means聚类 八 层次聚类 九 DBSCAN的分析 十 回归 Regression
  • RTL8762DK RTC(五)

    概述 本示例 只要介绍 RTC 如何实现 年 月 日 时 分 秒 又离成功进了一步 一 环境 1 硬件 RTL8762DK 128M Bits Falsh 2 软件 keil IDE 二 RTC的使用 1 创建examples ble rt
  • 高泽龙:下一个独角兽来自长租公寓,行业创新极大地释放租赁红利

    超过万亿的巨大市场前景 九部委联合印发住房租赁新政 提出将采取多种措施加快推进租赁住房建设 培育和发展住房租赁市场 长租公寓尤其让众多资本机构觊觎 正在用惊人的扩张速度勾勒出一幅蓝图盛景 对于被称为 下一个风口 的公寓行业 各方有不同的解读
  • ant design vue 年份选择器

    因为ant design vue 里面没有原生的年份选择器 需要使用date picker去改造 html
  • 文件包含漏洞特点和php封装伪协议

    渗透学习 文件包含漏洞 文章目录 渗透学习 前言 本文只做学习用途 严禁利用本文提到的技术进行非法攻击 否则后果自负 本人不承担任何责任 一 文件包含漏洞 二 实验步骤 1 文件包含特点 2 本地包含配合文件上传包含图片马 3 包含Apac
  • udig下载、安装及汉化,生成geoserver图层样式sld文件

    uDig是一款开源免费的桌面地理信息系统框架软件 uDig汉化版主要采用RCP技术构建 内置的多专业的水文工具 拥有复杂专业的分析能力 既可以作为独立程序运行 还可以作为插件使用 uDig是一个 open source EPL and BS
  • 【报错记录】AttributeError: ‘xxx‘ object has no attribute ‘module‘

    文章目录 问题描述 问题分析与解决 总结 参考资料 问题描述 在跑代码时 报出 AttributeError InpaintGenerator object has no attribute module 的错误 如下图所示 经过一通Deb
  • Qt 带参数的信号与槽

    1 在dialog h中定义带参数的信号函数 signals void A double level double pitch double dis double time double min spend double max spend
  • 花5分钟判断,你的Jmeter技能是大佬还是小白!

    jmeter 这个工具既可以做接口的功能测试 也可以做自动化测试 还可以做性能测试 其主要用途就是用于性能测试 但是 有些公司和个人 就想用 jmeter 来做接口自动化测试 你有没有想过呢 下面我就给大家讲讲 用 jmeter 如何做接口
  • Linux文件权限一共10位长度,分成四段

    Linux文件权限一共10位长度 分成四段 Linux文件权限 1 文件aaa的访问权限为rw r r 现要增加所有用户的执行权限和同组用户的写权限 下列哪些命令是正确的 a chmod a x g w aaa b chmod 764 aa
  • BSC 及HT 等链的NFT 创造及绑定图片教程

    我们首先打开REMIX 智能合约编程网站 下面代码是NFT合约 Submitted for verification at BscScan com on 2021 10 07 File openzeppelin contracts util
  • RxJava基本流程和lift源码分析

    http blog csdn net lzyzsd article details 50110355
  • WebStorm Debug 配置

    WebStorm 调试配置 所需工具 Chrome 浏览器 Chrome 浏览器插件 JetBrains IDE Support WebStorm 配置过程 首先 下载 Chrome 浏览器以及 JetBrains IDE Support

随机推荐

  • node-第三方模块之nodemailer模块

    nodemailer 模块 专门用来发邮件 下载使用
  • 利用原生js实现TodoList----最简单的待办事项列表(附详细注释)

    利用js实现TodoList 1 todoList html
  • UITableView嵌套WKWebView的那些坑

    最近项目中遇到了一个需求 TableView中需要嵌套Web页面 我的解决办法是在系统的UITableViewCell中添加WKWebView 开发的过程中 遇到了些坑 写出来分享一下 1 首先说一下WKWebView的代理方法中 页面加载
  • 锂电池充放电管理芯片和输出芯片

    锂电池充放电管理芯片 和输出芯片 锂电池充放电管理芯片 关乎锂电池供电的产品 在锂电池上 需要三个电路系统 1 锂电池保护电路 2 锂电池充电电路 3 锂电池输出电路 1 单节的锂电池保护电路 单节为 3 7V 锂电池 也叫 4 2V 和
  • springmvc

    springmvc 前景介绍 springmvc图解 环境搭建 工程起步 springmvc的配置文件 相关的注解 RequestMapping的源码 RequestMapping params PathVariable的作用 Reques
  • 【信号与系统】系统线性时不变、因果稳定性的判定

    1 线性 线性包含均匀性和叠加性 其中均匀性是指输入乘以一个常数 输出也乘一个相同的常数 叠加性是指两个输入信号相加 其对应的输出也是相加关系 判定 假设系统输入E1对应输出R1 输入E2对应输出R2 若信号C1E1 C2E2输入系统后得到
  • Kmeans聚类

    一 特征预处理 1 处理缺失 异常值 缺失值直接补0 异常值可以设置一个阈值 比喻小于数据的1分位数 或者大于95分位数 就把数据进行四舍五入 用相应的分位数赋值 这样可以减少异常值对于聚类的影响 因为聚类一般计算的是距离 有异常值影响会比
  • 谷歌瓦片的网址

    有时我们需要离线谷歌地图 最简单的办法是通过网页获取 网上有很多方法 这里介绍一种非常简单实用的 闲话少叙 先上一个网址 http mt0 google cn vt lyrs s x 0 y 0 z 0 打开后在浏览器中可以看到如下图 这张
  • [第二章 web进阶]文件上传]

    先看一下题目源码
  • dataframe先分组运算再合并输出

    dataframe先分组运算再合并输出 主要用到分组函数groupby和合并函数append concat 具体代码 比如先分组 对每组数据进行删除异常值处理 MAD 然后将处理后的数据合并成一个dataframe输出 import os
  • ArcGIS Maps SDK for Unity 0.3旋转

    ArcGIS Maps SDK for Unity1 0版本已出 基础参考 API https developers arcgis com unity sdk 基础 https cloud tencent com developer new
  • Maple学习(一)Maple的安装

    老板找了高尔夫球的代码 想让我运行得出结果 老板做企业管理的 在代码上比我不着急 又是发Maple教程 又是发文档的 看来我的好日子结束了 Maple系统内置高级技术解决建模和仿真中的数学问题 包括世界上最强大的符号计算 无限精度数值计算
  • vhdx中的win10进行大版本系统升级

    文章目录 前言 普通的win10大版本iso升级方式 vhdx中的win10大版本升级方式 难点分析 无法在虚拟驱动器上安装windows 解决方案 HyperV升级vhdx win10 过程效果图 hyperV虚机创建mbr引导启动项 h
  • Java中如何通过键盘输入一个字符串(数组等相关操作)

    如何在自己的程序中进行键盘输入与输出 废话不多说 直接上代码 第一种 1不限制输入数组的长度 import java util Scanner public class InputArrayNoLimitLength public stat
  • 【编程笔试】美团2021校招笔试-通用编程题第3场(附思路及C++代码)

    导览 练习地址 小美的仓库整理 小美的跑腿代购 小美的用户名 小美的区域会议 总结 练习地址 点此前往练习 小美的仓库整理 小美是美团仓库的管理员 她会根据单据的要求按顺序取出仓库中的货物 每取出一件货物后会把剩余货物重新堆放 使得自己方便
  • Jenkins pipeline中获取执行用户的账号和邮件地址

    有时候在pipeline中需要获取执行build 的用户信息 如用户名 用于自动给用户授权另外一个工具 用户邮箱 用于自动给用户发邮件 这时可以使用插件 Buid User Var 具体pipeline 写法如下 pipeline agen
  • ListView刷新的实现(加上自己的分析)

    本文转载地址为http blog csdn net guolin blog article details 9255575 这里我们将采取的方案是使用组合View的方式 先自定义一个布局继承自LinearLayout 然后在这个布局中加入下
  • 有哪些道理是你毕业多年后才明白的?

    12 1更新 1 感情的中不存在离开谁 ta就活不下去的说法 被甩了不要一直沉溺于悲痛中 伤身 你最初喜欢一个人开始可能因为他的颜值 身高等外在条件 后面被他的才华等等所吸引 最后被他的一些品质 诸如诚实 友善等等品质所折服 如果某一天 他
  • maximum call stack size exceeded ajax,javascript - AJAX Maximum call stack size exceeded - Stack Ove...

    I have a javascript function that reads an xml From that function it calls a second function to prompt the user to updat
  • python连接hiveserver2_hiveserver2 python client

    一个hiveserver2 python客户端的例子 大部分代码来自于hue 忽略了一些必要的判断 只是做一个简单的例子 需要安装thrift以及把hive 0 10 0 cdh4 3 0 src service src gen thrif