Hive學習之路 (一)Hive初識

Hive 簡介

什么是Hive

1、Hive 由 Facebook 實現并開源

2、是基于 Hadoop 的一個數據倉庫工具

3、可以將結構化的數據映射為一張數據庫表

4、并提供 HQL(Hive SQL)查詢功能

5、底層數據是存儲在 HDFS 上

6、Hive的本質是將 SQL 語句轉換為 MapReduce 任務運行

7、使不熟悉 MapReduce 的用戶很方便地利用 HQL 處理和計算 HDFS 上的結構化的數據,適用于離線的批量數據計算。

  數據倉庫之父比爾·恩門(Bill Inmon)在 1991 年出版的“Building the Data Warehouse”(《建 立數據倉庫》)一書中所提出的定義被廣泛接受——數據倉庫(Data Warehouse)是一個面 向主題的(Subject Oriented)、集成的(Integrated)、相對穩定的(Non-Volatile)、反映歷史 變化(Time Variant)的數據集合,用于支持管理決策(Decision Making Support)。

  Hive 依賴于 HDFS 存儲數據,Hive 將 HQL 轉換成 MapReduce 執行,所以說 Hive 是基于 Hadoop 的一個數據倉庫工具,實質就是一款基于 HDFS 的 MapReduce 計算框架,對存儲在 HDFS 中的數據進行分析和管理

為什么使用 Hive

直接使用 MapReduce 所面臨的問題:

  1、人員學習成本太高

  2、項目周期要求太短

  3、MapReduce實現復雜查詢邏輯開發難度太大

為什么要使用 Hive:

  1、更友好的接口:操作接口采用類 SQL 的語法,提供快速開發的能力

  2、更低的學習成本:避免了寫 MapReduce,減少開發人員的學習成本

  3、更好的擴展性:可自由擴展集群規模而無需重啟服務,還支持用戶自定義函數

Hive 特點

優點

  1、可擴展性,橫向擴展,Hive 可以自由的擴展集群的規模,一般情況下不需要重啟服務 橫向擴展:通過分擔壓力的方式擴展集群的規模 縱向擴展:一臺服務器cpu i7-6700k 4核心8線程,8核心16線程,內存64G => 128G

  2、延展性,Hive 支持自定義函數,用戶可以根據自己的需求來實現自己的函數

  3、良好的容錯性,可以保障即使有節點出現問題,SQL 語句仍可完成執行

缺點

  1、Hive 不支持記錄級別的增刪改操作,但是用戶可以通過查詢生成新表或者將查詢結 果導入到文件中(當前選擇的 hive-2.3.2 的版本支持記錄級別的插入操作)

  2、Hive 的查詢延時很嚴重,因為 MapReduce Job 的啟動過程消耗很長時間,所以不能 用在交互查詢系統中。

  3、Hive 不支持事務(因為不沒有增刪改,所以主要用來做 OLAP(聯機分析處理),而 不是 OLTP(聯機事務處理),這就是數據處理的兩大級別)。

Hive 和 RDBMS 的對比

總結:

  Hive 具有 SQL 數據庫的外表,但應用場景完全不同,Hive 只適合用來做海量離線數 據統計分析,也就是數據倉庫

Hive的架構

從上圖看出hive的內部架構由四部分組成:

1、用戶接口: shell/CLI, jdbc/odbc, webui Command Line Interface

  CLI,Shell 終端命令行(Command Line Interface),采用交互形式使用 Hive 命令行與 Hive 進行交互,最常用(學習,調試,生產)

  JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客戶端,用戶(開發員,運維人員)通過 這連接至 Hive server 服務

  Web UI,通過瀏覽器訪問 Hive

2、跨語言服務 : thrift server 提供了一種能力,讓用戶可以使用多種不同的語言來操縱hive

  Thrift 是 Facebook 開發的一個軟件框架,可以用來進行可擴展且跨語言的服務的開發, Hive 集成了該服務,能讓不同的編程語言調用 Hive 的接口

3、底層的Driver: 驅動器Driver,編譯器Compiler,優化器Optimizer,執行器Executor

  Driver 組件完成 HQL 查詢語句從詞法分析,語法分析,編譯,優化,以及生成邏輯執行 計劃的生成。生成的邏輯執行計劃存儲在 HDFS 中,并隨后由 MapReduce 調用執行

  Hive 的核心是驅動引擎, 驅動引擎由四部分組成:

    (1) 解釋器:解釋器的作用是將 HiveSQL 語句轉換為抽象語法樹(AST)

    (2) 編譯器:編譯器是將語法樹編譯為邏輯執行計劃

    (3) 優化器:優化器是對邏輯執行計劃進行優化

    (4) 執行器:執行器是調用底層的運行框架執行邏輯執行計劃

4、元數據存儲系統 : RDBMS MySQL

  元數據,通俗的講,就是存儲在 Hive 中的數據的描述信息。

  Hive 中的元數據通常包括:表的名字,表的列和分區及其屬性,表的屬性(內部表和 外部表),表的數據所在目錄

  Metastore 默認存在自帶的 Derby 數據庫中。缺點就是不適合多用戶操作,并且數據存 儲目錄不固定。數據庫跟著 Hive 走,極度不方便管理

  解決方案:通常存我們自己創建的 MySQL 庫(本地 或 遠程)

  Hive 和 MySQL 之間通過 MetaStore 服務交互

執行流程

  HiveQL 通過命令行或者客戶端提交,經過 Compiler 編譯器,運用 MetaStore 中的元數 據進行類型檢測和語法分析,生成一個邏輯方案(Logical Plan),然后通過的優化處理,產生 一個 MapReduce 任務。

Hive的數據組織

1、Hive 的存儲結構包括數據庫、表、視圖、分區和表數據等。數據庫,表,分區等等都對 應 HDFS 上的一個目錄。表數據對應 HDFS 對應目錄下的文件。

2、Hive 中所有的數據都存儲在 HDFS 中,沒有專門的數據存儲格式,因為 Hive 是讀模式 (Schema On Read),可支持 TextFile,SequenceFile,RCFile 或者自定義格式等

3、 只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據

  Hive 的默認列分隔符:控制符 Ctrl + A,\x01 Hive

  Hive 的默認行分隔符:換行符 \n

4、Hive 中包含以下數據模型:

  database:在 HDFS 中表現為${hive.metastore.warehouse.dir}目錄下一個文件夾

  table:在 HDFS 中表現所屬 database 目錄下一個文件夾

  external table:與 table 類似,不過其數據存放位置可以指定任意 HDFS 目錄路徑

  partition:在 HDFS 中表現為 table 目錄下的子目錄

  bucket:在 HDFS 中表現為同一個表目錄或者分區目錄下根據某個字段的值進行 hash 散 列之后的多個文件

  view:與傳統數據庫類似,只讀,基于基本表創建

5、Hive 的元數據存儲在 RDBMS 中,除元數據外的其它所有數據都基于 HDFS 存儲。默認情 況下,Hive 元數據保存在內嵌的 Derby 數據庫中,只能允許一個會話連接,只適合簡單的 測試。實際生產環境中不適用,為了支持多用戶會話,則需要一個獨立的元數據庫,使用 MySQL 作為元數據庫,Hive 內部對 MySQL 提供了很好的支持。

6、Hive 中的表分為內部表、外部表、分區表和 Bucket 表

內部表和外部表的區別:

  刪除內部表,刪除表元數據和數據

  刪除外部表,刪除元數據,不刪除數據

內部表和外部表的使用選擇:

  大多數情況,他們的區別不明顯,如果數據的所有處理都在 Hive 中進行,那么傾向于 選擇內部表,但是如果 Hive 和其他工具要針對相同的數據集進行處理,外部表更合適。

  使用外部表訪問存儲在 HDFS 上的初始數據,然后通過 Hive 轉換數據并存到內部表中

  使用外部表的場景是針對一個數據集有多個不同的 Schema

  通過外部表和內部表的區別和使用選擇的對比可以看出來,hive 其實僅僅只是對存儲在 HDFS 上的數據提供了一種新的抽象。而不是管理存儲在 HDFS 上的數據。所以不管創建內部 表還是外部表,都可以對 hive 表的數據存儲目錄中的數據進行增刪操作。

分區表和分桶表的區別:?

  Hive 數據表可以根據某些字段進行分區操作,細化數據管理,可以讓部分查詢更快。同 時表和分區也可以進一步被劃分為 Buckets,分桶表的原理和 MapReduce 編程中的 HashPartitioner 的原理類似。

  分區和分桶都是細化數據管理,但是分區表是手動添加區分,由于 Hive 是讀模式,所 以對添加進分區的數據不做模式校驗,分桶表中的數據是按照某些分桶字段進行 hash 散列 形成的多個文件,所以數據的準確性也高很多

?

轉載于:https://www.cnblogs.com/qingyunzong/p/8707885.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280719.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280719.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280719.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

angularJs select綁定的model 取不到值

內容結構 一.原因分析 二. 解決辦法 一.原因分析 1.由于原型繼承的關系,修改父級對象中的someBareValue會同時修改子對象中的值,但反之則不行。2.ng-if 以及 ng-repeat 會創建一個子級作用域,如果在這倆個指令中添加了元素&a…

PS2019攝影后期處理(三)通透....

一、PS可選顏色 在對應顏色進行cmyk加減

(原創) 今天拿到學生證了 (日記)

<原文我在2006/09/07發表在藍色小舖>今天拿到學生證了&#xff0c;終於正式成為臺大的學生。第一件事情就是去臺大圖書館借了四本書回家看&#xff0c;一次可以借兩個月耶&#xff0c;真不錯。 感覺很複雜&#xff0c;下星期要離開華碩&#xff0c;得繳回識別證&#xff…

os 鍵盤快捷鍵截圖_如何通過鍵盤快捷鍵更有效地使用OS X虛擬桌面

os 鍵盤快捷鍵截圖() We like having multiple virtual desktops on OS X, especially when we can supercharge them by combining them with a few simple keyboard shortcuts. So, on that note, here are some practical ways to use OS X’s virtual desktops like you me…

旗正規則引擎內存表出錯的原因及解決方法

經常我們有一些使用者問到這個問題&#xff0c;關于內存表出錯的情況&#xff0c;其實問題不復雜&#xff0c;我這給大家簡單的講一下就明白了&#xff0c;如果還有什么不明白的&#xff0c;其實也都可以問廠家杭州旗正&#xff0c;隨時都有人回應的。 1 內存表 1.1 匯總 1.1.1…

Shell腳本之sed的使用

1.sed命令&#xff1b;主要作用是查找&#xff1b;新增 刪除 和修改替換。 user.txt daokr#cat user.txt ID Name Sex Age 1 zhang M 19 2 wang G 20 3 cheng M 10 4 huahua M 100 查找命令&#xff1a;-n 和 p&#xff08;prin…

.NET周報【11月第4期 2022-11-30】

國內文章.NET 7 的 AOT 到底能不能扛反編譯&#xff1f;https://www.cnblogs.com/huangxincheng/p/16917197.html在 B 站&#xff0c;公眾號上發了一篇 AOT 的文章后&#xff0c;沒想到反響還是挺大的&#xff0c;都稱贊這個東西能抗反編譯&#xff0c;可以讓破解難度極大提高&…

結合hello world探討gcc編譯程序的過程

本博客&#xff08;http://blog.csdn.net/livelylittlefish&#xff09;貼出作者&#xff08;三二一小魚&#xff09;相關研究、學習內容所做的筆記&#xff0c;歡迎廣大朋友指正&#xff01; 結合"hello world"探討gcc編譯程序的過程 1. gcc簡介 gcc/g是GNU工程的C和…

Powershell 時間相關

1.時間相差秒數計算 $start Get-Date Get-HotFix $end Get-Date Write-Host -ForegroundColor Red (Total Runtime: ($end - $start).TotalSeconds)//若開始時間保存為字符串$startTime Get-Date -Format yyyyMMddTHH:mm:ss $startTime[datetime]::ParseExact("$sta…

java類中,成員變量賦值第一個進行,其次是靜態構造函數,再次是構造函數

如題是結論&#xff0c;如果有人問你Java類的成員初始化順序和初始化塊知識就這樣回答他。下面是代碼&#xff1a; package com.test;public class TestClass{// 成員變量賦值第一個執行private static int m11;private int m21;// 靜態構造函數第二個執行static{System.out.pr…

Unity的未來,是固守Mono,還是擁抱CoreCLR?

TLDR;Unity堅定的擁抱.NET標準生態&#xff0c;正全速向CoreCLR遷移。Mono vs CoreCLR對于一個C#的初學者&#xff0c;首先要了解的便是.NET和C#的關系。所以這里不再贅述。對于一個Unity的初學者&#xff0c;在使用C#編碼的過程中&#xff0c;一定會遇到一些C#新特性不能在項目…

hinton教授的本科生課程CSC321-機器學習中的神經網的筆記

最近一直在看仙守博友所記錄的筆記 Hinton的CSC321課程&#xff08;完結&#xff0c;待文字潤色&#xff09;&#xff1a; 1、lecture1-NN的簡介 2、lecture2-NN結構的主要類型的概述和感知機 3、lecture3-線性神經元和算法 4、lecture4-神經網絡在語言上的應用 5、lecture5-對…

ASP存儲過程參數數據類型

ASP調用存儲過程一般的方法&#xff1a; p.Append cmd.CreateParameter("參數名稱",類型,方向,大小) 參許參數值的類型的意義如下&#xff1a; 名稱值 整數值 功能 adDBTimeStamp 135 日期時間數據類型 adDecimal 14 十進制整數值 adDouble …

powershell 啟動線程與關閉線程

啟動線程 $ScreenCapture"C:\ResolutionTool\ScreenCapture.exe" Start-Process $ScreenCapture 關閉線程 Get-Process ScreenCapture| Stop-Process

HDU 5673 Robot 卡特蘭數

題目鏈接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid5673 題目描述&#xff1a; 一個人從原點開始向右走&#xff0c; 要求N秒后回到原點&#xff0c; 且過程中不能到負半軸&#xff0c; 人有兩種操作&#xff0c; 走動或者停止&#xff0c; 問總共有多少種方案&…

刪除本地賬戶無法登錄電腦_如何從Windows的登錄屏幕中刪除本地用戶帳戶

刪除本地賬戶無法登錄電腦If you have multiple user accounts on your computer, you might find it annoying to have to click on the icon for your username each time you start up the computer. To remedy this problem, you can hide a user account with a registry …

tarjan算法詳解

https://blog.csdn.net/jeryjeryjery/article/details/52829142?locationNum4&fps1 以防鏈接失效&#xff0c;特此轉載此博&#xff0c;如有侵權請見諒 在有向圖G中&#xff0c;如果兩個頂點間至少存在一條路徑&#xff0c;稱兩個頂點強連通(strongly connected)。如果有向…

Gitlab簡單使用CI/CD

開篇語大概是去年就想做這個事情了&#xff0c;奈何當時卡到一個docker命令找不到的問題上&#xff0c;導致文章難產了&#xff0c;墨跡了這么久&#xff0c;終于又有空來搗鼓它了。目的我們要實現的目的是我本地不斷提交代碼(CI),然后服務器不斷進行部署(CD)的一個簡單流程。準…

AppleScript: Handler

AppleScript絕對是個奇葩的存在&#xff01;不管功能有多強大。 Handler有兩種&#xff0c;一種是和OC類似的使用Label參數&#xff0c;一種是和javascript類似的使用括號把一堆參數都放在里面的。 label參數的Handler的寫法非常奇怪&#xff0c;光看文檔絕對讓人迷糊。這里按照…

powershell 運行策略

Unrestricted 這是一種比較寬容的策略&#xff0c;允許運行未簽名的腳本。對于從網絡上下載的腳本&#xff0c;在運行前會進行安全性提示&#xff1a; Set-ExecutionPolicy UnRestricted