Hive學習--架構和基本組成

參考鏈接:深入淺出學Hive

一、Hive簡介

  • Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供類SQL查詢功能。
  • 本質是將SQL轉換爲MapReduce程序

Hive與Hadoop的關係
這裏寫圖片描述

Hive與傳統數據庫對比

 

Hive
RDBMS
查詢語言
HQL
SQL
數據存儲
HDFS
Raw Device or Local FS
執行
MapReduce
Excutor
執行延遲
處理數據規模
索引
0.8版本後加入位圖索引
有複雜的索引

二、Hive架構與基本組成

架構圖

1、各組件基本功能

用戶接口:用戶訪問Hive的入口
主要有三個:CIL(命令行),JDBC/ODBC(java),WebUI(瀏覽器訪問)

元數據:Hive的用戶信息與表的MetaData
Hive將元數據存儲在數據庫中,目前只支持mysql,derby.
元數據包括:表名字,表的列和分區及其屬性,表的數據所在目錄。

解釋器,編譯器,優化器:分析翻譯、編譯、優化HQL的組件
完成HQL查詢語句從詞法分析、語法分析、編譯、優化及查詢計劃的生成。生成的查詢計劃存儲在HDFS中,並隨後由MapReduce調用執行。

Hive的數據存儲在HDFS中,大部分查詢有MapReduce完成。(包含的查詢,例如select from不會生成mapreduce任務)

•Metastore
是系統目錄,保存Hive中表的元數據信息。
metastore包含:
Database, 是表(table)的名字空間。默認的數據庫(database)名爲‘default’
Table 表的元數據,包含信息有:列(list of columns)和它們的類型(types),擁有者(owner),存儲空間(storage)和SerDei信息
Partition, 每個分區(partition)都有自己的列(columns),SerDe和存儲空間(storage)。這一特徵將被用來支持Hive中的模式演變(schema evolution)
•Driver
1)Driver調用編譯器處理HiveQL字串
2)編譯器將HQL轉化爲策略(plan)
3)策略由元數據操作和HDFS操作組成。元數據操作只包含DDL(create,drop,alter)語句,HDFS操作只包含LOAD語句。
4)對插入和查詢而言,策略由map-reduce任務中有向非循環圖組成(DAG directed acyclic graph)。

2、Hive運行模式

本地和集羣兩種模式。
設置方式:

SET mapred.job.tracker=local
或者
SET mapred.job.tracker=192.168.1.2:9001

3、數據類型

原始數據類型:
tinyint - 1byte
smallint - 2 byte
int - 4 byte
bigint - 8 byte
boolean
float
double
string

複雜數據類型:
structs
maps
arrays
timestamp

4、Hive元數據存儲

5、Hive的數據模型

Hive的數據存儲建立在Hadoop的HDFS之上。
默認可以直接加載文本文件。創建表時可指定列分隔符航分隔符,hive可解析數據。

•Table 內部表
每個內部表在hive中有一個對應的目錄存儲數據。例如:表student在HDFS中的路徑爲“/warehouse/student”,warehouse是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的數據倉庫目錄。
創建內部表:

create table student(id int,name string)

加載數據:

load data inpath ‘filepath’ into table student

刪除內部表時,元數據和數據都會被刪除。

drop table student

•Partition 分區表
在hive中,表中的一個partition對應於表下的一個目錄,partition中的數據存儲在對應目錄下。
例如:student表中包含age和score兩個partition,對應age=15,score=80的HDFS子目錄爲:warehouse/student/age=15/score=80
分區示例:

create table student(id int,name string) partitioned by (age int)
load data inpath ‘filepath’ into table student partition(age=15)

•External Table 外部表
指向hdfs中已經存在的數據。
與內部表的區別:
1)內部表在load數據的過程中,實際數據會被移動到數據倉庫目錄中。刪除時元數據和數據都會刪除。
2)外部表加載數據時,數據並不會被移動到數據倉庫目錄,只是與外部數據建立一個連接。刪除表時僅刪除元數據和該連接,不會刪除數據。
創建外部表示例:

create external table teacher(id int,name string)
load data inpath ‘filepath’ into table teacher
drop table teacher

•Bucket Table
將表的列通過hash算法分解成不同的文件存儲。
例如:將id分散成20個文件,對id進行hash,對應爲0的寫入/warehouse/student/age=15/score=80/part-0000
示例:

create table student(id int,name string) clustered by (id) into 20 buckets
load date inpath ‘filepath’ into table student
set hive.enforce.bucketing=true

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章