国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ā)展歷史!的評論 (共 條)

分享到微博請遵守國家法律
武胜县| 乌兰浩特市| 全南县| 绥德县| 白银市| 会理县| 广州市| 甘泉县| 蒲江县| 安丘市| 翼城县| 区。| 谢通门县| 永城市| 洪江市| 东方市| 博白县| 绥江县| 太康县| 赫章县| 常山县| 贵南县| 金溪县| 嘉义市| 来凤县| 沾化县| 汝州市| 大田县| 仁布县| 尤溪县| 东乡县| 成武县| 汪清县| 重庆市| 秦皇岛市| 津市市| 遂昌县| 茂名市| 宿迁市| 井研县| 高唐县|