网站的自动登录是怎么做的,wordpress采集视频插件,早期网站开发用的技术,平顶山网站建设服务公司最近准备使用PythonHadoopPandas进行一些深度的分析与机器学习相关工作。(当然随着学习过程的进展#xff0c;现在准备使用PythonSparkHadoop这样一套体系来搭建后续的工作环境)#xff0c;当然这是后话。但是这项工作首要条件就是将Python与Hadoop进行打通#xff0c;本来认…最近准备使用PythonHadoopPandas进行一些深度的分析与机器学习相关工作。(当然随着学习过程的进展现在准备使用PythonSparkHadoop这样一套体系来搭建后续的工作环境)当然这是后话。但是这项工作首要条件就是将Python与Hadoop进行打通本来认为很容易的一项工作没有想到竟然遇到各种坑花费了整整半天时间。后来也在网上看到大家在咨询相同的问题但是真正解决这个问题的帖子又几乎没有所以现在将Python连接Hadoop数据库过程中遇到的各种坑进行一个汇总然后与大家进行分享以尽量避免大家花费宝贵的时间。(说明一下这篇文章中的各种坑的解决翻阅了网上无数的帖子最好一GIT上面一个帖子的角落里面带了这么一句否则很容易翻船。但是由于帖子太多所以我就不一一帖出来了)首先是选组件我选择的是使用impalaPython3.7来连接Hadoop数据库如果你不是的话就不要浪费宝贵时间继续阅读了。执行的代码如下import impala.dbapi as ipdbconn ipdb.connect(host192.168.XX.XXX,port10000,userxxx,passwordxxxxxx,databasexxx,auth_mechanismPLAIN)cursor conn.cursor()#其中xxxx是表名为了不涉及到公司的信息我把表名隐藏掉了大家自己换成自己数据库表名cursor.execute(select * From xxxx)print(cursor.description) # prints the result sets schemafor rowData in cursor.fetchall():print(rowData)conn.close()坑一提示语法错误现象/Users/wangxxin/miniconda3/bin/python3.7 /Users/wangxxin/Documents/Python/PythonDataAnalyze/project/knDt/pyHiveTest.pyTraceback (most recent call last):File /Users/wangxxin/Documents/Python/PythonDataAnalyze/project/knDt/pyHiveTest.py, line 1, in import impala.dbapi as ipdbFile /Users/wangxxin/miniconda3/lib/python3.7/site-packages/impala/dbapi.py, line 28, in import impala.hiveserver2 as hs2File /Users/wangxxin/miniconda3/lib/python3.7/site-packages/impala/hiveserver2.py, line 340asyncTrue)解决办法将参数async全部修改为“async_”(当然这个可以随便只要上下文一致并且不是关键字即可)原因在Python3.0中已经将async标为关键词如果再使用async做为参数会提示语法错误应该包括以下几个地方#hiveserver2.py文件338行左右op self.session.execute(self._last_operation_string,configuration,async_True)#hiveserver2.py文件1022行左右def execute(self, statement, configurationNone, async_False):req TExecuteStatementReq(sessionHandleself.handle,statementstatement,confOverlayconfiguration,runAsyncasync_)坑二提供的Parser.py文件有问题加载的时候会报错解决办法#根据网上的意见对原代码进行调整elif url_scheme in (c, d, e, f):with open(path) as fh:data fh.read()elif url_scheme in (http, https):data urlopen(path).read()else:raise ThriftParserError(ThriftPy does not support generating module with path in protocol \{}\.format(url_scheme))以上的坑一、坑二建议你直接修改。这两点是肯定要调整的坑三上面的两个问题处理好之后继续运行会报如下错误TProtocolException: TProtocolException(type4)解决办法原因是由于connect方法里面没有增加参数auth_mechanismPLAIN修改如下所示import impala.dbapi as ipdbconn ipdb.connect(host192.168.XX.XXX,port10000,userxxx,passwordxxxxxx,databasexxx,auth_mechanismPLAIN)坑四问题三修改好之后继续运行程序你会发现继续报错AttributeError: TSocket object has no attribute isOpen解决办法由于是thrift-sasl的版本太高了(0.3.0)故将thrift-sasl的版本降级到0.2.1pip uninstall thrift-saslpip install thrift-sasl0.2.1坑五处理完这个问题后继续运行继续报错(这个时间解决有点快崩溃的节奏了但是请坚持住其实你已经很快接近最后结果了)thriftpy.transport.TTransportException: TTransportException(type1, messageCould not start SASL: bError in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2)解决办法这个是最麻烦的也是目前最难找到解决办法的。I solved the issue, had to uninstall the package SASL and install PURE-SASL, when impyla can´t find the sasl package it works with pure-sasl and then everything goes well.主要原因其实还是因为sasl和pure-sasl有冲突这种情况下直接卸载sasl包就可能了。pip uninstall SASL坑六但是执行完成继续完成可能还是会报错TypeError: cant concat str to bytes定位到错误的最后一条在init.py第94行(标黄的部分)header struct.pack(BI, status, len(body))#按照网上的提供的办法增加对BODY的处理if (type(body) is str):body body.encode()self._trans.write(header body)self._trans.flush()经过以上步骤大家应该可以连接Hive库查询数据应该是不存在什么问题了。最后总结一下连接Hadoop数据库中各种依赖包请大家仔细核对一下依赖包(最好是依赖包相同也就是不多不少[我说的是相关的包]这样真的可以避免很多问题的出现)序号包名版本号安装命令行1pure_sasl0.5.1pip install pure_sasl0.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple2thrift0.9.3pip install thrift0.9.3 -i https://pypi.tuna.tsinghua.edu.cn/simple3bitarray0.8.3pip install bitarray0.8.3 -i https://pypi.tuna.tsinghua.edu.cn/simple4thrift_sasl0.2.1pip install thrift_sasl0.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple5thriftpy0.3.9pip install thriftpy0.3.9 -i https://pypi.tuna.tsinghua.edu.cn/simple6impyla0.14.1pip install impyla0.14.1 -i https://pypi.tuna.tsinghua.edu.cn/simple建议按顺序安装我这边之前有依赖包的问题但是最终我是通过conda进行安装的。其中在安装thriftpy、thrift_sasl、impyla报的时候报错想到自己有conda直接使用conda install会自动下载依赖的包如下所示(供没有conda环境的同学参考)packagebuildsizeply-3.11py37_080 KBconda-4.6.1py37_01.7 MBthriftpy-0.3.9py37h1de35cc_2171 KB祝您好运如果在实际过程中还是遇到各种各样的问题请你留言。最后有一点提示SQL里面不要带分号否则会报错。但是这个就不是环境问题了。报错如下impala.error.HiveServer2Error: Error while compiling statement: FAILED: ParseException line 2:83 cannot recogniz到此这篇关于Python连接Hadoop数据中遇到的各种坑(汇总)的文章就介绍到这了,更多相关Python连接Hadoop内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们本文标题: Python连接Hadoop数据中遇到的各种坑(汇总)本文地址: http://www.cppcns.com/jiaoben/python/307541.html