關(guān)注VX:數(shù)據(jù)科學(xué)講堂,領(lǐng)取教程
成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的呼圖壁網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
Hive由FaceBook開發(fā),用于解決海量結(jié)構(gòu)化日志的數(shù)據(jù)統(tǒng)計。
Hive是基于Hadoop的數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化數(shù)據(jù)映射為一張表,提供類似SQL語句查詢功能
本質(zhì):將Hive SQL轉(zhuǎn)化成MapReduce程序。
對變項 | Hive | 數(shù)據(jù)庫軟件 |
---|---|---|
查詢語言 | HQL | SQL |
數(shù)據(jù)存儲 | HDFS | Raw Devce or Loal FS |
執(zhí)行器 | MapReduce | Executor |
數(shù)據(jù)插入 | 支持批量導(dǎo)入/單條插入 | 支持單條或者批量導(dǎo)入 |
數(shù)據(jù)操作 | 覆蓋追加 | 行級更新刪除 |
處理數(shù)據(jù)規(guī)模 | 大 | 小 |
執(zhí)行延遲 | 高 | 低 |
分區(qū) | 支持 | 支持 |
索引 | 0.8版本之后加入了索引 | 支持復(fù)雜的索引 |
擴展性 | 高 | 有限 |
數(shù)據(jù)加載模式 | 讀時模式(快) | 寫時模式(慢) |
應(yīng)用場景 | 海量數(shù)據(jù)查詢 | 實時查詢 |
讀時模式:Hive在加載數(shù)據(jù)到表中的時候不會校驗.
寫時模式:MySQL數(shù)據(jù)庫插入數(shù)據(jù)到表的時候會進行校驗.
總結(jié):Hive只適合用來做海量離線的數(shù)據(jù)統(tǒng)計分析,也就是數(shù)據(jù)倉庫。
優(yōu)點:操作接口采用了類SQL語法,提供快速開發(fā)的能力,避免了去寫MapReduce;Hive還支持用戶自定義函數(shù),用戶可以根據(jù)自己的需求實現(xiàn)自己的函數(shù)。
缺點:Hive不支持紀錄級別的增刪改操作;Hive查詢延遲很嚴重;Hive不支持事務(wù)。
? (1)用戶接口:CLI(hive shell);JDBC(java訪問Hive);WEBUI(瀏覽器訪問Hive)
? (2)元數(shù)據(jù):MetaStore
元數(shù)據(jù)包括:表名、表所屬的數(shù)據(jù)庫(默認是default)、表的擁有者、列/分區(qū)字段,標的類型(表是否為外部表)、表的數(shù)據(jù)所在目錄。這是數(shù)據(jù)默認存儲在Hive自帶的derby數(shù)據(jù)庫中,推薦使用MySQL數(shù)據(jù)庫存儲MetaStore。
(3)Hadoop集群:
使用HDFS進行存儲數(shù)據(jù),使用MapReduce進行計算。
(4)Driver:驅(qū)動器:
解析器(SQL Parser):將SQL字符串換成抽象語法樹AST,對AST進行語法分析,像是表是否存在、字段是否存在、SQL語義是否有誤。
編譯器(Physical Plan):將AST編譯成邏輯執(zhí)行計劃。
優(yōu)化器(Query Optimizer):將邏輯計劃進行優(yōu)化。
執(zhí)行器(Execution):把執(zhí)行計劃轉(zhuǎn)換成可以運行的物理計劃。對于Hive來說默認就是Mapreduce任務(wù)。
通過Hive**對數(shù)據(jù)進行數(shù)據(jù)分析過程**:
需要先啟動hadoop集群和MySQL服務(wù)
cd /opt/bigdata2.7/hive (hive的安裝路徑,根據(jù)自己實際情況改變)
bin/hive
? 可以在命令端口寫上HQL語句:show databases;驗證是否可用。
輸入hiveserver2相當(dāng)于開啟了一個服務(wù)端,查看hivesever2的轉(zhuǎn)態(tài)
輸入netstat –nlp命令查看:
?運行hiveserver2相當(dāng)于開啟了一個服務(wù)端,端口號10000,需要開啟一個客戶端進行通信,所以打開另一個窗口,輸入命令beeline.,Beeline連接方式:!connect jdbc:hive2://node1:10000,主意不要省略!
當(dāng)然了hiveserver2服務(wù)端可以運行在后臺:
nohup hiveserver2 &
類型名稱 | 描述 | 舉例 |
---|---|---|
boolean | True/false | True |
tinyint | 1字節(jié)的有符號整數(shù) | 1 |
Smallint | 2字節(jié)的有符號整數(shù) | 1 |
int | 4字節(jié)的有符號整數(shù) | 1 |
Bigint | 8字節(jié)的有符號整數(shù) | 1 |
Float | 4字節(jié)精度浮點數(shù) | 1.0 |
Double | 8字節(jié)精度浮點數(shù) | 1.0 |
String | 字符串(不設(shè)長度) | “adcadfaf” |
Varchar | 字符串(1-65355) | “adfafdafaf” |
Timestamp | 時間戳 | 123454566 |
date | 日期 | 20160202 |
類型名稱 | 描述 | 舉例 |
---|---|---|
Array | 一組有序的字段,字段類型必須相同的array(元素1,元素2) | Array(1,2,4) |
Map | 一組無序的鍵值對map(k1,v1,k2,v2) | Map(‘a(chǎn)’,1,’b’,2) |
Struct | 一組命名的字段,字段類型可以不同struct(元素1,元素2) | Struct(‘a(chǎn)’,1,2,0) |
? (1)Array字段的元素訪問方式:下標獲取元素,下標從0開始
比如:獲取第一元素:array[0]
(2)Map字段的訪問方式:通過鍵獲取值
比如:獲取a這個key對應(yīng)的value:map[‘a(chǎn)’]
(3)struct字段的元素獲取方式:
定義一個字段c的類型為struct(a int;b string)
獲取a和b的值:
create table complex(
col1 array,
col2 map,
col3 struct
)
? 系統(tǒng)自動實現(xiàn)類型轉(zhuǎn)換,不需要客戶干預(yù)
如:tinyint可以轉(zhuǎn)換成int,int可以轉(zhuǎn)成bigint
所有整數(shù)類型、float、string類型都可以隱式轉(zhuǎn)轉(zhuǎn)換成double
tinyint、samllint、int都可以轉(zhuǎn)成float
boolean不可以轉(zhuǎn)成其他任何類型
? 可以使用cast函數(shù)顯示的進行數(shù)據(jù)類型轉(zhuǎn)換
? 例如:cast(‘1’ as int)把字符串’1’轉(zhuǎn)成整數(shù)1
所有整數(shù)類型、float、string類型都可以隱式轉(zhuǎn)轉(zhuǎn)換成double
tinyint、samllint、int都可以轉(zhuǎn)成float
boolean不可以轉(zhuǎn)成其他任何類型
? 可以使用cast函數(shù)顯示的進行數(shù)據(jù)類型轉(zhuǎn)換
? 例如:cast(‘1’ as int)把字符串’1’轉(zhuǎn)成整數(shù)1
? 如果強制轉(zhuǎn)換類型失敗,如執(zhí)行cast(‘x’ as int)表達式返回NULL。