文章目錄
- 1.Hive介紹
-
- 1.1 Hive是什麼
- 1.2 Hive産生背景
- 1.3 使用Hive的好處
- 1.4 Hive的架構
- 1.5 Hive的資料結構
- 2.Hive的部署
-
- 2.1 下載下傳并安裝
- 2.2 配置Hive到環境變量
- 2.3 修改配置檔案
- 3.Hive的操作
-
- 3.1 資料庫操作
- 3.2 表操作
- 3.3 資料的操作
-
- 3.3.1 導入資料
-
- 3.3.1.1 LOAD
- 3.3.1.1 Insert
- 3.3.2 導出資料
- 3.3.3 簡單查詢
- 3.3.4 複雜查詢
- 3.3.4 執行計劃
- 3.4 外部表和内部表的差別
1.Hive介紹
1.1 Hive是什麼
- 由 Facebook 實作并開源
- Hive 是在 Hadoop 分布式檔案系統 (HDFS) 之上開發的 ETL 和資料倉庫工具
- Hive 提供寫 SQL 的方式對存儲在 Hadoop 叢集裡面的資料進行清洗、加工,生成新的資料并存儲到 Hadoop 叢集當中
- Hive隻是個用戶端,不涉及叢集的概念
1.2 Hive産生背景
-
Mapreduce 程式設計不友善
沒學過java的怎麼辦?運作Mapreduce程式也很麻煩,打包運作等等,Hive實作同樣的功能就更容易
-
傳統關系型資料庫人員的需求
他們sql寫的很好,大資料如果用不上sql,豈不很可惜,基于 SQL 的資料開發方式,讓 Hive 成為了大資料處理領域最重要的一項技術,對于大資料開發技術來說,SQL 是一等公民
1.3 使用Hive的好處
-
簡單,容易上手
寫sql的方式實作,并且文法和sql類似
-
統一進制資料管理
Hive是基于Hadoop的,是以資料都是用HDFS存儲的,都是一行一行的字元串,沒有關系型資料庫的表,列啊,字段類型之類的中繼資料概念。Hive會有這些中繼資料,并且把它們存儲在Mysql中
-
底層支援多種執行引擎
Mapreduce,Tez,Spark。可以讓Hive sql 語句運作在不同的模式中,比如離線線上
1.4 Hive的架構
Hive 主要由三個部分組成:Clients(用戶端)、Serverices(服務)、Storage and compute(存儲和計算)
- Clients(用戶端):Hive 為與不同類型的應用程式的通信提供了不同的驅動程式。Hive clinets 可以支援 Thrift、JDBC、ODBC 協定與 Hive services 進行通信
- Serverices(服務):Clients 與 Hive 的互動通過 Hive Services 執行。CLI 是指令行界面,充當 DDL(資料定義語言)操作的 Hive 服務。Serverices 核心的子產品是 Driver(驅動程式)
- Hive Services、CLI、Hive web Interface 都通過 Driver(驅動程式)對中繼資料、檔案系統進行計算和處理
- Storage and compute(存儲和計算):Hive 的中繼資料存儲在中繼資料資料庫中,中繼資料資料庫支援 Mysql 等多種類型。Hive 的查詢結果和資料存儲在 Hadoop 中
-
1.5 Hive的資料結構
Hive 的存儲結構包括資料庫、表、視圖、分區和表資料
- database:在 HDFS 中表現為 ${hive.metastore.warehouse.dir} 目錄下一個檔案夾
- table:在 HDFS 中表現所屬 database 目錄下一個檔案夾
- external table:與 table 類似,不過其資料存放位置可以指定任意 HDFS 目錄路徑
- partition:在 HDFS 中表現為 table 目錄下的子目錄
- bucket:在 HDFS 中表現為同一個表目錄或者分區目錄下根據某個字段的值進行 hash 散列之後的多個檔案
- view:與傳統資料庫類似,隻讀,基于基本表建立
2.Hive的部署
Hive的中繼資料管理依賴Mysql資料,是以得提前安裝一個Mysql
2.1 下載下傳并安裝
Hive隻是個用戶端,是以得有安裝包,下載下傳需要的版本的Hive安裝包
解壓并指定目錄
tar -zxvf hive-1.1.0-cdh5.15.1.tar.gz -C ~/app/
2.2 配置Hive到環境變量
vi ~/.bash_profile
2.3 修改配置檔案
-
hive-env.sh
主要配置了Hadoop目錄,如果Hadoop也加入了環境變量,那麼不用修改這個配置檔案
-
hive-site.xml
主要配置了Mysql的資訊,copy mysql的驅動到Hive的lib檔案夾下。
從上到下分别是資料庫名,驅動名,資料庫使用者名和密碼
3.Hive的操作
Hive文檔連結:https://cwiki.apache.org/confluence/display/Hive
3.1 資料庫操作
Hive Data Definition Language
DDL 說明文檔連結:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
對資料的建立,修改,删除,檢視,文檔上寫的比較詳細,直接看官方文檔就行了
- 指令視窗顯示目前是哪個資料庫
set hive.cli.print.current.db=true
- 清屏
3.2 表操作
增删查改也可以看官方文檔,建表示例:
CREATE TABLE emp(
empno int COMMENT '員工編号',
ename string COMMENT '員工名稱',
job string COMMENT '工作崗位',
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
COMMENT '員工資訊表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
常用指令:
- 檢視表 show tables;
- 檢視表資訊 desc emp
- 檢視表資訊-詳情 desc extended emp;
- 檢視表資訊-格式化的詳情 desc formatted emp;
- 向表裡加載資料 LOAD DATA LOCAL INPATH ‘/home/hadoop/data/emp.txt’ OVERWRITE INTO TABLE emp;
- 修改表名 alter table car rename to car_new;
- 增加一個字段 alter table car add columns (count int);
- 修改一個字段的定義 alter table car change name name_new string;
- 添加一個分區 alter table car add partition(name=“benchi”);
3.3 資料的操作
文檔位址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML
3.3.1 導入資料
3.3.1.1 LOAD
LOCAL:本地系統,如果沒有local那麼就是指的HDFS的路徑
OVERWRITE:是否資料覆寫,如果沒有那麼就是資料追加
3.3.1.1 Insert
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 …) [IF NOT EXISTS]] select_statement1 FROM from_statement;
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 …)] select_statement1 FROM from_statement;
3.3.2 導出資料
3.3.3 簡單查詢
完全類似于 sql語句
3.3.4 複雜查詢
函數,分組,聚合,join 也完全類似于 sql語句
3.3.4 執行計劃
展示Hql語句執行的過程
EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query
3.4 外部表和内部表的差別
-
MANAGED_TABLE,内部表
删除表:HDFS上的資料被删除 & Meta也被删除
-
EXTERNAL_TABLE,外部表
HDFS上的資料不被删除 & Meta被删除