python通过thrift连接hive,异步执行查询_L瑜的博客-程序员宅基地

技术标签: hive  python  数据库  大数据  

在开始之前,我们需要具备一些基础知识:

什么是hive?

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。

hive对外暴露出来的用法,基本上和Mysql相同,但是它能做到Mysql做不到的对大数据处理,例如几十亿条数据,放在Mysql中,必然不堪重负,但在hive中,举重若轻。

如何使用?

所需环境:

pyhive

安装方式:

pip install pyhive 

hive-thriftserver

hive具有一个可选的组件叫HiveThrift,其允许通过指定端口,通过thrift方式访问hive。
启动Thrift Server:
进入hive安装目录,使用如下命令开启服务

hive --service hiveserver &

检查HiveServer是否启动成功:

netstat -apn | grep 10000

具体思路

hive的thriftserver,支持我们在连接中异步地提交sql,并且通过查询对应的cursor来实时获取任务的执行状态。所以我们可以在提交后将cursor保留,并定时地获取sql的状态,当执行完成后,则fetch结果

python代码

#提交sql,并保存对应的cursor和connection
def execute_async(sql):
    conn = hive.connect(host = '127.0.0.1', port = 10000)#建立连接
    cursor = conn.cursor()#取得cursor
    cursor.execute(sql, async = True)
    return cursor, conn

#检查任务状态,将上面执行后返回的cursor作为参数
def check_state(cursor):
    job_handler = cursor.poll()
    state = job_handler.operationState
    if state in (TOperationState.INITIALIZED_STATE, TOperationState.RUNNING_STATE, TOperationState.PENDING_STATE):
        return "RUNNING"
    elif state in (TOperationState.CANCELED_STATE, TOperationState.ERROR_STATE, TOperationState.UKNOWN_STATE):
        return "ERROR"
    elif state == TOperationState.FINISHED_STATE:
        return "FINISHED"
    elif state == TOperationState.CLOSED_STATE:
        return "CLOSED"
    return "UNKNOW"

上面的代码只是异步执行的核心代码。具体的逻辑还需要结合自身需求进行填充。当然,查询完毕之后,不要忘记最重要的一步:释放资源

    cursor.close()
    conn.close()
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lambert310/article/details/77430363

智能推荐

disableScroll固定头部,scroll-view滚动列表_disablescroll": true,-程序员宅基地

json文件{ "disableScroll": true}在小程序提供的配置中wxml文件<view class="scroll-view-container"> <scroll-view class="scroll-view" scroll-y style="height: 100%;" scroll-top="{{ scrollTop }}" enable-back-to-top refre_disablescroll": true,

从源“http://localhost:63342”访问“http://localhost:8080/login/denglu?username=admin&password=admin&_=1641-程序员宅基地

当我们遇到这个问题的时候,是出现跨域的问题,我们只需要在controller层加上这个@CrossOrigin这个注解就????了

Android自定义View的长按事件的思考_android 自定义view长按事件-程序员宅基地

在写自定义view的时候经常会遇到需要为其添加长按事件的情况,当然,这里分几种情况,比如该自定义view如果是继承自listView或者是gridView的话,可以直接为其建立一个长按监听器: listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override _android 自定义view长按事件

Android实现在线预览office文档(Word,Pdf,excel,PPT.txt等格式)_android 在线office-程序员宅基地

1.概述我们都知道,Android原生并没有提供浏览office文档格式的相关Api,在安卓端想要实现在线预览office文档的功能显然很是复杂,我们手机安装QQ浏览器时,在手机打开office文档时会提示如图, 这就是这篇文章的主角–腾讯X5内核(TBS)2,什么是TBS腾讯浏览服务(TBS,Tencent Browsing Service)整合腾讯底层浏览技术和腾讯平台资源及能力,提供整体浏览_android 在线office

HDU 3790 最短路径问题 Dijkstra-程序员宅基地

http://acm.hdu.edu.cn/showproblem.php?pid=3790题意:  普通的最短路问题,只不过加了个费用,在有多条最短路的情况下输出花费最少的那组答案.(双重权值)坑爹:  有重边的情况,开始做的时候当判断重边比原来小的时候,还去判断费用是不是比原来小..这样就会出错..是在找最短路径的前提下找到最小的花费.disprice数组和dis数组...

硬件:主板知识详解:扩展插槽_agp插槽和pci插槽哪个长-程序员宅基地

主板知识详解:扩展插槽扩展插槽,是主板上用于固定扩展卡并将其连接到系统总线上的插槽,也叫扩展槽。扩展槽是一种添加或增强电脑特性及功能的方法。例如,不满意主板整合显卡的性能,可以添加独立显卡,以增强显示性能;不满意板载声卡的音质,可以添加独立声卡,以增强音效;不支持 USB2.0或 IEEE 1394 的主板,可以通过添加相应的 USB2.0 扩展卡或 IEEE 1394 扩展卡,以获得该..._agp插槽和pci插槽哪个长

随便推点

无人机中的坐标系、旋转矩阵与相机姿态计算_无人机偏航角-程序员宅基地

球坐标系是三维坐标系中的一种,在无人机中一般使用球坐标系来表示相机姿态,相机姿态的坐标是相对于无人机的,而无人机的飞行姿态则是相对于大地坐标系的。在无人机飞行中,无人机平台由于飞行运动及气流运动等因素,会影响无人机的飞行姿态,这时搭载的相机姿态相对大地坐标系会发生变化,需要加入无人机姿态去计算修正,以便于更准确计算相机的观测位置。以上需要注意的是偏航角与其他角不同,偏航角的旋转是整个坐标系,即将无人机坐标系转换为大地坐标系,这里没有使用位移量,需要时加上经纬度的偏移。合并旋转后的三维度旋转矩阵。_无人机偏航角

Http状态码-程序员宅基地

完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b3Iub3JnLw%3D%3D在线查阅。HTTP 1.1的状态码被标记为新特性,因为许多浏览器只支持 HTTP 1.0。你应只把状态码发送给支持 HTTP 1.1的客户端,支持协议版本可以通过调用reque

SWT/JFace如何动态不占位隐藏/显示控件_swing jscrollpane4.setvisible(false);隐藏不占用位置-程序员宅基地

隐藏控件且不占位,要做到以下几点: 1、必须设置layoutData的exclude属性为true(只有这样设置,隐藏后才会不占位)2、调用.setVisible(false)方法3、如果是动态隐藏,还要调用.getParent().layout()方法 同样,显示被隐藏的控件,要做到以下几点:1、必须设置layoutData的exclude属性为false2、调用_swing jscrollpane4.setvisible(false);隐藏不占用位置

01_[pathlib]内置pathlib库的常用属性和方法_pathlib.path(__file__)-程序员宅基地

pathlib中的Path类可以创建path路径对象, 属于比os.path更高抽象级别的对象.官网from pathlib import Pathpath = Path(__file__)path.suffix    #文件后缀path.stem      #文件名不带后缀path.name      #带后缀的完整文件名path.parent    #路径的上级目录基本用法:Path.iterdir()  #遍历目录的子目录或者文件Path.is_dir()  #判断是否是目录_pathlib.path(__file__)

DS队列--组队列 (附解析)-程序员宅基地

这道题不是很难,难的是看不懂题目! (解析在下面)题目描述组队列是队列结构中一种常见的队列结构,在很多地方有着广泛应用。组队列是是指队列内的元素分组聚集在一起。组队列包含两种命令:1、ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末尾。2、 DEQUEUE,表示队列头元素出队3、 STOP,停止操作建议使用C++自带的队列对象queue,编程更方便输入第1行输入一个t(t<=10),表示1个队列中有_组队列

TCP/IP协议的了解_数据可靠传输四重连接-程序员宅基地

了解TCP/IP协议一切我们从一个经典的问题出发吧!当你在浏览器中输入 https://www.google.com/ 并且按下回车之后发生了什么?当我们在浏览器中输入 https://mp.csdn.net 并且按下回车之后你们猜会发送什么?解析 URL,DNS 查询,获得服务器 IP 地址,向目标地址发送 HTTP 请求,服务器收到,响应,返回页面,浏览器接收,渲染,bingo!你露出满意笑容,又是一个满分回答。停!还没完呢。请问这位同学,你发送的请求是怎么到达目标服_数据可靠传输四重连接

推荐文章

热门文章

相关标签