python替代hadoop_Python連接Hadoop數據中遇到的各種坑(匯總)

最近準備使用Python+Hadoop+Pandas進行一些深度的分析與機器學習相關工作。(當然隨著學習過程的進展,現在準備使用Python+Spark+Hadoop這樣一套體系來搭建后續的工作環境),當然這是后話。

但是這項工作首要條件就是將Python與Hadoop進行打通,本來認為很容易的一項工作,沒有想到竟然遇到各種坑,花費了整整半天時間。后來也在網上看到大家在咨詢相同的問題,但是真正解決這個問題的帖子又幾乎沒有,所以現在將Python連接Hadoop數據庫過程中遇到的各種坑進行一個匯總,然后與大家進行分享,以盡量避免大家花費寶貴的時間。

(說明一下:這篇文章中的各種坑的解決,翻閱了網上無數的帖子,最好一GIT上面一個帖子的角落里面帶了這么一句,否則很容易翻船。但是由于帖子太多,所以我就不一一帖出來了)

首先是選組件,我選擇的是使用:impala+Python3.7來連接Hadoop數據庫,如果你不是的話,就不要浪費寶貴時間繼續閱讀了。

執行的代碼如下:

import impala.dbapi as ipdb

conn = ipdb.connect(host="192.168.XX.XXX",port=10000,user="xxx",password="xxxxxx",database="xxx",auth_mechanism='PLAIN')

cursor = conn.cursor()

#其中xxxx是表名,為了不涉及到公司的信息,我把表名隱藏掉了,大家自己換成自己數據庫表名

cursor.execute('select * From xxxx')

print(cursor.description) # prints the result set's schema

for rowData in cursor.fetchall():

print(rowData)

conn.close()

坑一:提示語法錯誤

現象:

/Users/wangxxin/miniconda3/bin/python3.7 /Users/wangxxin/Documents/Python/PythonDataAnalyze/project/knDt/pyHiveTest.py

Traceback (most recent call last):

File "/Users/wangxxin/Documents/Python/PythonDataAnalyze/project/knDt/pyHiveTest.py", line 1, in

import impala.dbapi as ipdb

File "/Users/wangxxin/miniconda3/lib/python3.7/site-packages/impala/dbapi.py", line 28, in

import impala.hiveserver2 as hs2

File "/Users/wangxxin/miniconda3/lib/python3.7/site-packages/impala/hiveserver2.py", line 340

async=True)

解決辦法:將參數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, configuration=None, async_=False):

req = TExecuteStatementReq(sessionHandle=self.handle,

statement=statement,

confOverlay=configuration,

runAsync=async_)

坑二:提供的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(type=4)

解決辦法:

原因是由于connect方法里面沒有增加參數:auth_mechanism='PLAIN,修改如下所示:

import impala.dbapi as ipdb

conn = ipdb.connect(host="192.168.XX.XXX",port=10000,user="xxx",password="xxxxxx",database="xxx",auth_mechanism='PLAIN')`

坑四:問題三修改好之后,繼續運行程序,你會發現繼續報錯:

AttributeError: 'TSocket' object has no attribute 'isOpen'

解決辦法:

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

pip uninstall thrift-sasl

pip install thrift-sasl==0.2.1

坑五:處理完這個問題后,繼續運行,繼續報錯(這個時間解決有點快崩潰的節奏了,但是請堅持住,其實你已經很快接近最后結果了):

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'")

解決辦法:這個是最麻煩的,也是目前最難找到解決辦法的。

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: can't 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數據庫中各種依賴包,請大家仔細核對一下依賴包(最好是依賴包相同,也就是不多不少[我說的是相關的包],這樣真的可以避免很多問題的出現)

序號

包名

版本號

安裝命令行

1

pure_sasl

0.5.1

pip install pure_sasl==0.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

2

thrift

0.9.3

pip install thrift==0.9.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

3

bitarray

0.8.3

pip install bitarray==0.8.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

4

thrift_sasl

0.2.1

pip install thrift_sasl==0.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

5

thriftpy

0.3.9

pip install thriftpy==0.3.9 -i https://pypi.tuna.tsinghua.edu.cn/simple

6

impyla

0.14.1

pip install impyla==0.14.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

建議按順序安裝,我這邊之前有依賴包的問題,但是最終我是通過conda進行安裝的。

其中在安裝thriftpy、thrift_sasl、impyla報的時候報錯,想到自己有conda,直接使用conda install,會自動下載依賴的包,如下所示(供沒有conda環境的同學參考)

package

build

size

ply-3.11

py37_0

80 KB

conda-4.6.1

py37_0

1.7 MB

thriftpy-0.3.9

py37h1de35cc_2

171 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532020.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532020.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532020.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 自動化測試_java寫一個自動化測試

你模仿購物車試一下,同樣是買東西,加上勝負平的賠率,輸出改下應該就可以了package com.homework.lhh;import java.util.ArrayList;import java.util.Comparator;import java.util.Scanner;public class Ex04 {public static void main(String…

超大規模集成電路_納米級超大規模集成電路芯片低功耗物理設計分析(二)

文 | 大順簡要介紹了功耗的組成,在此基礎上從工藝、電路、門、系統四個層面探討了納米級超大規模集成電路的低功耗物理設計方法。關鍵詞:納米級;超大規模集成電路;電路芯片;電路設計02納米級超大規模集成電路芯片低功耗…

java中的printnb_javaI/O系統筆記

1、File類File類的名字有一定的誤導性;我們可能認為它指代的是文件,實際上卻并非如此。它既能代表一個特定文件的名稱,又能代表一個目錄下的一組文件的名稱。1.1、目錄列表器如果需要查看目錄列表,可以通過file.list(FilenameFilt…

outlook反應慢的原因_保險管怎么區分慢熔和快熔?

保險絲快熔與慢熔的區別所有雙帽;對于這樣的產品特性和安全性熔絲; gG的”,即,與接觸帽組合接觸;即,所述雙(內/外蓋)的蓋。和一般的小型或地下加工廠,以便執行切割角,降低生產成本,這將選擇單個帽鉚接“單&…

java成員內部類_Java中的內部類(二)成員內部類

Java中的成員內部類(實例內部類):相當于類中的一個成員變量,下面通過一個例子來觀察成員內部類的特點public classOuter {//定義一個實例變量和一個靜態變量private inta;private static intb;//定義一個靜態方法和一個非靜態方法public static voidsay(…

word 通配符_學會Word通配符,可以幫助我們批量處理好多事情

長文檔需要批量修改或刪除某些內容的時候,我們可以利用Word中的通配符來搞定這一切,當然,前提是你必須會使用它。通配符的功能非常強大,能夠隨意組合替換或刪除我們定義的規則內容,下面易老師就分享一些關于查找替換通…

java存儲鍵值結構_java-鍵值存儲為主數據庫

我將要開始一個項目,該項目的讀寫操作非常頻繁且頻繁.因此,環顧四周,我發現內存數據庫正是為此目的而創建的.經過更多調查后,我進入了redis.Redis看起來很酷(雖然剛開始閱讀,但是對此有很多了解).但是我主要只看過關系數據庫,并且以元組和關系的方式來考慮數據(我認為我可以隨著…

python 輸入文件名查找_python 查找文件名包含指定字符串的方法

編寫一個程序,能在當前目錄以及當前目錄的所有子目錄下查找文件名包含指定字符串的文件,并打印出絕對路徑。import osclass searchfile(object):def __init__(self,path.):self._pathpathself.abspathos.path.abspath(self._path) # 默認當前目錄def fin…

java 運行 出現選擇_Eclipse?運行出現java.lang.NoClassDefFoundError的解決方法

上篇博文也提到了這個問題,但沒有深入的講解。這次特意做了整理,詳細解釋其原因。先看錯誤java.lang.NoClassDefFoundError,顯然是java虛擬機找不到指定的類,多數情況下是外部jar中的類。Eclipse的自動化,集成化&#…

設置熄屏_剛買的手機微信收不到信息提醒耽誤事情,手機到手一定要這樣設置...

手機使用過程中經常會遇到第三方軟件接收不到信息提醒的狀況,常常因此耽誤了很多重要的事情,造成損失。特別是剛換新手機或者手機剛升級系統時發生的最多。一般都覺得是手機問題,其實只是手機的系統設置出現了問題,只要跟我按照以…

java判斷對稱素數_SM2非對稱算法的原理及實現 Java SM2的代碼案例 | 一生孤注擲溫柔 | 小奮斗...

SM2橢圓曲線公鑰密碼算法:我國自主知識產權的商用密碼算法,是ECC(Elliptic Curve Cryptosystem)算法的一種,基于橢圓曲線離散對數問題,計算復雜度是指數級,求解難度較大,同等安全程度要求下,橢圓…

multipartfile 獲取音頻時長_抖音音頻下載捷徑:一鍵提取音頻,安卓+ios全通用,完全免費...

本文相關:抖音音頻提取、抖音音頻快捷指令、捷徑怎么獲取抖音音樂…昨天有抖友分享了一個抖音短視頻鏈接,告訴我,她很喜歡這個視頻里的歌曲,但是在很多歌曲app上面卻找不到相同的版本,然后就問我,有沒有什么…

python可以做特效嗎_學習mel語言,Python,JavaScript到什么程度才能做一下大型特效,要自已開發插件腳本呢?...

感謝邀請。首先自己要在某一方面要擅長,認準一個定位。比如android是鑰匙做前端應用軟件的,python可以做爬蟲及其人工智能,js做全段網頁,java主要是做后端的1、我們程序員對于開發軟件來說,無論你選擇的是那種語言&…

POJ2513-Colored Sticks

/*思路:類似圖論中“一筆畫”問題,兩根木棒的相連接的端點是一樣的顏色,(a,b)--(b,c)--(c, d)....方法:trie樹并查集, 利用trie樹建立字符串和某一個節點的映射,并將這些和字符串構成…

php windows共享內存,給PHP開啟shmop擴展實現共享內存

這篇文章主要介紹了關于給PHP開啟shmop擴展實現共享內存,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下在項目開發中,想要實現PHP多個進程之間共享數據的功能,讓客戶端連接能夠共享一個狀態&#xff0c…

導入ansys的實體怎么進行parameter_ANSYS在線纜線束設計中的仿真應用

ANSYS采用ANSYS Maxwell、Q3D、Twin Builder等電磁仿真軟件,從線纜線束設計、寄生參數RLCG提取、到系統電磁兼容提供了全面仿真分析。創建模型ANSYS在Maxwell軟件基礎上提出針對用戶定制化的“線纜線束設計工具包”,幫助客戶參數化建立特定幾何模型&…

怎么做95置信區間圖_這種動態的OD圖怎么做?簡單3步快速搞定

之前在視頻號中發過一個單車的出行數據可視化效果。動態展示了某天單車不同時段的運行情況,這種動態的OD可視化效果是如何制作的呢?使用的是kepler.gl進行制作的,其實非常簡單,3步即可快速搞定。一、數據軟件準備1、軟件制作這種動…

php抖音跳轉地址,PHP如何實現解析抖音無水印視頻

問題來源很多時候你在douyin里看到了一個短視頻,想復制下來自己編輯文字來發布,可是視頻里的水印卻是原者的。這個時候你想把水印去掉,你要如何做呢?這里提供PHP實現去除水印的主要方法,其實很簡單。使用方法&#xff…

php 分割二維數組,拆分二維數組 php

把以下數組拆分:{"errcode": 0,"msg": "成功","data": {"list": [{"ticket_no": "1","options": ["周四301","周四302","周四303"],"play_ty…

Dijkstra算法優先隊列實現與Bellman_Ford隊列實現的理解

1 /*2 Dijkstra算法用優先隊列來實現,實現了每一條邊最多遍歷一次。 要知道,我們從隊列頭部找到的都是到3 已經"建好樹"的最短距離以及該節點編號, 并由該節點去更新 樹根 到其他點(被更新的節點可以在隊列中4 ,也可以是…