數據庫:
主要存放實時產生的數據,和業務應用相關,OLTF(面向事務處理)
數據庫是爲捕獲數據而設計
數據倉庫:
依照分析需求、分析維度和設計指標來進行設計。
數據倉庫存放的是歷史數據,OLAP(面向分析處理)
數據倉庫爲分析數據而設計
數據庫設計應該遵守三大範式,符合業務應用即可,但是不符合分析,數據倉庫不需要遵守三大範式
Hive
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射成一 張數據庫表,並提供類SQL查詢功能。
其實HIVE就是一個SQL解析引擎,它將SQL語句轉譯成M/R JOB然後 在Hadoop執行,來達到快速開發的目的。它的表其實就是一個Hadoop的目錄/文件(HIVE默認表存放路徑一般都是在你工作目錄的hive目錄裏面),按表名做文件夾分開。
- 可以把Hadoop下的原始結構化數據變成Hive中的表
- 可以看成是從SQL到Map-Reduce的映射器
- Hive是爲大數據批量處理而生的,Hive的出現解決了傳統的關係型數據庫 (MySql、Oracle)在大數據處理上的瓶頸
Hive體系結構
Hive運行機制
Hive安裝模式
- 內嵌模式:元數據保持在內嵌的Derby模式,只允許一個會話連接
- 本地獨立模式:在本地安裝Mysql,把元數據放到Mysql內(單用戶模式,只允許一個用戶)
- 遠程模式:元數據放置在遠程的Mysql數據庫(可以有多個客戶端,需要有單獨的服務器管理元數據)
目前實訓是用的是單用戶模式,查看hive配置信息
啓動hive,查看錶(目前是空的),創建一張表,查看錶結構
查看錶的格式信息 desc formatted tablename; 可以看到表數據是存儲的位置
查看hive倉庫中對於剛剛創建的表的管理(TBLS---記錄了表名,表類型,sd-id, COLUMNS----記錄了表的字段)
查看hdfs中存放的表數據
在表中插入一條記錄
可以看出單條插入數據執行效率低,可以使用上傳數據文件實現批量導入數據
1.在hive中load data
2.直接將數據文件放在hdfs默認的存放數據位置
查看數據是否上傳成功
hive語言:HIve_languageManual
SQL語言:
- DDL數據定義語言,(結構相關)創建create,修改alter,刪除drop
- DML數據操作語言,(數據相關)增insert刪delete改update查select
- DCL數據控制語言,(權限相關) grant
創建一個外部表logs,指定存儲位置(默認的位置)
將事先準備好的數據文件上傳到默認指定路徑後,可以從hive查到表數據
進行簡單的數據分析:統計記錄數,可以看到hive先進行解析,之後啓用MR執行處理得到結果
hive有兩種表:內部表(普通表)、外部表(external)
內部表與外部表的區別:
內部表
- 在加載數據的過程中,實際數據會被移動到數據倉庫目錄中 (hive.metastore.warehouse.dir),
- 刪除內部表時,內部表中的數據和元數據信息會被同時刪除。
外部表
- 在加載數據的過程中,實際數據並不會被移動到數據倉庫目錄中,只是與外部表建立一個鏈接(相當於文件的快捷方式一樣);
- 刪除外部表時,僅刪除該鏈接,hive中的元數據被刪除,真實數據不會刪除。
持續更新...