hive架構介紹、SQL引擎與NoSQL引擎的對比
什麼是hive?
hive構建在hadoop hdfs 上的數據倉庫。
什麼是數據倉庫?
數據倉庫是一個面向主題的,集成的,不可更新的,隨時間不變化的數據集合,
它主要用於支持企業或組織的決策分析處理。
數據倉庫實際上就是一個數據庫,數據倉庫的特點:引入冗餘,分析數據;
數據庫的特點:避免冗餘,捕獲數據。
數據倉庫的構建過程
1、數據源 (業務數據系統、文檔資料、其他數據)
2、數據存儲及管理-ETL (抽取Extract、轉換Transform、裝載Load)
3、數據倉庫引擎 (服務器)
4、前端展示 (數據查詢、數據報表、數據分析、各類應用)
OLTP應用和OLAP應用
1.OLTP(on-line transaction processing) 聯機事務處理
例:銀行轉賬
2.OLAP(on-line analytical processing) 聯機分析處理
例:商品推薦系統
數據倉庫中的數據模型
1、星型模型——強調大範圍的維度,冗餘少
2、雪花模型——強調具體指標,有較多冗餘,用起來方便
什麼是hive
hive是建立在hadoop hdfs 上的數據倉庫基礎架構。
hive可以用來進行數據提取轉化加載(ETL)。
hive提供了簡單的類似SQL的查詢語言(HQL),它允許熟悉SQL的用戶查詢數據。
hive允許熟悉MapReduce的開發者,
開發自定義的mapper和Reducer來處理內建的mapper和reducer無法完成的複雜的分析工作。
hive是SQL引擎,它將SQL語句轉移成M/R job, 然後在Hadoop上執行。
hive表其實就是HDFS的目錄/文件
HIVE的體系結構
hive的體系結構之元數據
hive的元數據
- hive將元數據存儲在數據庫中(metastore),支持mysql、derby等數據庫(mysql、derby、oracle)
- hive中的元數據包括表的名字、表的列和分區及其屬性,表的屬性(是否爲外部表等),表的數據所在目錄等。
hive的體系結構之HQL的執行過程
解釋器、編譯器、優化器完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。
生成的查詢計劃存儲在HDFS中,並在隨後又MapReduce調用生成。
hive的體系結構
hadoop
- 用HDFS進行存儲,利用MapReduce進行計算
元數據存儲 (MetaStore) - 通常是存儲在關係數據庫 mysql,derby等
什麼是SQL引擎?
對關係型數據來說,數據庫引擎 (或“存儲引擎”)是DBMS用於從數據庫增刪查改(CRUD)數據的底層軟件組件。
部署了最基本的數據存取(包括B+樹以及索引)以後,還可以實現一些高級功能。
(1)SQL語言是數據庫通用操作語言,所以需要一個SQL解析器,將SQL命令解析爲對應的ISAM操作。
(2)數據庫連接(join)是指數據庫的兩張表通過"外鍵",建立連接關係。你需要對這種操作進行優化。
(3)數據庫事務(transaction)是指批量進行一系列數據庫操作,只要有一步不成功,整個操作都不成功。所以需要有一個"操作日誌",以便失敗時對操作進行回滾。
(4)備份機制:保存數據庫的副本。
(5)遠程操作:使得用戶可以在不同的機器上,通過TCP/IP協議操作數據庫。
對於非關係型數據,主要在sql解析上區別。對比關係型與非關係型數據庫如下;
SQL與NoSQL的典型引擎和區別
數據庫類型 | SQL | NoSQL |
---|---|---|
舉例 | Oracle、SqlServer、MySQL、PostgreSQL等 | MongoDB、Redis、HBase等 |
存儲結構 | 採用結構化表來存儲數據 | 採用半結構化數據集存儲數據 |
存儲規範化 &存儲代價 | 通過更加規範化邏輯表來避免重複,獲得最精簡的空間,但數據操作往往涉及多個表,數據管理複雜。 | 將數據存儲在數據集中,數據經常可能存儲重複,但數據更容易讀寫。 |
橫向擴容能力 | 較弱 | 較強 |
事務性 &純擴展性 | 非常好的支持事務性 | 不支持或半支持 |
關係型數據庫特徵及適用場景
數據庫 | 特徵 | 適用場景 |
---|---|---|
MySQL | 最廣泛、流行的開源數據庫,支持多插件式存儲引擎、靈活、多平臺,支持水平拆分。 | 支持高併發,簡單的絕大部分 OLTP場景,單實例數量級不易過大,非常適合大規模數據庫場景相對簡單的互聯網行業。 |
SQL Server | 與微軟體系緊密結合的商業關係型數據庫,大多數操作通過圖形界面完成,支持共享存儲方式的數據庫集羣,可通過硬件進行垂直升級。 | 適用於應用端採用微軟體系的大多數 OLTP場景。 |
Oracle | 目前市面上功能最強大、最複雜的商業數據庫,有一套完整監控管理體系,支持多種高可用方案。 | 適用於穩定性、安全性要求非常高的 OLTP場景,如銀行、金融行業。 |
PostgreSQL | 目前功能最強大的開源數據庫,支持多平臺、多種高可用方案,但國內社區活躍度有待進一步增強。易用性介於 mysql與oracle中間。 | 支持絕大多數高併發 OLTP場景,國內大規模應用的案例相對較少,適合作爲oracle與mysql之間的折中方案。 |
關係型數據庫特徵及適用場景
數據庫 | 特徵 | 適用場景 |
---|---|---|
MongoDB | 主流的文檔型 NoSQL數據庫,開源,多平臺。 | 適用於更新迭代快、需求變更多、以對象爲主的網站應用、小文件系統、日誌分析系統等。 |
Redis | 主流的內存數據庫,性能高,穩定性好。 | 適用於對命令響應速度要求高,熱點數據規模小、讀取頻繁的場景。 |
Hbase | 主流的海量列式存儲型 NoSQL數據庫。 | 適用於簡單數據寫入和海量、簡單數據查詢的業務場景,多用於 OLAP場景。 |
hive on
spark及spark on hive,spark sql的區別:sql引擎和計算引擎
Spark-SQL:Spark SQL引擎 + SparkRDD引擎
Hive on Spark:Hive SQL引擎+ SparkRDD引擎
Spark on Hive: Hive SQL引擎+ SparkRDD引擎
Hive on Spark和Spark on Hive之間的SQL和計算引擎是一模一樣的,如果區分?
Hive on Spark 是在Hive中配置Spark,運行方式入口是通過Hive,底層是有第三方的hive on spark中間包自動轉換MR引擎,變爲SparkRDD引擎。
Spark on Hive 是在Spark中配置Hive,運行方式入口是通過Spark,底層通過配置Hive的hive-site.xml,hdfs-site.xml等配置文件來直接操作hive SQL,其實是Hive的語法規則,但是計算還是本身的SparkRDD引擎。
Spark-SQL、Hive on Spark、Spark on Hive使用場景
從計算引擎上來看,三者都是SparkRDD計算引擎。從計算性能上來看,其實不會差非常多,都是取決於SparkRDD計算引擎。
Spark-SQL更多是開發Code中進行計算任務比較多,同時Saprk-SQL可以持久化到庫表中方便第二次使用。
Hive on Spark,常規的數倉查詢任務的,對外接口服務之類的。因爲Hadoop生態羣中的WEBUI界面非常豐富,所以直接通過HiveSQL查詢將會非常方便。
Spark on Hive,使用Spark作爲開發架構的,Hive作爲數倉存儲的場景中使用。
Hive
計算引擎的切換方法
1、配置mapreduce計算引擎
set hive.execution.engine=mr;
2、配置spark計算引擎
set hive.execution.engine=spark;
3、配置tez 計算引擎
set hive.execution.engine=tez;
參考
HIVE入門(概述、hive的體系結構): https://zhuanlan.zhihu.com/p/46210633
從 Hive 遷移到 SparkSQL,有讚的大數據實踐:https://www.infoq.cn/article/I0ogpB7hMY4r4-4dFDDI
Hive計算引擎的切換方法:https://blog.csdn.net/u014236468/article/details/80927783
主流開源SQL引擎總結,不斷改進的Hive始終遙遙領先 :https://www.sohu.com/a/127616590_470008
如何開發一個大數據SQL引擎:
https://geek-docs.com/hive/hive-tutorial/how-to-develop-a-large-data-sql-engine.html
大學生如何實現一個數據庫?:https://www.zhihu.com/question/35382593
數據庫的最簡單實現:
https://www.ruanyifeng.com/blog/2014/07/database_implementation.html
數據庫入門之3張表對比關係型與非關係型數據庫:http://blog.itpub.net/31556022/viewspace-2638924/