Hive詳解

来源:https://www.cnblogs.com/LaoPaoEr/archive/2022/07/15/16318922.html
-Advertisement-
Play Games

1 Hive基本概念 Hive是一個構建在Hadoop上的數據倉庫框架。最初,Hive是由Facebook開發,後來移交由Apache軟體基金會開發,並作為一個Apache開源項目。 Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供類SQL查詢功能。 其 ...


1 Hive基本概念

Hive是一個構建在Hadoop上的數據倉庫框架。最初,Hive是由Facebook開發,後來移交由Apache軟體基金會開發,並作為一個Apache開源項目。

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供類SQL查詢功能。

其本質是將SQL轉換為MapReduce的任務進行運算,底層由HDFS來提供數據的存儲,說白了hive可以理解為一個將SQL轉換為MapReduce的任務的工具,甚至更進一步可以說hive就是一個MapReduce的客戶端。

2 Hive的特點與架構圖

  • Hive最大的特點是通過類SQL來分析大數據,而避免了寫MapReduce程式來分析數據,這樣使得分析數據更容易。
  • 數據是存儲在HDFS上的,Hive本身並不提供數據的存儲功能,它可以使已經存儲的數據結構化。
  • Hive是將數據映射成資料庫和一張張的表,庫和表的元數據信息一般存在關係型資料庫上(比如MySQL)。
  • 數據存儲方面:它能夠存儲很大的數據集,可以直接訪問存儲在Apache HDFS或其他數據存儲系統(如Apache HBase)中的文件。
  • 數據處理方面:因為Hive語句最終會生成MapReduce任務去計算,所以不適用於實時計算的場景,它適用於離線分析。
  • Hive除了支持MapReduce計算引擎,還支持Spark和Tez這兩種分散式計算引擎;
  • 數據的存儲格式有多種,比如數據源是二進位格式,普通文本格式等等;
  • hive具有sql資料庫的外表,但應用場景完全不同,hive只適合用來做批量數據統計分析

3 Hive的安裝方式

hive的安裝一共有三種方式:內嵌模式、本地模式、遠程模式 

元數據服務(metastore)作用是:客戶端連接metastore服務,metastore再去連接MySQL資料庫來存取元數據。有了metastore服務,就可以有多個客戶端同時連接,而且這些客戶端不需要知道MySQL資料庫的用戶名和密碼,只需要連接metastore 服務即可。

  (1) 內嵌模式

  內嵌模式使用的是內嵌的Derby資料庫來存儲元數據,也不需要額外起Metastore服務。資料庫和Metastore服務都嵌入在主Hive Server進程中。這個是預設的,配置簡單,但是一次只能一個客戶端連接,適用於用來實驗,不適用於生產環境。解壓hive安裝包  bin/hive 啟動即可使用

  缺點:不同路徑啟動hive,每一個hive擁有一套自己的元數據,無法共用。

 (2)本地模式

  本地模式採用外部資料庫來存儲元數據,目前支持的資料庫有:MySQL、Postgres、Oracle、MS SQL Server.在這裡我們使用MySQL。本地模式不需要單獨起metastore服務,用的是跟hive在同一個進程里的metastore服務。也就是說當你啟動一個hive 服務,裡面預設會幫我們啟動一個metastore服務。hive根據hive.metastore.uris 參數值來判斷,如果為空,則為本地模式。

  缺點:每啟動一次hive服務,都內置啟動了一個metastore。

  (3)遠程模式

  遠程模式下,需要單獨起metastore服務,然後每個客戶端都在配置文件里配置連接到該metastore服務。遠程模式的metastore服務和hive運行在不同的進程里。在生產環境中,建議用遠程模式來配置Hive Metastore。在這種情況下,其他依賴hive的軟體都可以通過Metastore訪問hive。

  遠程模式下需要配置hive.metastore.uris 參數來指定metastore服務運行的機器ip和埠,並且需要單獨手動啟動metastore服務。hiveserver2是Hive啟動了一個server,客戶端可以使用JDBC協議,通過IP+ Port的方式對其進行訪問,達到併發訪問的目的。

4 Hive的安裝

之前文章介紹過按照Hadoop,繼Hadoop後按照Hive。在此處選擇第三台機器node3作為我們hive的安裝機器,安裝方式使用遠程方式。

準備工作:① 必須按照有Hadoop(可以是單節點也可以是高可用)和MySQL資料庫。可參照我其他兩篇文章。

     ② 在Node3主機上創建目錄(已創建有可以忽略):

mkdir  -p /export/server/
mkdir  -p /export/data/
mkdir  -p /export/software/

準備一個Hive的包,可以去官網下載 http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

(1)上傳壓縮包到/export/software目錄里,並解壓安裝包

# 上傳壓縮包到/export/software目錄里,並解壓安裝包
cd /export/software/
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /export/server
cd /export/server
mv apache-hive-3.1.2-bin hive-3.1.2

(2)解決hadoop、hive之間guava版本差異

#解決hadoop、hive之間guava版本差異
cd /export/server/hive-3.1.2
rm -rf lib/guava-19.0.jar
cp /export/server/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/

(3) 配置一個MySQL的連接包。這步必須配置,Mysql5.X和Mysql8.X的連接包可能不同,具體可以去官網下載,附上腳本之家的下載教程(https://www.jb51.net/article/190860.htm

#上傳這個包到此目錄下/export/server/hive-3.1.2/lib
mysql-connector-java-5.1.41-bin.jar

(5)修改hive環境變數文件 添加Hadoop_HOME

#修改hive環境變數文件 添加Hadoop_HOME
cd /export/server/hive-3.1.2/conf/
mv hive-env.sh.template hive-env.sh
vim hive-env.sh

#---將以下的配置放到配置文件中,以hadoop-3.1.4和hive-3.1.2為例
HADOOP_HOME=/export/server/hadoop-3.1.4
export HIVE_CONF_DIR=/export/server/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/export/server/hive-3.1.2/lib

(6)配置mysql等相關信息,新增hive-site.xml 

#--打開配置文件
vim hive-site.xml

#--將以下配置內容寫入配置文件中,具體的連接埠以自己本機為準,附上備註
<configuration>
    <!-- 存儲元數據mysql相關配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value> jdbc:mysql://node3:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>

    <!-- H2S運行綁定host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>node3</value>
    </property>

    <!-- 遠程模式部署metastore 服務地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node3:9083</value>
    </property>

    <!-- 關閉元數據存儲授權  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>

    <!-- 關閉元數據存儲版本的驗證 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>

(7)初始化metadata(只需要在配置完Hive之後進行一次操作)

cd /export/server/hive-3.1.2

#初始化成功會在mysql中創建74張表
bin/schematool -initSchema -dbType mysql -verbos

(8)系統環境變數配置

#添加環境變數
vim /etc/profile

#將以下環境變數新增到/etc/profile文件中
export HIVE_HOME=/export/server/hive-3.1.2
export PATH=:$HIVE_HOME/bin:$PATH

#刷新,讓環境變數生效
source /etc/profile

 (9)通過後臺運行啟動metastore和hiveserver2 啟動前需要查看下Hadoop是否啟動,Hadoop未啟動會報錯:連接失敗

#查看Hadoop是否啟動
jps

#Hadoop未啟動:沒有DataNode和NodeManage節點代表Hadoop未啟動
#一鍵啟動Hadoop(已啟動則忽略)
start-add.sh

#-----------------Metastore 和 Hiveserver2啟動----
nohup /export/server/hive-3.1.2/bin/hive --service metastore  2>&1 &
nohup /export/server/hive-3.1.2/bin/hive --service hiveserver2 2>&1 &

#啟動成功會生成日誌,進入可以查看是否有問題
vim nohup.out

 (10)驗證是否安裝成功

#在Linux中輸入,hive直接回車,
hive

#出現一個終端,在該終端中可以輸入sql命令:
show databases;

5  Hive的交互方式

Hive交互方式有多種,這裡以遠程模式的hiveserver2交互為例。需要對Hadoop配置文件進行更新。

#第一步:在NameNode節點上的主機上關閉Hadoop(我的是Node1主機)
stop-all.sh

#第二步:Node1主機上進入到Hadoop配置文件的路徑,然後編輯 core-site.xml文件
cd /export/server/hadoop-3.1.4/etc/hadoop/
vim core-site.xml

#第三步:在文件末尾<configuration>內追加配置
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>

#第四步:將修改好的core-site.xml文件分發到node2和node3
scp core-site.xml node2:$PWD
scp core-site.xml node3:$PWD

#第五步:然後重啟Hadoop(stop-all.sh start-all.sh)
start-all.sh

在hive運行的伺服器上,確保已經啟動metastore服務和hiveserver2服務,如果沒有啟動,則執行以下語句

nohup /export/server/hive-3.1.2/bin/hive --service metastore  2>&1 &
nohup /export/server/hive-3.1.2/bin/hive --service hiveserver2 2>&1 &

 為了方便快捷,直接通過製作腳本進行登錄Hive

#Hive一鍵登錄腳本,安裝expect
yum  -y install expect

#新建一個腳本文件夾,並寫一個腳本
mkdir -p /export/server/script
cd /export/server/script
vim  beenline.exp

#腳本的內容如下:

#!/bin/expect
spawn beeline 
set timeout 5
expect "beeline>"
send "!connect jdbc:hive2://node3:10000\r"
expect "Enter username for jdbc:hive2://node3:10000:"
send "root\r"
expect "Enter password for jdbc:hive2://node3:10000:"
send "123456\r"
interact

#:wq保存腳本後,需要修改腳本許可權
chmod 777 beenline.exp

#最後可以實現一鍵腳本登錄Hive
expect beenline.exp

6 使用IDEA連接hive

使用IntelliJ IDEA 連接

打開node1:9870 看到hadoop中生成了hive的數據表所在位置

具體的hive語法操作自行百度,最後。引用網友的hive架構圖

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • AIrBuddy Mac版是Mac平臺上的一款可以幫助用戶更好的體驗和使用AIrPods及Beats無線耳機的應用。只需點擊一下,即可連接並將Mac的音頻播放到AIrPods。它還可以確保Mac的音頻輸入不會切換到AIrPods,這樣您就可以獲得最佳質量。 詳情:AirBuddy for Mac(A ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一、paramiko模塊簡介 paramiko是一個用於做遠程式控制制的模塊,使用該模塊可以對遠程伺服器進行命令或文件操作,基於linux中的ssh服務 。paramiko是第三方模塊,需要我們單獨安裝。通過paramiko模塊,我們可以利用pyth ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 前言 出現這種bug Unit mysql.service could not be found 因為bug被我修複好了,在這裡引用一下網友的bug截圖 1. 原理 之所以使用命令行service mysqld status出現Unit mysq ...
  • SecureFX for Mac是一款跨平臺文件傳輸客戶端軟體,有著易用的、類似於資源管理器的用戶界面。securefx mac可以更加有效的實現文件的安全傳輸,您可以使用其新的拖放功能直接將文件拖至Windows Explorer和其他程式中,用戶也可以充分利用SecureFX for mac的自 ...
  • 基礎知識 進程 內核的功能和作用:文件系統管理、網路管理、進程管理、記憶體管理等,屬於linux最基礎的功能 進程:process,正在運行中的程式的一個副本。允許有多個進程同時執行。 #操作系統負責分配cpu運行進程的順序和時間 #副本:把磁碟上的指定文件載入到記憶體進行運行 運行多次就會有多個副本 ...
  • 在SQL Server中有幾種方法可以找到活動的 SQL 連接。讓我們看看一些使用 T-SQL 查詢的簡單快捷的方法。 SP_WHO SP_WHO 是 SQL Server 內置的系統存儲過程, 其他方法相比,SP_WHO 將具有最少的列,但是一種快速列出活動連接的方法。 以下是在 SQL Serv ...
  • 1.selectKey介紹及作用 <selectKey>標簽有如下屬性 resultType:sql返回的java類型 statementType:STATEMENT|PREPARED|CALLABLE三種預設PREPARED keyProperty:列名對應的java屬性名,可逗號分隔 keyCo ...
  • 備份和恢覆命令 備份庫 直接在cmd視窗中直接輸入,結束不需要輸入; mysqldump -h埠號 -u用戶名 -p密碼 資料庫名>備份地址 恢復庫 在cmd視窗中進行 1、連接資料庫 mysql -u用戶名 -p密碼 2、創建資料庫 create database 庫名 3、切換到可用資料庫 u ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...