解决Python连接Hadoop数据中遇到的问题

  介绍

这篇文章主要讲解了解决Python连接Hadoop数据中遇到的问题,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

最近准备使用Python + Hadoop +熊猫进行一些深度的分析与机器学习相关工作。(当然随着学习过程的进展,现在准备使用Python +火花+ Hadoop这样一套体系来搭建后续的工作环境),当然这是后话。
但是这项工作首要条件就是将Python与Hadoop进行打通,本来认为很容易的一项工作,没有想到竟然遇到各种坑,花费了整整半天时间。后来也在网上看到大家在咨询相同的问题,但是真正解决这个问题的帖子又几乎没有,所以现在将Python连接Hadoop数据库过程中遇到的各种坑进行一个汇总,然后与大家进行分享,以尽量避免大家花费宝贵的时间。

(说明一下:这篇文章中的各种坑的解决,翻阅了网上无数的帖子,最好一GIT上面一个帖子的角落里面带了这么一句,否则很容易翻船。但是由于帖子太多,所以我就不一一帖出来了)

首先是选组件,我选择的是使用:黑斑羚+ Python3.7来连接Hadoop数据库,如果你不是的话,就不要浪费宝贵时间继续阅读了。

执行的代码如下:

进口黑斑羚。dbapi作为ipdb
  康涅狄格州=ipdb.connect(主机=?92.168.XX.XXX"、港口=10000,用户=皒xx",密码=皒xxxxx",数据库=皒xx", auth_mechanism=& # 39;平原# 39;)
  光标=conn.cursor ()
  #其中xxxx是表名,为了不涉及到公司的信息,我把表名隐藏掉了,大家自己换成自己数据库表名
  cursor.execute(& # 39;从xxxx # 39;选择*)
  打印(cursor.description) #输出结果集# 39;s模式
  构成了rowData在cursor.fetchall为():
  构成了rowData)打印(
  conn.close () 


现象:

/用户/wangxxin/miniconda3/bin/python3.7/用户/wangxxin/文件/Python/PythonDataAnalyze/项目/knDt/pyHiveTest。py
回溯(最近的电话最后):
,文件“/用户/wangxxin/文件/Python/PythonDataAnalyze/项目/knDt/pyHiveTest.py", 1号线,在& lt; module>
,,,进口黑斑羚。dbapi作为ipdb
,文件“/用户/wangxxin/miniconda3/lib/python3.7/网站/黑斑羚/dbapi.py",行28日& lt; module>
,,,进口黑斑羚。像那么hs2 hiveserver2
,文件“/用户/wangxxin/miniconda3/lib/python3.7/网站/黑斑羚/hiveserver2.py",第340行
,,,异步=True)

解决办法:将参数异步全部修改为“async_”(当然这个可以随便,只要上下文一致,并且不是关键字即可),原因:在Python3.0中,已经将异步标为关键词,如果再使用异步做为参数,会提示语法错误;应该包括以下几个地方:

# hiveserver2.py文件338行左右   op=self.session.execute (self._last_operation_string,   配置,   async_=True)   # hiveserver2.py文件1022行左右   def执行(自我、声明、配置=None, async_=False):   要求=TExecuteStatementReq (sessionHandle=self.handle,=声明的声明中,   confOverlay=配置,   runAsync=async_)


解决办法:

#根据网上的意见对原代码进行调整   elif url_scheme (& # 39; c # 39; & # 39; d # 39;, & # 39; e # 39;, & # 39; f # 39;):   跳频与开放(路径):   data=https://www.yisu.com/zixun/fh.read ()   elif url_scheme (http, https):   data=urlopen(路径).read ()   其他:   提高ThriftParserError (ThriftPy不支持生成模块的   ”在协议/路径“{}/?format (   url_scheme)

以上的坑,一坑二建议你直接修改。这两点是肯定要调整的;

TProtocolException: TProtocolException (type=4)

解决办法:

原因是由于连接方法里面没有增加参数:auth_mechanism=& # 39;平原,修改如下所示:

进口黑斑羚。dbapi作为ipdb
  康涅狄格州=ipdb.connect(主机=?92.168.XX.XXX"、港口=10000,用户=皒xx",密码=皒xxxxx",数据库=皒xx", auth_mechanism=& # 39;平原# 39;)”

AttributeError: & # 39; TSocket& # 39;对象没有属性& # 39;isOpen& # 39;

解决办法:

由于是thrift-sasl的版本太高了(0.3.0),故将thrift-sasl的版本降级到0.2.1

 pip卸载thrift-sasl
  pip安装thrift-sasl==0.2.1 

thriftpy.transport。TTransportException: TTransportException(类型=1,消息=安豢赡芸糞ASL: b # 39;错误sasl_client_start (4) SASL(4):没有可用的机制:无法找到一个回调:2 & # 39;“)

解决办法:这个是最麻烦的,也是目前最难找到解决办法的。

解决Python连接Hadoop数据中遇到的问题