瘋狂Java之學習筆記(28)-------------static">瘋狂Java之學習筆記(28)-------------static
740
2025-04-02
Hive相關學習指南
Hive官網:http://hive.apache.org
Hive入門指南:http://wiki.apache.org/hadoop/Hive/GettingStarted
HQL查詢語言指南:http://wiki.apache.org/hadoop/Hive/HiveQL
演示文稿:http://wiki.apache.org/hadoop/Hive/Presentations
第一章 概述
1-1 課程概述
Hive是基于Hadoop HDFS之上的數據倉庫。
數據倉庫:本質上就是一個數據庫。但有別于我們通常意義上的數據庫
Hive安裝有3種方式。
Hadoop和Hive都是基于Linux操作系統構建的,所以要有熟悉掌握Linux下操作命令。
1-2 數據倉庫簡介
①數據倉庫是一個面向主題的、集成的、不可更新的、隨時間不變化的數據集合,它用于支持企業或組織的決策分析處理。
面向主題:主題是指用戶使用數據倉庫時關心的重點內容。
集成的:數據倉庫可將不同類型數據庫管理系統中的數據集成起來保存。
不可更新的:數據倉庫一般只做數據查詢,不做更新、刪除等操作。
②數據倉庫的結構和建立過程:數據源(可能來源于業務數據庫系統、文檔資料和其他數據)——>數據存儲及管理(ETL:抽取、轉換、裝載)——>數據倉庫引擎(不同的服務器有不同的功能)——>前端展示(數據查詢、數據報表、數據分析、各類應用)
OLTP應用:典型應用-銀行轉賬
OLAP應用:典型應用-商品推薦系統
數據倉庫的數據模型:星型模型和雪花模型
1-3 什么是Hive
①Hive是建立在Hadoop HDFS上的數據倉庫基礎架構。而傳統的Oracle或MySQL數據倉庫是直接建立在Oracle或MySQL數據庫之上的。
②Hive可以用來進行數據提取、轉化、加載(ETL)。
③Hive定義了簡單的類似SQL查詢語言,稱為HQL它允許熟悉SQL的用戶查詢數據。
④Hive允許熟悉MapReduce開發者的開發自定義的mapper和reducer來處理內建mapper和reducer無法完成的復雜的分析工作。
⑤Hive的SQL解析引擎,它將SQL語句轉移成M/R Job然后在Hadoop上執行。
⑥Hive的表其實就是HDFS的目錄/文件。
第二章 Hive的體系結構
2-1 Hive的體系結構之元數據
Hive講元數據存儲在數據庫中(metastore),支持mysql、derby、oracle等傳統數據庫,默認為derby。
Hive中元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在的目錄等。
元數據被默認創建在derby數據庫中,以表的形式保存數據。表的元信息、列元信息。
2-2 Hive的體系結構之HQL的執行過程
①解析器、編譯器、優化器完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃(plan)的生成。生成的查詢計劃存儲在HDFS中,并在隨后有MapReduce調用執行。
過程:HQL語句——》解析器:詞法分析——》編譯器:生成HQL的執行計劃——》優化器:生成最優執行計劃——》執行。
②在oracle數據庫中:
執行計劃
explanin plan for select * from emp where deptno10
查詢執行計劃
select * from table(dbms_xplan.display)
全表掃描
創建索引
create index myindex on emp(deptno)
Hive的執行計劃跟上面的oracle的執行計劃類似。
2-3 Hive體系結構
?hadoop
–用HDFS進行存儲,利用mapreduce進行計算。
?元數據存儲(metastroe)
–通常存儲在關系數據庫中,如mysql,derby。
Hive Driver:驅動,包括編譯器、解析器、優化器。
訪問接口:①CLI:Command Line Interface;②通過JDBC/ODBC連接Thrift Server在連接驅動;③Web Console 控制臺(只能查詢)
第三章 Hive的安裝
3-1 Hive的安裝模式
①Apache的hive官網:hive.apache.org中下載hive.
bin.tar包為安裝包
src.tar為源代碼,可用來編譯hive的可執行程序,通過源文件生成打包生成基于web的圖形化管理工具,再部署到hive中,才可使用該圖形化管理工具。
Hive的源碼中集成有WEB UI管理工具, 需要自行編譯發布到Hive環境中. 注意Hive的安裝包中并不會集成WEB U
②安裝hive之前要先安裝hadoop,hadoop可以是單機環境、偽分布環境和集群環境中的一種。
Hive的安裝有三種模式:嵌入模式、本地模式和遠程模式。
1. 嵌入模式: 即使用Hive自帶的Derby數據庫, 將元數據及其信息存儲在Derby數據庫上面, 但有個缺點, Derby在同一時間只能接受一個連接(即只能允許一個人對hive進行操作), 故一般用作演示
2. 本地模式: 將元數據存儲到同一機器中的MySQL數據庫當中, 此模式一般用于開發與測試
3. 遠程模式: 即是本地模式的升級版, 可將Hive的元數據存儲到其它環境(可以是不同操作系統)機器上的MySQL當中.
3-2 Hive安裝之嵌入模式
只需要解壓Hive安裝包, 然后直接執行bin目錄的hive腳本, 便會自動創建一個metastore_db目錄來保存元數據. 注意: 這個metastore_db目錄是自動創建在執行hive時的當前目錄下面, 即在嵌入模式中任意一個目錄下執行hive都會創建此目錄.
1
3-3 Hive安裝之遠程模式和本地模式
遠程配置HIVE;命名hive-site.xml,要配置mysql的url、驅動、用戶名、密碼。
第四章 Hive的管理
4-1 Hive管理之CLI方式
進入CLI方式:
① 直接輸入#/bin/hive的執行程序
②或者輸入#hive –service cli
退出CLI方式:
① quit;
② exit;
常用的CLI的命令:
① 清屏: Ctrl + L 或者 !clear
② 查看數據倉庫中的表: show tables;
③ 查看數據倉庫中內置的函數: show functions;
④ 查看表的結構: desc 表名
⑤ 查看HDFS上的文件: dfs –ls 目錄
dfs –lsr 目錄 (-lsr表示以遞歸的方式查看子目錄)
⑥ 執行操作系統的命令: ! 命令
⑦ 執行HQL語句: 例如select * from **
⑧ 執行SQL的腳本: source SQL文件
⑨ 命令“hive –s”: 進入靜默模式:不產生hive的調試信息(mapreduce過程),只顯示最后的結果。
⑩ hive –e ’HQL語句’ : 不進入hive直接執行HQL.
4-2 Hive管理之web界面方式
啟動web界面方式:
-端口號:9999
-啟動方式:#hive –service hwi &
-通過瀏覽器來訪問:http://
1
2
3
4
5
6
7
8
9
4-3 Hive管理之遠程模式
遠程服務啟動方式:
-端口號:10000
-啟動方式:#hive –service hiveserver & 即啟動了Hive Thrift Server
注意:如果以JDBC或ODBC的程序登錄到hive中操作數據時,必須選用遠程服務啟動方式。
第五章 Hive的數據類型
5-1 基本數據類型
tinyint/smallint/int/bigint : 整數類型
float/double : 浮點數類型
boolean : 布爾類型
string : 字符串類型
5-2 復雜數據類型
Array : 數組類型,由一系列相同數據類型的元素組成。
Map : 集合類型,包含key-value鍵值對,可以通過key來訪問元素。Array與map可以嵌套,比如array
5-3 時間數據類型
時間類型:
- Data : 從hive0.12.0開始支持。
- Timestamp : 從hive0.8.0開始支持。
Data與Timestamp的區別:Data類型描述的是一個特定的日期(不包含時間,即精確到日):YYYY-MM-DD。而Timestamp是相對于linux基準時間的偏移量,其實就是一個長整型數值,例如要獲取系統當前的時間戳可以執行:select unix_timestamp();。 這兩者可以轉換。
第六章 Hive1的數據模型
6-1 Hive的數據存儲
基于HDFS
沒有專門的數據存儲格式,可以用.txt、.csv,默認情況下可以用’\t’作為分隔符
存儲結構主要包括:數據庫、文件、表、視圖。
可以直接加載文本文件(.txt文件等)
創建表時,制定hive數據的列分隔符與行分隔符
表:
- Table 內部表
- Partition 分區表
- External table 外部表
- Bucket table 桶表
視圖
6-2 內部表
內部表(Table)
- 與數據庫中的table 在概念上是類似的。
- 每一個table在hive中都有一個相應的目錄存儲數據。
- 所有的table數據(不包括external table)都保存在這個目錄中。
- 刪除表時,元數據和數據都會被刪除。
如果沒指定保存的位置,則默認保存在user/hive/warehouse中
指定行分隔符:row format delimited fileds terminated by ‘,’;
修改表添加新的一列:alter table t1 add columns(列名 數據類型);
刪除表時:如果開啟了Hadoop的回收站功能,則drop表后會放在.trash,也就是說可以通過一定方式找回刪除的表。
6-3 分區表
分區表(Partition)
- Partition對應于數據庫的Partition列的密集索引。
- 在hive中,表中的一個Partition對應于表下的一個目錄,所有的Partition的數據都存儲在對應的目錄中。
作用:降低掃描的記錄數,提高查詢效率。當數據量很大的時候,我們就很需要創建分區。
可以通過explain語句查看HQL的執行計劃,讀執行計劃STAGE PLANS的方式:從下往上,從右往左讀。
Oracle中也有分區表,五種分區表。
6-4 外部表
外部表(external table)
- 指向已經在HDFS中存在的數據,可以創建Partition。
- 它和內部表在元數據的組織上是相同的,而實際數據的存儲則有較大的差異
- 外部表只有一個過程,加載數據和創建表同時完成,并不會移動到數據倉庫目錄中,只是與外部數據建立一個鏈接。當刪除一個外部表時,僅僅刪除該鏈接。
6-5 桶表
桶表(bucket table)
- 桶表是對數據進行哈希取值,然后放到不同文件中存儲。
作用:減低系統熱塊,提高查詢效率。
create table bucket_table
(id int,name string)
clustered by(name) into 3 buckets //按name進行哈希,哈希到3個表中
row format delimited
fields terminated by ‘\t’;
clustered要在row的前面,否則報錯。
6-6 視圖
視圖(view)
- 視圖是一種虛表(不存數據),是一個邏輯概念;可以跨越多張表。
- 首先視圖是一張表,操作視圖和操作表的方式是一樣的。
- 視圖建立在已有表的基礎上,視圖賴以建立的這些表稱為基表。
- 視圖可以簡化復雜的查詢。
- hive的視圖不存儲數據的,oracle和mysql中的視圖可以存儲數據,稱為物化視圖.
例如:查詢員工信息:員工號,姓名,月薪,年薪,部門名稱。(需要主外鍵關聯員工表和部門表)
create view empinfo
as
select e.empno, e.ename, e.sal, e.sal*12 annlsal, d.dname
from emp e, dept d
where e.deptno = d.deptno;
Hive 大數據
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。