python連接hive資料庫
① jupyter如何鏈接hive
from impala.dbapi import connect提示找不到模塊
安裝包的時候參考Win7平台python3使用impyla連接Hive遇到的坑,特別要注意安裝包的順序和對應的版本。
② python連接hive,怎麼安裝thrifthive
HiveServer2的啟動
啟動HiveServer2
HiveServer2的啟動十分簡便:
$ $HIVE_HOME/bin/hiveserver2
或者
$ $HIVE_HOME/bin/hive --service hiveserver2
默認情況下,HiverServer2的Thrift監聽埠是10000,其WEB UI埠是10002。可通過http://localhost:10002來查看HiveServer2的Web UI界面,這里顯示了Hive的一些基本信息。如果Web界面不能查看,則說明HiveServer2沒有成功運行。
使用beeline測試客戶端連接
HiveServer2成功運行後,我們可以使用Hive提供的客戶端工具beeline連接HiveServer2。
$ $HIVE_HOME/bin/beeline
beeline > !connect jdbc:hive2://localhost:10000
如果成功登錄將出現如下的命令提示符,此時可以編寫HQL語句。
0: jdbc:hive2://localhost:10000>
報錯:User: xxx is not allowed to impersonate anonymous
在beeline使用!connect連接HiveServer2時可能會出現如下錯誤信息:
Caused by: org.apache.hadoop.ipc.RemoteException:
User: xxx is not allowed to impersonate anonymous
這里的xxx是我的操作系統用戶名稱。這個問題的解決方法是在hadoop的core-size.xml文件中添加xxx用戶代理配置:
<property> <name>hadoop.proxyuser.xxx.groups</name> <value>*</value></property><property> <name>hadoop.proxyuser.xxx.hosts</name> <value>*</value></property>
重啟HDFS後,再用beeline連接HiveServer2即可成功連接。
常用配置
HiveServer2的配置可以參考官方文檔《Setting Up HiveServer2》
這里列舉一些hive-site.xml的常用配置:
hive.server2.thrift.port:監聽的TCP埠號。默認為10000。
hive.server2.thrift.bind.host:TCP介面的綁定主機。
hive.server2.authentication:身份驗證方式。默認為NONE(使用 plain SASL),即不進行驗證檢查。可選項還有NOSASL, KERBEROS, LDAP, PAM and CUSTOM.
hive.server2.enable.doAs:是否以模擬身份執行查詢處理。默認為true。
Python客戶端連接HiveServer2
python中用於連接HiveServer2的客戶端有3個:pyhs2,pyhive,impyla。官網的示例採用的是pyhs2,但pyhs2的官網已聲明不再提供支持,建議使用impyla和pyhive。我們這里使用的是impyla。
impyla的安裝
impyla必須的依賴包括:
six
bit_array
thriftpy(python2.x則是thrift)
sasl
thrift_sasl
- from impala.dbapi import connect
- conn = connect(host='127.0.0.1', port=10000, database='default', auth_mechanism='PLAIN')
- cur = conn.cursor()
- cur.execute('SHOW DATABASES')print(cur.fetchall())
- cur.execute('SHOW Tables')print(cur.fetchall())
為了支持Hive還需要以下兩個包:
可在Python PI中下載impyla及其依賴包的源碼。
impyla示例
以下是使用impyla連接HiveServer2的示例:
③ python連接hive的時候必須要依賴sasl類庫嗎
客戶端連接Hive需要使用HiveServer2。HiveServer2是HiveServer的重寫版本,HiveServer不支持多個客戶端的並發請求。當前HiveServer2是基於Thrift RPC實現的。它被設計用於為像JDBC、ODBC這樣的開發API客戶端提供更好的支持。Hive 0.11版本引入的HiveServer2。
HiveServer2的啟動
啟動HiveServer2
HiveServer2的啟動十分簡便:
$ $HIVE_HOME/bin/hiveserver2
或者
$ $HIVE_HOME/bin/hive --service hiveserver2
默認情況下,HiverServer2的Thrift監聽埠是10000,其WEB UI埠是10002。可通過來查看HiveServer2的Web UI界面,這里顯示了Hive的一些基本信息。如果Web界面不能查看,則說明HiveServer2沒有成功運行。
使用beeline測試客戶端連接
HiveServer2成功運行後,我們可以使用Hive提供的客戶端工具beeline連接HiveServer2。
$ $HIVE_HOME/bin/beeline
beeline > !connect jdbc:hive2://localhost:10000
如果成功登錄將出現如下的命令提示符,此時可以編寫HQL語句。
0: jdbc:hive2://localhost:10000>
報錯:User: xxx is not allowed to impersonate anonymous
在beeline使用!connect連接HiveServer2時可能會出現如下錯誤信息:
12Caused by: org.apache.hadoop.ipc.RemoteException:User: xxx is not allowed to impersonate anonymous這里的xxx是我的操作系統用戶名稱。這個問題的解決方法是在hadoop的core-size.xml文件中添加xxx用戶代理配置:
123456789<spanclass="hljs-tag"><<spanclass="hljs-title">property><spanclass="hljs-tag"><<spanclass="hljs-title">name>hadoop.proxyuser.xxx.groups<spanclass="hljs-tag"></<spanclass="hljs-title">name><spanclass="hljs-tag"><<spanclass="hljs-title">value>*<spanclass="hljs-tag"></<spanclass="hljs-title">value><spanclass="hljs-tag"></<spanclass="hljs-title">property><spanclass="hljs-tag"><<spanclass="hljs-title">property><spanclass="hljs-tag"><<spanclass="hljs-title">name>hadoop.proxyuser.xxx.hosts<spanclass="hljs-tag"></<spanclass="hljs-title">name><spanclass="hljs-tag"><<spanclass="hljs-title">value>*<spanclass="hljs-tag"></<spanclass="hljs-title">value><spanclass="hljs-tag"></<spanclass="hljs-title">property></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>重啟HDFS後,再用beeline連接HiveServer2即可成功連接。
常用配置
HiveServer2的配置可以參考官方文檔《Setting Up HiveServer2》
這里列舉一些hive-site.xml的常用配置:
hive.server2.thrift.port:監聽的TCP埠號。默認為10000。
hive.server2.thrift.bind.host:TCP介面的綁定主機。
hive.server2.authentication:身份驗證方式。默認為NONE(使用 plain SASL),即不進行驗證檢查。可選項還有NOSASL, KERBEROS, LDAP, PAM and CUSTOM.
hive.server2.enable.doAs:是否以模擬身份執行查詢處理。默認為true。
Python客戶端連接HiveServer2
python中用於連接HiveServer2的客戶端有3個:pyhs2,pyhive,impyla。官網的示例採用的是pyhs2,但pyhs2的官網已聲明不再提供支持,建議使用impyla和pyhive。我們這里使用的是impyla。
impyla的安裝
impyla必須的依賴包括:
six
bit_array
thriftpy(python2.x則是thrift)
sasl
thrift_sasl
- fromimpala.dbapi import<span class="hljs-keyword">connectconn =<span class="hljs-keyword">connect(host=<span class="hljs-string">'127.0.0.1', port=<span class="hljs-number">10000, database=<span class="hljs-string">'default', auth_mechanism=<span class="hljs-string">'PLAIN')cur =conn.cursor()cur.execute(<span class="hljs-string">'SHOW DATABASES')<span class="hljs-keyword">print(cur.fetchall())cur.execute(<span class="hljs-string">'SHOW Tables')<span class="hljs-keyword">print(cur.fetchall())</span></span></span></span></span></span></span></span></span></span>
為了支持Hive還需要以下兩個包:
可在Python PI中下載impyla及其依賴包的源碼。
impyla示例
以下是使用impyla連接HiveServer2的示例:
1234567891011④ Python 連接hive(Linux)
之所以選擇基於Linux系統用Python連接hive,是因為在window下會出現Hadoop認證失敗的問題。會出現執行python腳本的機器無目標hive的kerberos認證信息類似錯誤,也會出現sasl調用問題:
該錯誤我嘗試多次,未能解決(有知道window下解決方案的歡迎留言),所以建議使用Linux系統。
VMware Workstation +Ubuntu
網上教程很多,本文推薦一個教程: https://blog.csdn.net/stpeace/article/details/78598333
主要是以下四個包:
在安裝包sasl的過程會出現麻煩,主要是Ubuntu中缺乏sasl.h的問題,這里可以通過下面語句解決
這和centos有一些區別。
本文是基於本機虛擬機用Python連接的公司測試環境的hive(生產環境和測試環境是有隔離的,生產環境需要堡壘機才能連接)
因缺乏工程和計算機基礎的知識,對很多的地方都了解的不夠深入,歡迎大神指點,最後向以下兩位大佬的帖子致謝:
[1] https://www.hu.com/question/269333988/answer/581126392
[2] https://mp.weixin.qq.com/s/cdFxkphMtJASQ7-nKt13mg
⑤ python連接Mysql資料庫問題 cursor( ) 、execute()和fetchall( )方法的作用
cucursor()方法的作用?獲取操作游標
- execute方法的作用?執行SQL,括弧里的是sql語句
- fetchall()方法滴作用?返回查詢到的所有記錄
⑥ hive 調用python 寫的udf 報錯
我也遇到這個問題了,是python腳本的問題,不管hive表的分隔符是什麼,在python腳本裡面的分隔符都是'\t',換成'\t'試一試。
⑦ hive中如何調用python函數
ADD FILE /home/taobao/dw_hive/hivelets/smoking/ext/tsa/hivesql/bjx_topic_t1/splitsysin.py.bak;
create table if not exists splittest_t1
(
topic_id string,
topic_title string,
topic_desc string,
biz_date string,
gmt_create string
) PARTITIONED BY(pt string)
row format delimited fields terminated by '\001'
lines terminated by '\n'
STORED AS textfile;
select TRANSFORM(topic_id,topic_title,topic_desc,biz_date,gmt_create)
USING 'splitsysin.py'
as topic_id,topic_title,topic_desc,biz_date,gmt_create
from r_bjx_dim_topic_t1;
⑧ windows下怎麼用python連接hive資料庫
setting.py:都要配置下USER, PASSWORD, HOST
MySQL插件 :MySQL-python version 1.2.1p2 or higher.
ENGINE :django.db.backends.mysql
NAME:你的數衡橋據庫名字
PostgreSQL插件:postgresql_psycopg2
ENGINE :django.db.backends.postgresql_psycopg2
NAME:你的資料庫名字
例如飢跡我的oracle配爛攔並置: