數據分析引擎:hivenode
大數據的終極目標:使用SQL語句來處理大數據 mysql
1,hadoop的體系架構中:sql
兩個數據分析引擎:(*)Hive:支持sql數據庫
(*)Pig:支持PigLatin架構
一,什麼是hive?oop
1,hive是一個基於hdfs之上的數據倉庫性能
hive hdfs大數據
表 目錄url
數據 文件spa
分區表 目錄
分桶 文件
2,hive是基於hadoop之上的一個數據分析引擎
也就是說Hive是一個翻譯器(hive 2.x之前:sql語句由hive編譯成mr,hive2.x之後:sql語句由hive編譯成spark程序)
3,hql是sql的一個子集,不徹底支持sql
二,hive的體系架構
hive是基於在hdfs之上的,數據也是存在於咱們的從節點Datanode上面的。
第一種方式:咱們能夠經過cli命令行寫sql語句,而後由Hive Driver轉換成MR任務去處理數據
第二種方式:經過jdbc的方式,須要指定url肯定訪問地址,並且須要經過中間人(1.x Thrift server 2.x HiveServer2 端口都是10000)把sql語句提交給咱們的hiveDriver驅動
第三種方式 基於網頁去執行sql,用HWI(Hive Web Interface只有hive2.2版本之前才提供,2.2以後使用HUE去使用)去提交sql到HiveDriver上去運行.
注意:hive架構中元數據要單獨存儲在數據庫中(推薦使用mysql去存儲),經過讀取mysql數據庫中存儲的hive元數據獲得hive裏面存儲的真正的數據(數據模型),
由於hive元數據存儲了hive的表名、列名、列的類型 、分區、分桶、其餘信息.
三,hive的數據模型
1,內部表:相似於Mysql,Oracle裏面的表
2,外部表:只定義表結構,真正的數據存儲在hdfs的某個目錄上。能夠經過查看外部表的方式查看到這一個路徑下全部的表信息
3,分區表:提高性能(按部門分區)
你能夠按某個字段去分區,好比你有張員工表,表裏確定有部門號,按照部門號分區,也就是把屬於同一個部門的員工放在一張表裏管理,那麼在查詢的時候就能夠只掃描這張表,從而提高效率
4,分桶表:相似hash分區,判斷某個字段值的hash是否同樣,同樣的話分一個桶。
例如:咱們仍是拿員工表舉例,取部門號的hash值,把全部數據的部門hash值同樣的數據分在一個桶(桶是以文件形式存在的,區是以目錄形式存在的)裏面。
5,視圖
視圖的存在是爲了簡化複雜的查詢,就是將複雜的sql結果保留成視圖,下次直接查詢視圖就能夠獲得結果。好比你把查詢部門號爲10的員工保留成視圖,下次直接查詢視圖就可獲得結果