




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
SparkSQL簡(jiǎn)介目錄/Contents01什么是SparkSQL02SparkSQL架構(gòu)什么是SparkSQL01什么是SparkSQLSparkSQL是Spark用來(lái)處理結(jié)構(gòu)化數(shù)據(jù)(結(jié)構(gòu)化數(shù)據(jù)可以來(lái)自外部結(jié)構(gòu)化數(shù)據(jù)源也可以通過(guò)RDD獲?。┑囊粋€(gè)模塊,它提供了一個(gè)編程抽象叫做DataFrame并且作為分布式SQL查詢引擎的作用。外部的結(jié)構(gòu)化數(shù)據(jù)源包括JSON、Parquet(默認(rèn))、RMDBS、Hive等。當(dāng)前SparkSQL使用Catalyst優(yōu)化器來(lái)對(duì)SQL進(jìn)行優(yōu)化,從而得到更加高效的執(zhí)行方案。并且可以將結(jié)果存儲(chǔ)到外部系統(tǒng)。什么是SparkSQLSparkSQL的前身是Shark,Shark最初是美國(guó)加州大學(xué)伯克利分校的實(shí)驗(yàn)室開(kāi)發(fā)的Spark生態(tài)系統(tǒng)的組件之一,它運(yùn)行在Spark系統(tǒng)之上,Shark重用了Hive的工作機(jī)制,并直接繼承了Hive的各個(gè)組件,Shark將SQL語(yǔ)句的轉(zhuǎn)換從MapReduce作業(yè)替換成了Spark作業(yè),雖然這樣提高了計(jì)算效率,但由于Shark過(guò)于依賴(lài)Hive,因此在版本迭代時(shí)很難添加新的優(yōu)化策略,從而限制了Spark的發(fā)展,在2014年,伯克利實(shí)驗(yàn)室停止了對(duì)Shark的維護(hù),轉(zhuǎn)向SparkSQL的開(kāi)發(fā)。SparkSQL主要提供了以下3個(gè)功能。什么是SparkSQL(1)SparkSQL可以從各種結(jié)構(gòu)化數(shù)據(jù)源(如JSON、Hive、Parquet等)中讀取數(shù)據(jù),進(jìn)行數(shù)據(jù)分析。(2)SparkSQL包含行業(yè)標(biāo)準(zhǔn)的JDBC和ODBC連接方式,因此它不局限于在Spark程序內(nèi)使用SQL語(yǔ)句進(jìn)行查詢。(3)SparkSQL可以無(wú)縫地將SQL查詢與Spark程序進(jìn)行結(jié)合,它能夠?qū)⒔Y(jié)構(gòu)化數(shù)據(jù)作為Spark中的分布式數(shù)據(jù)集(RDD)進(jìn)行查詢,在Python、Scala和Java中均集成了相關(guān)API,這種緊密的集成方式能夠輕松地運(yùn)行SQL查詢以及復(fù)雜的分析算法。
SparkSQL架構(gòu)02SparkSQL架構(gòu)SparkSQL架構(gòu)與Hive架構(gòu)相比除了把底層的MapReduce執(zhí)行引擎更改為Spark還修改了Catalyst優(yōu)化器,SparkSQL快速的計(jì)算效率得益于Catalyst優(yōu)化器。從HiveQL被解析成語(yǔ)法抽象樹(shù)起,執(zhí)行計(jì)劃生成和優(yōu)化的工作全部交給SparkSQL的Catalyst優(yōu)化器進(jìn)行負(fù)責(zé)和管理。SparkSQL快速的計(jì)算效益得益于Catalyst優(yōu)化器。從HiveQL被解析成語(yǔ)法抽象樹(shù)起,執(zhí)行計(jì)劃生成和優(yōu)化的工作全部交給SparkSQL的Catalyst優(yōu)化器負(fù)責(zé)和管理。如圖7-1所示為SparkSQL整體架構(gòu)。SparkSQL架構(gòu)Catalyst優(yōu)化器是一個(gè)新的可擴(kuò)展的查詢優(yōu)化器,它是基于Scala函數(shù)式編程結(jié)構(gòu),SparkSQL開(kāi)發(fā)工程師設(shè)計(jì)可擴(kuò)展架構(gòu)主要是為了在今后的版本迭代時(shí),能夠輕松地添加新的優(yōu)化技術(shù)和功能,尤其是為了解決大數(shù)據(jù)生產(chǎn)環(huán)境中遇到的問(wèn)題(例如,針對(duì)半結(jié)構(gòu)化數(shù)據(jù)和高級(jí)數(shù)據(jù)分析),另外,Spark作為開(kāi)源項(xiàng)目,外部開(kāi)發(fā)人員可以針對(duì)項(xiàng)目需求自行擴(kuò)展Catalyst優(yōu)化器的功能。SparkSQL架構(gòu)Catalyst主要的實(shí)現(xiàn)組件介紹如下。1、sqlParse:完成sql語(yǔ)句的語(yǔ)法解析功能,目前只提供了一個(gè)簡(jiǎn)單的sql解析器;2、Analyzer:主要完成綁定工作,將不同來(lái)源的UnresolvedLogicalPlan和數(shù)據(jù)元數(shù)據(jù)(如hivemetastore、Schemacatalog)進(jìn)行綁定,生成resolvedLogicalPlan;3、Optimizer:對(duì)resolvedLogicalPlan進(jìn)行優(yōu)化,生成optimizedLogicalPlan;4、Planner:將LogicalPlan轉(zhuǎn)換成PhysicalPlan;5、CostModel:主要根據(jù)過(guò)去的性能統(tǒng)計(jì)數(shù)據(jù),選擇最佳的物理執(zhí)行計(jì)劃Spark作為開(kāi)源項(xiàng)目,外部開(kāi)發(fā)人員可以針對(duì)項(xiàng)目需求自行擴(kuò)展Catalyst優(yōu)化器的功能。如圖7-2所示為SparkSQL的運(yùn)行架構(gòu)。SparkSQL架構(gòu)如上圖所示,SparkSQL的工作流程可以分為如下幾步:(1)使用SessionCatalog保存元數(shù)據(jù)在解析SQL語(yǔ)句之前,會(huì)創(chuàng)建SparkSession,或者如果是2.0之前的版本初始化SQLContext,SparkSession只是封裝了SparkContext和SQLContext的創(chuàng)建而已。會(huì)把元數(shù)據(jù)保存在SessionCatalog中,涉及到表名,字段名稱(chēng)和字段類(lèi)型。創(chuàng)建臨時(shí)表或者視圖,其實(shí)就會(huì)往SessionCatalog注冊(cè)。(2)解析SQL使用ANTLR生成未綁定的邏輯計(jì)劃當(dāng)調(diào)用SparkSession的SQL或者SQLContext的SQL方法,我們以2.0為準(zhǔn),就會(huì)使用SparkSqlParser進(jìn)行解析SQL。使用的ANTLR進(jìn)行詞法解析和語(yǔ)法解析。它分為2個(gè)步驟來(lái)生成UnresolvedLogicalPlan:詞法分析:LexicalAnalysis,負(fù)責(zé)將token分組成符號(hào)類(lèi)。構(gòu)建一個(gè)分析樹(shù)或者語(yǔ)法樹(shù)AST。(3)使用分析器Analyzer綁定邏輯計(jì)劃在該階段,Analyzer會(huì)使用AnalyzerRules,并結(jié)合SessionCatalog,對(duì)未綁定的邏輯計(jì)劃進(jìn)行解析,生成已綁定的邏輯計(jì)劃。SparkSQL架構(gòu)(4)使用優(yōu)化器Optimizer優(yōu)化邏輯計(jì)劃優(yōu)化器也是會(huì)定義一套R(shí)ules,利用這些Rule對(duì)邏輯計(jì)劃和Exepression進(jìn)行迭代處理,從而使得樹(shù)的節(jié)點(diǎn)進(jìn)行合并和優(yōu)化。(5)使用SparkPlanner生成物理計(jì)劃SparkSpanner使用PlanningStrategies,對(duì)優(yōu)化后的邏輯計(jì)劃進(jìn)行轉(zhuǎn)換,生成可以執(zhí)行的物理計(jì)劃SparkPlan.(6)使用QueryExecution執(zhí)行物理計(jì)劃此時(shí)調(diào)用SparkPlan的execute方法,底層其實(shí)已經(jīng)再觸發(fā)job了,然后返回RDD。感謝大家的聆聽(tīng)DataFrames目錄/Contents01DataFrames創(chuàng)建02操作DataFrames03RDD轉(zhuǎn)換為DataFramesDataFrames創(chuàng)建01DataFrames創(chuàng)建在Spark2.0版本之前,SparkSQL中的SQLContext是創(chuàng)建DataFrame和執(zhí)行SQL的入口,可以利用HiveContext接口,通過(guò)HiveQL語(yǔ)句操作Hive表數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)查詢功能。從Spark2.0版本以上開(kāi)始,Spark使用全新的SparkSession接口替代SQLContext及HiveContext接口來(lái)實(shí)現(xiàn)對(duì)其數(shù)據(jù)加載、轉(zhuǎn)換、處理等功能。DataFrames創(chuàng)建1.?dāng)?shù)據(jù)準(zhǔn)備2.通過(guò)文件創(chuàng)建DataFrame3.RDD轉(zhuǎn)換為DataFrame操作DataFrames02操作DataFramesDataFrame提供了兩種語(yǔ)法風(fēng)格,即DSL風(fēng)格語(yǔ)法和SQL風(fēng)格語(yǔ)法,兩者在功能上并無(wú)區(qū)別,僅僅是根據(jù)用戶習(xí)慣,自定義選擇操作方式。DSL風(fēng)格2.SQL風(fēng)格RDD轉(zhuǎn)換為DataFrames03RDD轉(zhuǎn)換為DataFramesSparkSQL支持兩種不同的方式轉(zhuǎn)換已經(jīng)存在的RDD到DataFrame。第一種方式,是使用反射來(lái)推斷包含了特定數(shù)據(jù)類(lèi)型的RDD的元數(shù)據(jù)。這種基于反射的方式,代碼比較簡(jiǎn)潔,當(dāng)你已經(jīng)知道你的RDD的元數(shù)據(jù)時(shí),是一種非常不錯(cuò)的方式。這個(gè)方式簡(jiǎn)單,但是不建議使用,因?yàn)樵诠ぷ鳟?dāng)中,使用這種方式是有限制的。感謝大家的聆聽(tīng)SparkSQL多數(shù)據(jù)源操作目錄/Contents01
MySQL數(shù)據(jù)源操作02Hive數(shù)據(jù)源操作MySQL數(shù)據(jù)源操作01MySQL數(shù)據(jù)源操作SparkSQL可以通過(guò)JDBC從關(guān)系數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)創(chuàng)建DataFrame,通過(guò)對(duì)DataFrame進(jìn)行一系列操作后,還可以將數(shù)據(jù)重新寫(xiě)入關(guān)系數(shù)據(jù)庫(kù)中,當(dāng)使用JDBC訪問(wèn)其它數(shù)據(jù)庫(kù)時(shí),應(yīng)該首選JDBCRDD。這是因?yàn)榻Y(jié)果是以數(shù)據(jù)框(DataFrame)返回的,且這樣SparkSQL操作輕松或便于連接其它數(shù)據(jù)源。MySQL數(shù)據(jù)源操作1.讀取MySQL數(shù)據(jù)庫(kù)通過(guò)navicat或者SQLyog工具遠(yuǎn)程連接master節(jié)點(diǎn)的MySQL服務(wù),利用可視化界面創(chuàng)建名為spark_sql的數(shù)據(jù)庫(kù),并創(chuàng)建person表,向表中添加數(shù)據(jù)。2.向MySQL中寫(xiě)入數(shù)據(jù)SparkSQL不僅可以查詢MySQL中的數(shù)據(jù),還可以將數(shù)據(jù)寫(xiě)入MySQL中。Hive數(shù)據(jù)源操作02Hive數(shù)據(jù)源操作1.環(huán)境準(zhǔn)備Hive采用MySQL數(shù)據(jù)庫(kù)存放Hive元數(shù)據(jù),為了能夠讓Spark訪問(wèn)Hive,需要將MySQL驅(qū)動(dòng)包復(fù)制到Spark安裝路徑下的jars目錄下。2.創(chuàng)建數(shù)據(jù)庫(kù)與表配置完成后啟動(dòng)hive創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)庫(kù)與表。SparkSQL支持對(duì)Hive中存儲(chǔ)的數(shù)據(jù)進(jìn)行讀寫(xiě)。下面介紹通過(guò)SparkSQL操作Hive數(shù)據(jù)倉(cāng)庫(kù)的具體步驟。Hive數(shù)據(jù)源操作3.SparkSQL操作Hive數(shù)據(jù)庫(kù)執(zhí)行Spark-Shell,首先進(jìn)入sparksql數(shù)據(jù)庫(kù),查看當(dāng)前數(shù)據(jù)倉(cāng)庫(kù)中是否有person表。4.向表中插入數(shù)據(jù)在插入數(shù)據(jù)之前先查看表中的數(shù)據(jù)。感謝大家的聆聽(tīng)SparkSQL應(yīng)用案例目錄/Contents01SparkSQL實(shí)現(xiàn)單詞統(tǒng)計(jì)02電影數(shù)據(jù)分析SparkSQL實(shí)現(xiàn)單詞統(tǒng)計(jì)01SparkSQL實(shí)現(xiàn)單詞統(tǒng)計(jì)(1)實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)主要介紹在IDEA中開(kāi)發(fā)SparkSQL案例-WordCount,以SQL和DSL兩種方式實(shí)現(xiàn)。(2)實(shí)驗(yàn)?zāi)康氖煜parkSQL的SQL和DSL的使用方法和區(qū)別(3)實(shí)驗(yàn)步驟步驟1SQL方式實(shí)現(xiàn)WordCount步驟2DSL方式實(shí)現(xiàn)WordCount(4)步驟1SQL方式實(shí)現(xiàn)WordCo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 天然大理石方石行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 2025-2030雨幕立面行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030阿普唑侖粉行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030防曬用品項(xiàng)目可行性研究報(bào)告
- 2025-2030鐵路器材產(chǎn)業(yè)規(guī)劃及發(fā)展研究報(bào)告
- 2025-2030造紙及紙制品行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及競(jìng)爭(zhēng)格局與投資價(jià)值研究報(bào)告
- 九年級(jí)化學(xué)下冊(cè) 第7單元 常見(jiàn)的酸和堿 第1節(jié) 酸及其性質(zhì) 第1課時(shí) 常見(jiàn)的酸教學(xué)設(shè)計(jì) (新版)魯教版
- 醫(yī)療器械供應(yīng)鏈管理計(jì)劃
- 書(shū)法社團(tuán)成員招募計(jì)劃
- 2025年湘少版英語(yǔ)五年級(jí)上冊(cè)學(xué)習(xí)評(píng)估計(jì)劃
- 本科大學(xué)生勞動(dòng)教育理論與實(shí)踐教程第三章 教學(xué)課件
- 近代以來(lái)廣州外貿(mào)產(chǎn)業(yè)的發(fā)展歷程
- 29《馬說(shuō)》2022中考語(yǔ)文文言文閱讀復(fù)習(xí)精選真題匯編(原卷版+解析版)
- DBJ04-T 410-2021城市停車(chē)場(chǎng)(庫(kù))設(shè)施配置標(biāo)準(zhǔn)
- 車(chē)站主體結(jié)構(gòu)模板支架專(zhuān)項(xiàng)施工方案--終稿(專(zhuān)家意見(jiàn)修改的)-副本
- 景觀環(huán)境與行為特征
- 保潔崗位培訓(xùn)
- 小學(xué)美術(shù)國(guó)測(cè)(國(guó)家義務(wù)教育質(zhì)量監(jiān)測(cè))復(fù)習(xí)內(nèi)容
- 麗聲北極星自然拼讀繪本第二級(jí) Pad, Pad, Pad! 課件
- meta分析范文展示
- 110kV升壓站電氣設(shè)備調(diào)試方案
評(píng)論
0/150
提交評(píng)論