当前位置: 首页 > news >正文

python通过thrift方式连接hive

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

hive安装完成后,如果只是本地使用,启用

nohup hive --service metastore &

[hadoop@master1 usr]$ hive

Logging initialized using configuration in file:/data/usr/hive/conf/hive-log4j.properties
hive> use fmcm;
OK
Time taken: 0.874 seconds

如果是要脚本调用,则需要启用HiveServer2,确保10000端口已经被监听(可在hive-site.xml中修改端口)

 nohup hive --service hiveserver2 &

[hadoop@master1 usr]$ netstat -an|grep 10000            
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN    

 

HiveServer2为客户端在远程执行hive查询提供了接口,通过Thrift RPC来实现,还提供了多用户并发和认证功能。目前python可以通过pyhs2这个模块来连接HiveServer2,实现查询和取回结果的操作。

不过pyhs2已经不在维护,追新的可以参考另外2个很好的python package(已经被证明pyhs2存在性能瓶颈,最好尽快切换到pyhive)

https://github.com/dropbox/PyHive

https://github.com/cloudera/impyla

 

安装sasl失败的话,先安装:
yum install gcc-c++ python-devel.x86_64 cyrus-sasl-devel.x86_64

pyhs2的项目托管在github之上,地址为https://github.com/BradRuderman/pyhs2或在https://pypi.python.org/pypi/pyhs2/0.2直接下载

 

如果安装不成功,可以尝试先安装以下的组件:

yum install cyrus-sasl-plain
yum install cyrus-sasl-devel

安装时如果遇到报错: 

error: sasl/sasl.h: No such file or directory 

可以尝试先安装sasl , ubantu可以用sudo apt-get install libsasl2-dev, CentOS可以使用anaconda的pip安装, 或者按照以下步骤安装:

 

curl -O -L ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-2.1.26.tar.gz
tar xzf cyrus-sasl-2.1.2.26.tar.gz
cd cyrus-sasl-2.1.26.tar.gz
./configure && make install


最后附上测试代码:
# -*- coding:utf-8 -*-
'''
采用Hive和thrift方式连接数据库
'''
import pyhs2
import sys
reload(sys)
sys.setdefaultencoding('utf8')

class HiveClient:
    def __init__(self, db_host, user, password, database, port=10000, authMechanism="PLAIN"):
      
        self.conn = pyhs2.connect(host=db_host,
                                  port=port,
                                  authMechanism=authMechanism,
                                  user=user,
                                  password=password,
                                  database=database,
                                  )

    def query(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)
            return cursor.fetch()

    def close(self):
        self.conn.close()


def main():
    """
    main process
    @rtype:
    @return:
    @note:

    """
    hive_client = HiveClient(db_host='10.24.33.3', port=10000, user='hadoop', password='hadoop',
                             database='fmcm', authMechanism='PLAIN')
    result = hive_client.query('select * from fm_news_newsaction limit 10')
    print result
    hive_client.close()


if __name__ == '__main__':
    main()

 

转载于:https://my.oschina.net/aibati2008/blog/668148

相关文章:

  • mysql用户管理
  • 百度搜索引擎中的快照及快照更新机制
  • 灵活的使用画图工具
  • cssViewer牛逼的chrome插件
  • 从两地三中心到双活数据中心
  • Docker 快速入门教程
  • [Flexbox] Using order to rearrange flexbox children
  • perl5 第十三章 Perl的面向对象编程
  • Asp.net gzip压缩的启用
  • 虚拟化平台cloudstack(8)——从UI开始
  • ​linux启动进程的方式
  • 数据绑定控件单选框
  • css3 翻转和旋转的区别
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 查找并修复Android中的内存泄露—OutOfMemoryError
  • SegmentFault for Android 3.0 发布
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • CentOS7简单部署NFS
  • JavaScript学习总结——原型
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • js作用域和this的理解
  • k个最大的数及变种小结
  • Redis中的lru算法实现
  • TypeScript迭代器
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • webpack入门学习手记(二)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 通过几道题目学习二叉搜索树
  • 为什么要用IPython/Jupyter?
  • 详解移动APP与web APP的区别
  • 学习使用ExpressJS 4.0中的新Router
  • 自动记录MySQL慢查询快照脚本
  • 2017年360最后一道编程题
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ###项目技术发展史
  • #WEB前端(HTML属性)
  • (06)Hive——正则表达式
  • (3)STL算法之搜索
  • (6)添加vue-cookie
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)Windows2003安全设置/维护
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .gitignore文件设置了忽略但不生效
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net与java建立WebService再互相调用
  • @31省区市高考时间表来了,祝考试成功
  • @font-face 用字体画图标
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @WebServiceClient注解,wsdlLocation 可配置