这篇文章主要讲解了解决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数据中遇到的问题