hive核心基本概念

2021-09-20 01:35:30 字數 3033 閱讀 8788

基於 hadoop 的乙個資料倉儲工具:

hive本身不提供資料儲存功能,使用hdfs做資料儲存,

hive也不分布式計算框架,hive的核心工作就是把sql語句翻譯成mr程式

hive也不提供資源排程系統,也是預設由hadoop當中yarn集群來排程

可以將結構化的資料對映為一張資料庫表,並提供 hql(hive sql)查詢功能

hive利用hdfs儲存資料,利用mapreduce查詢資料

總結:hive具有sql資料庫的外表,但應用場景完全不同,hive只適合用來做批量資料統計分析

1、hive中所有的資料都儲存在 hdfs 中,沒有專門的資料儲存格式(可支援text,sequencefile,parquetfile,rcfile等)

2、只需要在建立表的時候告訴 hive 資料中的列分隔符和行分隔符,hive 就可以解析資料。

3、hive 中包含以下資料模型:db、table,external table,partition,bucket。

²  external table:與table類似,不過其資料存放位置可以在任意指定路徑

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

²  bucket:在hdfs中表現為同乙個表目錄下根據hash雜湊之後的多個檔案

hive架構,driver是核心,driver可以解析語法,最難的就是解析sql的語法,只要把sql的語法解析知道怎麼做了,它內部用mapreduce模板程式,它很容易把它組裝起來,比如做乙個join操作,最重要的是識別語法,認識你的語法,知道你語法有什麼東西,解析出來會得到乙個語法樹,根據一些語法樹,去找一些mapreduce模板程式,把它組裝起來

例如:有二個表去join,內部有乙個優化機制,有乙個預設值,如果小表小於預設值,就採用map—join ,如果小表大於預設值,就採用reduce——join(其中map——join是先把小表載入到記憶體中),組裝時候就是輸入一些引數:比如:你的輸入資料在**,你的表資料的分隔符是什麼,你的檔案格式是什麼:然而這些東西是我們建表的時候就指定了,所以這些都知道了,程式就可以正常的跑起來

hive有了driver之後,還需要借助乙個非常重要的東西,他就是metastore,metastore裡邊記錄了hive中所建的:庫,表,分割槽,分桶他的一些資訊,描述資訊都在metastore,如果用了mysql作為hive的metastore:需要注意的是:你建的表不是直接建在mysql裡邊了,而是把這個表的很多描述資訊分在了mysql裡邊記錄了,什麼tables表,字段表。你建的hive裡邊的表存在hdfs上,hive會自動把他的目錄規劃/usr/hive/warehouse/庫檔案/庫目錄/表目錄  你的資料就在目錄下,

內部表:刪除表的時候,會刪除元資料和資料

外部表:刪除表的時候,只刪除元資料,不刪除資料        

內部表和外部表使用場景

分桶操作:按照使用者建立表時指定的分桶字段進行hash雜湊

跟mr中的hashpartitioner的原理一模一樣

mr中:按照key的hash值去模除以reducttask的個數

hive中:按照分桶字段的hash值去模除以分桶的個數

hive分桶操作的效果:

把乙個檔案按照某個特定的字段和桶數 雜湊成多個檔案

好處:1、方便抽樣

2、提高join查詢效率   

hive分割槽表的作用:讓你做統計的時候少統計,把我們的資料放在多個資料夾裡邊,我們統計時候,可以指定分割槽,這樣範圍就會小一些,這樣就減少了執行的時間

hive是由facebook開源

hive是基於hadoop的乙個開源資料倉儲工具

能夠將結構化資料對映成為一張資料庫表(二維表),提供類sql查詢語言(支援絕大多數sql標準語法)

底層依賴於hdfs儲存資料,hive的本質是hql語句轉化成mr程式,提交給hadoop執行

hive的適應場景:只適合做海量離線資料的統計分析

hive核心元件

直譯器:把hql語句轉換成一顆抽象語法樹

編譯器:把抽象語法樹轉換成一系列mr程式

hive的底層有一系列的mr模板(operation:groupbyoperation, joinoperation)

優化器:執行這一系列mr程式的優化

執行器:組織相應的資源提交給hadoop集群

db: myhive,   table: student     元資料:hivedb

1、hive的元資料

指的是 myhive 和 student等等的庫和表的相關的各種定義資訊

該元資料都是儲存在mysql中的

myhive是hive中的乙個資料庫的概念,其實就是hdfs上的乙個資料夾,跟mysql沒有多大的關係

myhive是hive中的乙個資料庫,那麼就會在元資料庫hivedb當中的dbs表中儲存乙個記錄

這一條記錄就是myhive這個hive中資料的相關描述資訊

其實,hive中建立乙個庫,就相當於是在hivedb中dbs中插入一條記錄, 並且在hdfs上建立相應的目錄

其實,hive中建立乙個表,就相當於在hivedb中tbls表中插入一條記錄,並且在hdfs上專案的庫目錄下建立乙個子目錄

乙個hive資料資料倉儲就依賴於乙個rdbms中的乙個資料庫,乙個資料庫例項對應於乙個hive資料倉儲

儲存於該hive資料倉儲中的所有資料的描述資訊,都統統儲存在元資料庫hivedb中

myhive 和  hivedb的區別:

myhive是hive中的資料庫: 用來儲存真實資料

hivedb是mysql中的資料庫: 用來多個類似myhive庫的真實資料的描述資料

2、hive的原資料

3、hive的源資料

儲存在hive資料倉儲中的真實資料  student.txt

元資料 : 一定指跟 hivedb相關,跟mysql相關

資料: hdfs上的對應表的目錄下的檔案

hdfs上的資料和元資料

資料:block塊

元資料:描述和管理這些block資訊的資料, 由namenode管理

hive核心基本概念

基於 hadoop 的乙個資料倉儲工具 hive本身不提供資料儲存功能,使用hdfs做資料儲存,hive也不分布式計算框架,hive的核心工作就是把sql語句翻譯成mr程式 hive也不提供資源排程系統,也是預設由hadoop當中yarn集群來排程 可以將結構化的資料對映為一張資料庫表,並提供 hq...

HIVE 基本概念

hive架構 hive架構圖 hive與hadoop的關係 hive利用hdfs儲存資料,利用mapreduce查詢資料 hive與hadoop關係圖 hive的資料儲存 1 hive中所有的資料都儲存在 hdfs 中,沒有專門的資料儲存格式 可支援text,sequencefile,parquet...

Hive基本概念

什麼是hive 是乙個基於hadoop的資料倉儲工具,可以將結構化資料對映成一張資料表,並提供類sql的查詢功能。hive的意義是什麼 背景 hadoop是個好東西,但是學習難度大,成本高,坡度陡。意義 目的 降低程式設計師使用hadoop的難度。降低學習成本。hive可以對資料進行儲存與計算 儲存...