国产精品色哟哟_男男激情3p互攻_色偷偷影院_和女同学厕所做了四次

當前位置: 首頁 / 技術干貨 / 正文
Python如何操作Hive?

2023-02-23

   需要 self

Python如何操作Hive

  Python是一個非常優秀的編程語言,使用的群體非常的多,第三方的庫也非常的多。其中有一個庫叫做:PyHive,作用就是:連接到Hive,使用Python語言來操作Hive的數據!

  PyHive是通過HiveServer2服務連接到原數據庫的,因此需要啟動HiveServer2服務!

  啟動HiveServer2服務

  # 直接開啟HiveServer2的服務,但是需要注意這個進程是一個前臺進程

  hive --service hiveserver2

  # 啟動HiveServer2的服務,并將其設為后臺進程,但是依然會在控制臺輸出一些日志信息

  hive --service hiveserver2 &

  # 啟動HiveServer2的服務,并將其設為后臺進程,將日志輸出在指定的文件中

  hive --service hiveserver2 > /tmp/my_hive_logs/hiveserver2.log 2>&1 &

  需要注意:

  HiveServer2服務的完全啟動需要一定的時間,追蹤日志文件會發現最后在啟動SESSION_ID,當啟動到4個SESSION_ID的時候,服務才算完全啟動,此時才可以使用beeline或者PyHive連接到Hive的元數據。這個過程需要1分鐘左右。

  安裝依賴

  我們需要使用Python代碼來操作Hive,就需要安裝好對應的庫文件。直接使用pip命令來安裝即可。那么安裝在什么位置呢?主機還是虛擬機呢?

  在哪里執行代碼,就在哪里安裝!

  ●你的Python代碼需要在windows本地運行,那就需要在windows上安裝;

  ●你的Python代碼需要在macOS本地運行,那就需要在macOS上安裝;

  ●你的Python代碼需要在CentOS虛擬機中運行,那就需要在CentOS虛擬機上安裝

  # 使用pip3安裝第三方庫文件

  pip3 install pyhive sasl thrift thrift-sasl

  注意事項:

  在CentOS中,安裝sasl的時候可能會失敗,是因為缺少依賴文件,直接使用yum安裝即可。

  yum install gcc gcc-c++ cyrus-sasl-devel

  基本的訪問代碼

  # @Author : 大數據章魚哥

  # @Company : 北京千鋒互聯科技有限公司

  # 導入第三方模塊

  from pyhive import hive

  # 創建程序與Hive的連接對象

  hive_connection = hive.Connection(

  host="192.168.10.101", # 開啟了HiveServer2服務的節點IP地址或者主機名

  port=10000, # 連接到HiveServer2服務的端口,默認是10000端口

  username="root", # 連接到HiveServer2服務的用戶名

  database="mydb" # 連接到Hive的數據庫名字

  )

  # 創建游標對象

  hive_cursor = hive_connection.cursor()

  # 執行HQL語句

  hive_cursor.execute("select * from emp")

  # 獲取所有的執行結果

  result = hive_cursor.fetchall()

  for row in result:

  print(row)

  # 釋放資源

  hive_cursor.close()

  hive_connection.close()

  使用PyHive操作Hive的過程,其實與Python操作MySQL數據庫非常的類似!

  當然,在上述的代碼執行過程中,有可能會因為中間的代碼出現異常,導致最終的資源無法釋放的問題,因此我們可以這樣優化代碼

  # @Author : 大數據章魚哥

  # @Company : 北京千鋒互聯科技有限公司

  # 導入第三方模塊

  from pyhive import hive

  # 創建程序與Hive的連接對象

  hive_connection = hive.Connection(

  host="192.168.10.101", # 開啟了HiveServer2服務的節點IP地址或者主機名(如果設置為主機名,需要保證已經做好映射)

  port=10000, # 連接到HiveServer2服務的端口,默認是10000端口

  username="root", # 連接到HiveServer2服務的用戶名

  database="mydb" # 連接到Hive的數據庫名字

  )

  # 創建游標對象,同時使用with代碼段,完成資源的自動釋放

  with hive_connection, hive_connection.cursor() as hive_cursor:

  # 執行HQL語句

  hive_cursor.execute("select * from mydb")

  # 輸出查詢到的所有結果

  rows = hive_cursor.fetchall()

  for row in rows:

  print(row)

  功能封裝

  我們可以封裝一個類,專門用來做與Hive的交互操作。我們在使用的時候,只需要將需要執行的HQL語句告訴這個類的對象即可。

  # @Author : 大數據章魚哥

  # @Company : 北京千鋒互聯科技有限公司

  from pyhive import hive

  class HiveClient:

  __slots__ = ('db', 'cur')

  def __init__(self, *, host='192.168.10.101', port=10000, username='root', database='mydb'):

  """

  構造函數,提供默認的連接配置

  :param host: 連接到的服務器地址,默認 192.168.10.101

  :param port: 連接到的服務器端口,默認 10000

  :param username: 連接到的服務器用戶,默認 root

  :param database: 連接到的數據庫,默認 mydb

  """

  self.db = hive.Connection(host=host, port=port, username=username, database=database)

  self.cur = self.db.cursor()

  def __del__(self):

  """

  析構函數,用于釋放連接對象

  :return:

  """

  self.cur.close()

  self.db.close()

  def execute(self, sql, params=None):

  """

  執行DDL、DML的操作

  :param sql: 需要執行的SQL語句

  :param params: 執行SQL語句時候的參數

  :return:

  """

  try:

  self.cur.execute(sql, params)

  self.db.commit()

  print("execute: ", sql, params)

  except Exception as e:

  print(e)

  self.db.rollback()

  def query_all(self, sql):

  """

  執行指定的查詢語句,并返回所有的查詢結果

  :param sql: 需要執行的查詢操作

  :return: 查詢到的所有結果

  """

  self.cur.execute(sql)

  return self.cur.fetchall()

  封裝完成之后,后面再使用到Python來操作Hive的時候將會非常的方便

  # 實例化連接到操作Hive的對象

  client = HiveClient()

  # 加載數據,如果要使用local的路徑,需要注意的是這里指的是連接到的hiveserver2所在節點的文件系統

  # client.execute("load data local inpath '/root/example_01_data' into table example_01")

  # 克隆表

  # client.execute("create table example_01_copy as select * from example_01")

  # 刪除表

  # client.execute("drop table example_01_copy")

  # print(client.query_all("select * from example_01"))

好程序員公眾號

  • · 剖析行業發展趨勢
  • · 匯聚企業項目源碼

好程序員開班動態

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數據+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發 <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數據分析 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2019-07-22(北京)

    開班盛況
IT培訓IT培訓
在線咨詢
IT培訓IT培訓
試聽
IT培訓IT培訓
入學教程
IT培訓IT培訓
立即報名
IT培訓

Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號