當前位置:首頁 » 編程軟體 » python腳本執行hive

python腳本執行hive

發布時間: 2025-07-14 08:26:24

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)

  • 為了支持Hive還需要以下兩個包:

  • sasl

  • thrift_sasl

  • 可在Python PI中下載impyla及其依賴包的源碼

    impyla示例

    以下是使用impyla連接HiveServer2的示例:

  • 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優化的十大方法

Hive用的好,才能從數據中挖掘出更多的信息來。用過hive的朋友,我想或多或少都有類似的經歷:一天下來,沒跑幾次hive,就到下班時間了。Hive在極大數據或者數據不平衡等情況下,表現往往一般,因此也出現了presto、spark-sql等替代品。這里重點講解hive的優化方式,例如

一. 表連接優化

二. 用insert into替換union all
如果union all的部分個數大於2,或者每個union部分數據量大,應該拆成多個insert into 語句,實際測試過程中,執行時間能提升50%。示例參考如下:

可以改寫為:

三. order by & sort by
order by : 對查詢結果進行全局排序消耗時間長,需要set hive.mapred.mode=nostrict
sort by : 局部排序,並非全局有序,提高效率。

四. transform+python
一種嵌入在hive取數流程中的自定義函數,通過transform語句可以把在hive中不方便實現的功能在python中實現,然後寫入hive表中。示例語法如下:

如果除python腳本外還有其它依賴資源,可以使用ADD ARVHIVE。

五. limit 語句快速出結果
一般情況下,Limit語句還是需要執行整個查詢語句,然後再返回部分結果。有一個配置屬性可以開啟,避免這種情況—對數據源進行抽樣

缺點:有可能部分數據永遠不會被處理到

六. 本地模式
對於小數據集,為查詢觸發執行任務消耗的時間>實際執行job的時間,因此可以通過本地模式,在單台機器上(或某些時候在單個進程上)處理所有的任務。

可以通過設置屬性hive.exec.mode.local.auto的值為true,來讓Hive在適當的時候自動啟動這個優化,也可以將這個配置寫在$HOME/.hiverc文件中。
當一個job滿足如下條件才能真正使用本地模式:

七. 並行執行
Hive會將一個查詢轉化為一個或多個階段,包括:MapRece階段、抽樣階段、合並階段、limit階段等。默認情況下,一次只執行一個階段。 不過,如果某些階段不是互相依賴,是可以並行執行的。

會比較耗系統資源。

八. 調整mapper和recer的個數

假設input目錄下有1個文件a,大小為780M,那麼hadoop會將該文件a分隔成7個塊(6個128m的塊和1個12m的塊),從而產生7個map數
假設input目錄下有3個文件a,b,c,大小分別為10m,20m,130m,那麼hadoop會分隔成4個塊(10m,20m,128m,2m),從而產生4個map數。
即如果文件大於塊大小(128m),那麼會拆分,如果小於塊大小,則把該文件當成一個塊。
map執行時間:map任務啟動和初始化的時間+邏輯處理的時間。

減少map數
若有大量小文件(小於128M),會產生多個map,處理方法是:

前面三個參數確定合並文件塊的大小,大於文件塊大小128m的,按照128m來分隔,小於128m,大於100m的,按照100m來分隔,把那些小於100m的(包括小文件和分隔大文件剩下的)進行合並。

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; – 執行前進行小文件合並。

增加map數
當input的文件都很大,任務邏輯復雜,map執行非常慢的時候,可以考慮增加Map數,來使得每個map處理的數據量減少,從而提高任務的執行效率。
set mapred.rece.tasks=?

一般根據輸入文件的總大小,用它的estimation函數來自動計算rece的個數:rece個數 = InputFileSize / bytes per recer

九. 嚴格模式

十. 數據傾斜
表現:
任務進度長時間維持在99%(或100%),查看任務監控頁面,發現只有少量(1個或幾個)rece子任務未完成。因為其處理的數據量和其他rece差異過大。單一rece的記錄數與平均記錄數差異過大,通常可能達到3倍甚至更多。 最長時長遠大於平均時長。

原因:

解決方案:參數調節

⑶ python應該如何連接hive

為了連接Hive資料庫,可以利用Python中的PyHive庫。首先,通過pip命令在終端中安裝PyHive庫。

連接過程涉及三個重要步驟。首先,導入PyHive庫中的三個模塊。然後,使用特定命令建立與Hive伺服器的連接,這里需要替換主機名、埠號、用戶名、密碼以及資料庫名稱。

接下來,使用Pandas庫的read_sql()函數在Python環境中執行SQL查詢,將結果存儲為Pandas數據幀。在執行此命令時,需替換表名稱為實際需要查詢的表名,以獲取表數據。

在完成數據操作後,記得使用特定命令關閉與Hive資料庫的連接,以釋放資源。至此,使用PyHive庫連接Hive資料庫的基本流程結束。連接成功後,即可利用SQL查詢獲取、處理和分析Hive資料庫中的數據。

⑷ 在hive查詢中使用變數

Hive配置屬性存儲於 hiveconf 命名空間中,該命名空間中的屬性是可讀寫的。在查詢語句中插入 '${hiveconf:變數名}' ,就可以通過 hive -hiveconf來替換變數。例如,查詢語句和執行方式如下:

需要注意的是:

Hive命令行變數,存儲於 hivevar 命名空間中,該命名空間中的變數是可讀寫的。使用方式和hive配置屬性類似,只是在查詢語句中插入的是 '${hivecar:變數名}' ,其中命名空間"hivecar:"可以省略。例如:

因為命令行變數的命名空間是唯一可以省略的,因此:

其他替換變數的方法:
利用shell腳本設置hive查詢語句中的變數
利用Python替換Hive查詢語句中的變數

熱點內容
下載pythonmysqldb 發布:2025-07-14 16:05:43 瀏覽:976
生化危機5配置要求怎麼樣 發布:2025-07-14 15:38:56 瀏覽:301
蘋果電話為什麼打不開密碼 發布:2025-07-14 15:33:45 瀏覽:45
安卓如何取消短消息通知 發布:2025-07-14 15:30:54 瀏覽:373
輿情監測演算法 發布:2025-07-14 15:29:19 瀏覽:14
android搜索聯系人 發布:2025-07-14 15:27:34 瀏覽:333
省唄上傳學歷 發布:2025-07-14 15:21:54 瀏覽:634
linux伺服器tomcat 發布:2025-07-14 15:19:41 瀏覽:192
東風風神奕炫max怎麼配置 發布:2025-07-14 15:13:44 瀏覽:747
蘋果安卓不知道到底怎麼選 發布:2025-07-14 15:07:52 瀏覽:926