日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python使用pyhive库远程操作hive的配置和使用

發布時間:2023/12/31 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python使用pyhive库远程操作hive的配置和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

請先安裝好hive,林子雨老師的配置方法,該配置方法是可以配置成功的,請注意配置hive-site.xml文件的時候,里面添加的信息都是在標簽里的尾部添加

配置hive環境

到hive安裝的conf目錄下,把hive-env.sh.template復制一份并改名為hive-env.sh

cd /usr/local/hive/conf/ cp hive-env.sh.template hive-env.sh

然后配置hive-env.sh文件,進入里面會發現里面都是被注釋了的。

使用命令vim /usr/local/hive/conf/hive-env.sh進入里面配置,添加的內容如下。當然,具體路徑要看自己情況。第一個是Hadoop的安裝目錄,第二個是JDK的安裝目錄,第三個是hive的配置目錄

HADOOP_HOME=/usr/local/hadoop JAVA_HOME=/usr/lib/jvm/jdk1.8.0_261 export HIVE_CONF_DIR=/usr/local/hive/conf

然后配置hive-site.xml文件,添加的內容如下

使用命令vim /usr/local/hive/conf/hive-site.xml進入里面配置,在標簽里的尾部添加如下內容。注意:下面的zhong123456是用來登陸hive的賬號和密碼,連接時會使用到;NOSASL是登陸驗證方式,在連接的時候會使用到

<property><name>hive.server2.thrift.client.user</name><value>zhong</value><description>Username to use against thrift client</description></property><property><name>hive.server2.thrift.client.password</name><value>123456</value><description>Password to use against thrift client</description></property><property><name>hive.server2.authentication</name><value>NOSASL</value></property><property><name>hive.auto.convert.join</name><value>false</value></property>

在Hadoop的core-site.xml文件中的標簽內的尾部添加以下內容,要注意兩點,下面配置中的兩個zhong是我登陸Hadoop的用戶名,一般就是用戶名,如果你像網上那樣建議配置Hadoop,那么你可能使用的用戶名是hadoop。請替換為你的登陸名。hive.auto.convert.join為false如果沒有配置該條,遠程連接操作時可以新建數據庫和表,但是不能插入語句,具體原因在這里可以看到http://www.voidcn.com/article/p-cnbletfe-no.html

使用命令vim /usr/local/hadoop/etc/hadoop/core-site.xml打開文件。
hadoop.proxyuser.zhong.hosts 配置hadoop的代理用戶,主要是用于讓hiveserver2客戶端訪問及操作hadoop文件具備權限。另一個是組,也是同樣的原理

<property><name>hadoop.proxyuser.zhong.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.zhong.groups</name><value>*</value></property>

開啟Hadoop和hive

在Ubuntu開啟Hadoop和hive

# 到hadoop的命令目錄下運行開啟dfs的腳本,如果你已將該目錄加入到PATH路徑下,那么就可以直接start-dfs.sh,而不需要打開目錄然后運行shell腳本 cd /usr/local/hadoop/sbin ./start-dfs.sh# 到hive的命令目錄下運行hive的腳本,并在后臺運行,如果已將該目錄添加到PATH路徑下,可以不用打開目錄,并省略符號點斜桿(./) cd /usr/local/hive/bin nohup ./hive --service metastore & nohup ./hive --service hiveserver2 &

nohup命令是系統的命令,它的作用可以使用命令nohup --help查看它的使用方法(:忽略掛起信號運行指定的命令)。使用以上命令會有提示信息,只要回車就行了

使用命令jobs -l可以查看后臺運行的進程(二路,不是一),我的顯示如下

zhong@zhong-VirtualBox:/usr/local/hive/bin$ jobs -l [1]- 6076 運行中 nohup hive --service metastore & (工作目錄: /usr/local/hive/conf) [2]+ 6178 運行中 nohup hive --service hiveserver2 & (工作目錄: /usr/local/hive/conf)

如果不能正常運行上面兩個進程,就去看看報錯信息,開啟時會提示說nohup的錯誤信息會輸出到哪里(我的是輸出到用戶的家目錄下的nohup.out文件:/home/zhong/nohup.out)

此時使用jps命令可以看到如下(我配置的Hadoop是偽分布式):

12417 RunJar 12292 RunJar 10602 SecondaryNameNode 10220 NameNode 12685 Jps 10382 DataNode

注意:開啟了Hadoop和hive之后要等大概一分鐘后再使用python代碼操作hive,否則連接不上,會報錯

關閉Hadoop和hive

如果運行完畢,想關閉,可以使用以下方法:

先關閉hive的進程,以下命令是殺死進程的意思,數字是上面運行jobs -l命令后顯示的數字,具體數字要看自己的情況,有時使用jobs -l命令顯示不出后臺運行的進程,也可以使用jps命令查看在JVM中運行的進程,其中RunJar就是hive的進程

kill 6076 kill 6178

然后關閉Hadoop

# 到hadoop的命令目錄下運行關閉dfs的腳本,如果你已將該目錄加入到PATH路徑下,那么就可以直接stop-dfs.sh,而不需要打開目錄然后運行shell腳本 cd /usr/local/hadoop/sbin ./stop-dfs.sh

------------Ubuntu配置完畢------------

我操作hive的方式是,在Windows運行Python程序控制Ubuntu虛擬機的安裝的hive

在Windows安裝四個Python的庫,我安裝時sasl庫報錯了,但是能夠遠程連接,不知道為什么

pip install sasl thrift thrift-sasl PyHive

開始寫Python代碼操作hive

PyHive庫的官方API文檔:https://pypi.org/project/PyHive/

該庫的使用方法和pymysql庫類似

# 查看有哪些數據庫 from pyhive import hiveconn = hive.Connection(host='192.168.31.224', port=10000, username='zhong', auth='NOSASL') curs = conn.cursor() # 獲取一個游標 sql = 'show databases' # 操作語句 curs.execute(sql) # 執行sql語句 print(curs.fetchall()) # 輸出獲取結果的所有行

連接數據庫時,它有個默認參數database='default'用來指定連接那個數據庫,默認時default,該數據庫是安裝hive時自動創建的數據庫,若想連接某一個數據庫可以指定該參數

# 查看數據庫zhong,下面有哪些表 from pyhive import hiveconn = hive.Connection(host='192.168.31.224', port=10000, username='zhong', auth='NOSASL', database='zhong') curs = conn.cursor() # 獲取一個游標 sql = 'show tables' # 操作語句 curs.execute(sql) # 執行sql語句 print(curs.fetchall()) # 輸出獲取結果的所有行

具體的操作語句和SQL語句基本一致,就不演示了,但注意的是hive主要是用來做數據倉庫的所以支持查和增數據,默認不能使用改和刪數據。

官方也意識到了hive要訪問MySQL數據庫之后再訪問HDFS,HDFS再訪問磁盤的緩慢,所以也支持異步的方式操作hive。官方的實例如下(經過修改):

from pyhive import hive from TCLIService.ttypes import TOperationStateconn = hive.Connection(host='192.168.31.224', port=10000, username='zhong', auth='NOSASL', database='zhong') cursor = conn.cursor() # 獲取游標 sql = 'show tables' # sql語句 cursor.execute(sql, async_=True) # 聲明是異步函數status = cursor.poll().operationState # 記錄啟用循環隊列的狀態 while status in (TOperationState.INITIALIZED_STATE, TOperationState.RUNNING_STATE): # 如果時起始狀態或者正在運行狀態logs = cursor.fetch_logs() # 獲取運行過程中產生的日志信息,返回值放在列表中for message in logs: # 迭代日志信息print(message)status = cursor.poll().operationState # 再次記錄啟用循環隊列的狀態 # 獲取到結果,循環隊列結束 print(cursor.fetchall()) # 輸出查詢結果

官方并沒有詳細解釋了怎么使用異步方式操作hive,比如,沒有解釋怎么增加異步運行任務,而且使用的是最原始的循環。如果正常代碼中使用該方法進行異步操作,將沒有任何意義,還會增加工作量。還不如使用concurrent.futures對象的方法將該任務轉為異步的進程池或線程池內的子任務。

from pyhive import hive from concurrent.futures.thread import ThreadPoolExecutordef func_1():conn = hive.Connection(host='192.168.31.224', port=10000, username='zhong', auth='NOSASL', database='zhong')curs = conn.cursor() # 獲取一個游標sql = 'show tables' # 操作語句curs.execute(sql) # 執行sql語句print(curs.fetchall()) # 輸出獲取結果的所有行if __name__ == "__main__":pool = ThreadPoolExecutor(max_workers=5) # 創建線程池pool.submit(func_1) # 提交一個任務,第一個參數是普通函數的本身,后面的所有參數都是普通函數的參數

總結

以上是生活随笔為你收集整理的Python使用pyhive库远程操作hive的配置和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。