基於 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核心基本概念
基於 hadoop 的乙個資料倉儲工具 hive本身不提供資料儲存功能,使用hdfs做資料儲存,hive也不分布式計算框架,hive的核心工作就是把sql語句翻譯成mr程式 hive也不提供資源排程系統,也是預設由hadoop當中yarn集群來排程 可以將結構化的資料對映為一張資料庫表,並提供 hq...
Hive相關概念
hive 基於hadoop之上的乙個離線資料倉儲,使用hdfs作為底層儲存,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為mapreduce任務進行執行。hive主要分為以下幾個部分 1.使用者介面 使用者介面主要有三個 cli,client 和 web...