最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一篇文章帶你了解 SparkSQL 的發(fā)展歷史!

2023-03-06 16:36 作者:ingemar-  | 我要投稿

Hive架構(gòu)回顧


1)用戶接口:Client

CLI(command-line interface)、JDBC/ODBC(jdbc 訪問 hive)、WEBUI(瀏覽器訪問 hive)

2)元數(shù)據(jù):Metastore

元數(shù)據(jù)包括:表名、表所屬的數(shù)據(jù)庫(默認是 default)、表的擁有者、列/分區(qū)字段、表的類型(是否是外部表)、表的數(shù)據(jù)所在目錄等;

默認存儲在自帶的 derby 數(shù)據(jù)庫中,推薦使用 MySQL 存儲 Metastore

3)Hadoop

使用 HDFS 進行存儲,使用 MapReduce 進行計算。

4)驅(qū)動器:Driver

5)解析器(SQL Parser

將 SQL 字符串轉(zhuǎn)換成抽象語法樹 AST,這一步一般都用第三方工具庫完成,比如 antlr;

對 AST 進行語法分析,比如表是否存在、字段是否存在、SQL 語義是否有誤。

6)編譯器(Physical Plan)

將 AST 編譯生成邏輯執(zhí)行計劃。

7)優(yōu)化器(Query Optimizer)

對邏輯執(zhí)行計劃進行優(yōu)化。

8)執(zhí)行器(Execution)

把邏輯執(zhí)行計劃轉(zhuǎn)換成可以運行的物理計劃。對于 Hive 來說,就是 MR/Spark。?


HQL 轉(zhuǎn)換為 MR 任務(wù)流程說明

1.進入程序,利用Antlr框架定義HQL的語法規(guī)則,對HQL完成詞法語法解析,將HQL轉(zhuǎn)換為為AST(抽象語法樹)

2.遍歷AST,抽象出查詢的基本組成單元QueryBlock(查詢塊),可以理解為最小的查詢執(zhí)行單元;

3.遍歷QueryBlock,將其轉(zhuǎn)換為OperatorTree(操作樹,也就是邏輯執(zhí)行計劃),可以理解為不可拆分的一個邏輯執(zhí)行單元;

4.使用邏輯優(yōu)化器對OperatorTree(操作樹)進行邏輯優(yōu)化。例如合并不必要的ReduceSinkOperator,減少Shuffle數(shù)據(jù)量;

5.遍歷OperatorTree,轉(zhuǎn)換為TaskTree。也就是翻譯為MR任務(wù)的流程,將邏輯執(zhí)行計劃轉(zhuǎn)換為物理執(zhí)行計劃;

6.使用物理優(yōu)化器對TaskTree進行物理優(yōu)化;

7.生成最終的執(zhí)行計劃,提交任務(wù)到Hadoop集群運行。

可以發(fā)現(xiàn)Hive框架底層就是MapReduce,所以在Hive中執(zhí)行SQL時,往往很慢很慢

Spark出現(xiàn)以后,將HiveQL語句翻譯成基于RDD操作,此時Shark框架誕生了。



前身Shark框架

Shark即Hive on Spark,本質(zhì)上是通過Hive的HQL進行解析,把HQL翻譯成Spark上對應(yīng)的RDD操作,然后通過Hive的Metadata獲取數(shù)據(jù)庫里表的信息,實際為HDFS上的數(shù)據(jù)和文件,最后有Shark獲取并放到Spark上計算。

但是Shark框架更多是對Hive的改造,替換了Hive的物理執(zhí)行引擎,使之有一個較快的處理速度。然而不容忽視的是Shark繼承了大量的Hive代碼,因此給優(yōu)化和維護帶來大量的麻煩。為了更好的發(fā)展,Databricks在2014年7月1日Spark Summit上宣布終止對Shark的開發(fā),將重點放到SparkSQL模塊上。

在許多年前(2012\2013左右)Hive逐步火熱起來, 大片搶占分布式SQL計算市場。

Spark作為通用計算框架, 也不可能放棄這一細分領(lǐng)域。于是, Spark官方模仿Hive推出了Shark框架(Spark 0.9版本)。

Shark框架是幾乎100%模仿Hive, 內(nèi)部的配置項\優(yōu)化項等都是直接模仿而來.不同的在于將執(zhí)行引擎由MapReduce更換為了Spark。

因為Shark框架太模仿Hive, Hive是針對MR優(yōu)化, 很多地方和SparkCore(RDD)水土不服, 最終被放棄。

Spark官方下決心開發(fā)一個自己的分布式SQL引擎 也就是誕生了現(xiàn)在的SparkSQL

SparkSQL模塊主要將以前依賴Hive框架代碼實現(xiàn)的功能自己實現(xiàn),稱為Catalyst引擎。

● 2014年 1.0正式發(fā)布

● 2015年 1.3? 發(fā)布DataFrame數(shù)據(jù)結(jié)構(gòu), 沿用至今

● 2016年 1.6 發(fā)布Dataset數(shù)據(jù)結(jié)構(gòu)(帶泛型的DataFrame), 適用于支持泛型的語言(Java\Scala)

● 2016年 2.0 統(tǒng)一了Dataset 和 DataFrame, 以后只有Dataset了, Python用的DataFrame就是 沒有泛型的Dataset

● 2019年 3.0 發(fā)布, 性能大幅度提升,SparkSQL變化不大


一篇文章帶你了解 SparkSQL 的發(fā)展歷史!的評論 (共 條)

分享到微博請遵守國家法律
龙岩市| 正安县| 泰兴市| 温泉县| 普兰县| 罗定市| 万载县| 弋阳县| 叶城县| 融水| 饶河县| 上林县| 慈溪市| 铜川市| 阳春市| 汤阴县| 溆浦县| 大宁县| 达日县| 五华县| 壶关县| 江永县| 桃园县| 原阳县| 遂溪县| 芷江| 光泽县| 胶南市| 乐安县| 于都县| 萍乡市| 如东县| 江陵县| 南川市| 新竹市| 河曲县| 苏州市| 玉山县| 巴林左旗| 茌平县| 建始县|