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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章