【原创】用python连接thrift Server 去执行sql的问题总汇
场景:python和现有产品的结合和应用——python的前瞻性调研
环境:centos7
0、首先确保安装了python和pyhive,下面是连接代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*- import sys from pyhive import hive
from TCLIService.ttypes import TOperationState def pyhiveexesql(sql):
cursor = None
try:
cursor = hive.connect(host='10.19.12.20', port=10015, username='xxx').cursor()
cursor.execute(sql, async=True) status = cursor.poll().operationState
while status in (TOperationState.INITIALIZED_STATE, TOperationState.RUNNING_STATE):
logs = cursor.fetch_logs()
for message in logs:
print message
# If needed, an asynchronous query can be cancelled at any time with:
# cursor.cancel()
status = cursor.poll().operationState
print cursor.fetchall()
except Exception, e:
print '%s' % (e.message)
finally:
cursor.close() if __name__ == '__main__':
pyhiveexesql('SELECT * FROM my_awesome_data LIMIT 10')
问题一:ImportError: No module named sasl
解决:找不到saal就装嘛,执行:sudo pip install sasl,于是爆出第二个问题
问题二:Error:command 'gcc' failed with exit status 1
解决:网上说安装sasl之前有一些前置支撑包,好吧有安装了一些,但还是无动于衷,于是疯狂找了一天终于找到了解决方案:
执行:sudo yum install libffi-devel;sudo yum install libgsasl-devel;sudo yum install libmemcached-devel;
好吧,问题一解决了,但是又爆出问题三:
问题三:ImportError: No module named thrift_sasl
解决方案:sudo yum -y install easy_install; sudo easy_install thrift; sudo pip install thrift_sasl;
好吧问题二和问题三解决了,但是又爆出问题四:
问题四:pyhive.exc.OperationalError: TFetchResultsResp(status=TStatus(errorCode=0, errorMessage=u'Expected state FINISHED, but found ERROR'
具体问题:
[hfb@192 ~]$ python Desktop/pyhive4.py
Traceback (most recent call last):
File "Desktop/pyhive4.py", line 31, in <module>
print cursor.fetchall()
File "/usr/lib/python2.7/site-packages/pyhive/common.py", line 145, in fetchall
one = self.fetchone()
File "/usr/lib/python2.7/site-packages/pyhive/common.py", line 105, in fetchone
self._fetch_while(lambda: not self._data and self._state != self._STATE_FINISHED)
File "/usr/lib/python2.7/site-packages/pyhive/common.py", line 45, in _fetch_while
self._fetch_more()
File "/usr/lib/python2.7/site-packages/pyhive/hive.py", line 318, in _fetch_more
_check_status(response)
File "/usr/lib/python2.7/site-packages/pyhive/hive.py", line 421, in _check_status
raise OperationalError(response)
pyhive.exc.OperationalError: TFetchResultsResp(status=TStatus(errorCode=0, errorMessage=u'Expected state FINISHED, but found ERROR', sqlState=None, infoMessages=[u'*org.apache.hive.service.cli.HiveSQLException:Expected state FINISHED, but found ERROR:15:14', u'org.apache.hive.service.cli.operation.Operation:assertState:Operation.java:161', u'org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation:getNextRowSet:SparkExecuteStatementOperation.scala:107', u'org.apache.hive.service.cli.operation.OperationManager:getOperationNextRowSet:OperationManager.java:220', u'org.apache.hive.service.cli.session.HiveSessionImpl:fetchResults:HiveSessionImpl.java:685', u'org.apache.hive.service.cli.CLIService:fetchResults:CLIService.java:454', u'org.apache.hive.service.cli.thrift.ThriftCLIService:FetchResults:ThriftCLIService.java:672', u'org.apache.hive.service.cli.thrift.TCLIService$Processor$FetchResults:getResult:TCLIService.java:1553', u'org.apache.hive.service.cli.thrift.TCLIService$Processor$FetchResults:getResult:TCLIService.java:1538', u'org.apache.thrift.ProcessFunction:process:ProcessFunction.java:39', u'org.apache.thrift.TBaseProcessor:process:TBaseProcessor.java:39', u'org.apache.hive.service.auth.TSetIpAddressProcessor:process:TSetIpAddressProcessor.java:56', u'org.apache.thrift.server.TThreadPoolServer$WorkerProcess:run:TThreadPoolServer.java:285', u'java.util.concurrent.ThreadPoolExecutor:runWorker:ThreadPoolExecutor.java:1149', u'java.util.concurrent.ThreadPoolExecutor$Worker:run:ThreadPoolExecutor.java:624', u'java.lang.Thread:run:Thread.java:748'], statusCode=3), results=None, hasMoreRows=None)
解决方案:表不存在,哈哈,这个错误信息不明显啊
完。。。
【原创】用python连接thrift Server 去执行sql的问题总汇的更多相关文章
- python连接impala时,执行SQL报错expecting list of size 2 for struct args
这个错误困扰了好久,因为集群有多台,暂放到其他几台机器上执行了SQL操作,一直在找解决方法,无意间得到真传,喜出望外啊 报错信息: Traceback (most recent call last): ...
- SQL Server直接执行.sql文件
SQL Server直接执行.sql文件 客户的数据库数据被篡改,利用Log Explorer工具根据日志生成的回滚脚本有200多M,不可能一下子扔到查询分析器里去执行,于是想是否SQL Ser ...
- Python连接MongoDB数据库并执行操作
原文:https://blog.51cto.com/1767340368/2092813 环境设置: [root@mongodb ~]# cat /etc/redhat-release CentOS ...
- Python实现Thrift Server
近期在项目中存在跨编程语言协作的需求,使用到了Thrift.本文将记录用python实现Thrift服务端的方法. 环境准备 根据自身实际情况下载对应的Thrift编译器,比如我在Windows系统上 ...
- [Pyhton]连接MSSQL实例并执行SQL语句
运行环境: 服务器端: MSSQL 2014 Server 2012 R2 程序端: Python 3.7.4 MacOS 10.14.6 CentOS Linux release 7.7.1908 ...
- 如何用VS EF连接 Mysql,以及执行SQL语句 和存储过程?
VS2013, MySQL5.7.18 , MySQL5.7.14 执行SQL语句: ztp_user z = new ztp_user(); object[] obj = new object[] ...
- SQL Server 定时执行SQL语句的方法
SQL SERVER 定时任务,你可以启动一下.不过要想更加直观的控制,直接写一个程序,定时执行你的存储过程. 1.设置“SQL Server 代理”(SQL Server Agent)服务随系统启动 ...
- SQL Server中执行Sql字符串,返回执行结果
今天遇到一个问题:想把sql字符串在SQL Server 中执行了,并获取执行的结果 ); SET @tablename='select @table3 = count(1) from UserVis ...
- ABP中连接已有数据库执行Sql或存储过程
一:在EntityFramework项目中创建类如:ZSWDbContext. public class ZSWDbContext : AbpDbContext { public ZSWDbConte ...
随机推荐
- 新建promise
callback(){ const promise =new Promise((resolve,rejest)=>{ console.log('2') 代码 resolve('true') }) ...
- PHP——秒数转换为时分秒
前言 通讯记录需要用到的一个方法,就是将秒转为时分秒 方法 PHP有内置的方法,直接用即可,不过这个只是24小时以内.对于通讯录来说是够用了~ 示例 $v = 30; gmdate('H:i:s', ...
- EOF输入
EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取.资料源通常称为档案或串流.通常在文本的最后存在此字符表示资料结束.是int类型的宏定义,它扩展为负整数 ...
- 仿照selalchemy实现简单的mongo查询
首先这是一个很奇葩的需求,时间紧迫顺手胡写了一个,以后看看有没有好的思路 def and_(item_list): return "%s:[%s]" % ("$and&q ...
- Nginx与前端开发
Nginx与Node.js "Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡." 作为前 ...
- Jmeter工具进行一个完整的接口测试
Jmeter工具进行一个完整的接口测试 1.创建一个线程组 通俗的讲一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户. 2.输入线程组名字 3.添加一个cookie ...
- C++常见问题解答博客合集
1 关于宏 https://blog.csdn.net/hanchaoman/article/details/8809951
- pyenv安装及常用命令
1.pyenv安装 #下载安装脚本curl https://pyenv.run | bash #添加环境变量 echo 'export PATH="/root/.pyenv/bin:$PAT ...
- js较深入的知识点
浏览器渲染过程是怎样的?重绘重排是什么?如何避免过多的重绘重排? 将html解析为dom树; 将css解析为cssom; 结合DOM树和CSSOM树,生成一棵渲染树(Render Tree); 生成布 ...
- “短路求值(Short-Circuit Evaluation)
// 逻辑与和逻辑或操作符总是先计算其做操作数,只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数. function aa() { if (null) { console ...