菜鸟笔记
提升您的技术认知

python连接hive总结-ag真人游戏

开篇
```
工作中需要,在本地使用python通过远程连接hive,去读取hive的一些表中大量的数据。
进行一些数据预处理,然后测试模型的精准度。
```
```
python连接hive,在刚刚接触的时候,没有经验,盲目的去翻看各种的文档去参考,一个一个的试验,一直不行。感觉很麻烦,很艰难,在初期去安装一些相关类库的时候,就会出现大量的问题。
所幸,后期在安装成功之后,有了一番总结,明白了安装的流程。
```
```
我在工作中,需要频繁的去读取hive中的数据,按月去读取。
基本上,需要每个月读取完毕之后关闭连接,从新连接,然后读取hive。
小道消息,据说使用r语言去连接hive,速度会非常的快速,具体以事实为主,没有试过。
```
python连接hive之后的经验总结
  • 相关类库的版本很重要,版本之间必须要能够做到相互匹配,兼容。
  • 类库的安装顺序也很重要
  • 相同作用的类库,只能保留一个,这个类库也要和其他的类库兼容,匹配
  • 电脑环境,需要有microsoft visual c build tools,这个,个人感觉,貌似很多库的安装都是必要的,如果没有,自己百度下载一下就可以。
python连接hive的几种方式
  • 基于pyhive连接hive。
  • 基于impyla连接hive。
基于impyla去连接hive
  • 前提条件,已经解决了microsoft visual c build tools的问题
    • 如果出现这个问题:microsoft visual c 14.0 is required,自行下载microsoft visual c 14.0就可以
    • 如果在安装类库的过程中出现了错误:cl.exe failed with exit status2,可以先百度解决下,比如配置vs的环境变量,又或者是安装lxml。但是有可能翻遍各种文档,都是无法解决的,这个时候,建议,将当前安装中报错的这个库自行在网上下载下来,然后通过pip命令,去安装本地的whl文件。
      • 下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
      • 安装命令:pip install lxml-3.7.3-cp27-cp27m-win_amd64.whl
      • 版本号自行对应
  • 安装环境
    • win10系统(win7应该也可以)
    • anaconda(直接在python中也可以)
  • 安装步骤
    • 安装 pure-sasl
      pip install pure-sasl
    • 安装 thrift_sasl
      pip install thrift_sasl==0.2.1 --no-deps
    • 安装thrift
      pip install thrift_sasl==0.2.1 --no-deps
    • 安装最终的:impyla
      pip install impyla
      pip install thriftpy
  • 测试连接
    # 导入连接工具
    from impala.dbapi import connect
    # 导入as_pandas工具,可以将获取到的数据转化为 dataframe或者 series
    from impala.util import as_pandas
    
    # 得到连接,
    conn = connect(host='***', port=10000, auth_mechanism='plain', user='***', 
    password='***',  database='***')
    # 得到句柄
    cursor = conn.cursor()
    # 执行查询
    cursor.execute('show databases')
    # 将结果放入dataframe中显示
    as_pandas(cursor)
    # 关闭连接
    cursor.close()
    conn.close()
    
    • host: 地址
    • port:端口号
    • auth_mechanism=‘plain’,一个很重要的参数,必要的
    • user:用户名
    • password:密码,可以没有
    • database:数据库名字
  • 运行过程中,可能会出现很多其他的错误(一):
    • 相关类库的作用冲突
    • 相关类库的版本冲突
    • 相关类库的安装顺序出现问题
    • 错误类型举例:
      • can’t connect to unsecured hive. sasl error: ttransportexception: could not start sasl: error in sasl_client_start (-4) sasl(-4): no mechanism available: unable to find a callback: 2
      • attributeerror: ‘tsocket’ object has no attribute ‘isopen’
      • thriftpy.transport.ttransportexception: ttransportexception(type=1, message=“could not start sasl: b’error in sasl_client_start (-4) sasl(-4): no mechanism available: unable to find a callback: 2’”)
    • 解决
      • 将所有的相关类库删除干净,按照顺序,安装对应版本的类库。最好删除干净之后,从新启动电脑之后再次安装。
  • 运行过程中,可能会出现很多其他的错误(二):
    • 参数设置错误
    • 错误举例:
      • tprotocolexception: tprotocolexception(type=4)
    • 解决
      • connect方法里面增加参数:auth_mechanism=‘plain’
  • 最终的问题,一般来说,遇到这个问题,应该已经是成功的前夕
    • 错误展现: typeerror: can’t concat str to bytes
    • 错误解决:
      • 按照错误,定位到init.py第94行,修改对于body的处理方式。
    • 解决展现:
      header = struct.pack(">bi", status, len(body))
      # 增加对于tody的类型判断,做一些处理
      if (type(body) is str):
        body = body.encode()
      self._trans.write(header   body)
      self._trans.flush()
      
    • 解决之后,需要重新启动电脑
    • 并且,复制网上文档代码到init文件的时候,有时会有格式一起复制进去的情况。
    • 本人的解决办法,通过pycharm打开,可以清晰的看到格式存在的痕迹。删除即可。
结尾
  • 总的来说,python连接hive还是方便的
  • 三个条件满足
    • 系统安装了vs,大多数类库必须的,直接百度下载就可以,甚至相信大多数人,本机就有。
    • 相关的类库之间的版本和作用不冲突,可以参考多篇文档,但是建议最终,要按照其中的一篇文档进行安装类库。
    • 参数配置正确,这个简单,百度了解所有参数的作用即可。
  • 但是,python连接hive之后,是真的很慢,尤其是hive中数据量大的情况下,要不是鼠标还能动,我都要怀疑是电脑死机了。
网站地图