![Spark入門基礎實戰(zhàn)系列_第1頁](http://file4.renrendoc.com/view/e718373bcd2022af0b93d742aa0647ac/e718373bcd2022af0b93d742aa0647ac1.gif)
![Spark入門基礎實戰(zhàn)系列_第2頁](http://file4.renrendoc.com/view/e718373bcd2022af0b93d742aa0647ac/e718373bcd2022af0b93d742aa0647ac2.gif)
![Spark入門基礎實戰(zhàn)系列_第3頁](http://file4.renrendoc.com/view/e718373bcd2022af0b93d742aa0647ac/e718373bcd2022af0b93d742aa0647ac3.gif)
![Spark入門基礎實戰(zhàn)系列_第4頁](http://file4.renrendoc.com/view/e718373bcd2022af0b93d742aa0647ac/e718373bcd2022af0b93d742aa0647ac4.gif)
![Spark入門基礎實戰(zhàn)系列_第5頁](http://file4.renrendoc.com/view/e718373bcd2022af0b93d742aa0647ac/e718373bcd2022af0b93d742aa0647ac5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
.-Spark入門實戰(zhàn)系列--6.SparkSQL(上)--SparkSQL簡介【注】該系列文章以及使用到安裝包/測試數(shù)據(jù)可以在《傾情大奉送--Spark入門實戰(zhàn)系列》獲取精品文檔放心下載1、SparkSQL的發(fā)展歷程1.1HiveandSharkSparkSQL的前身是Shark,給熟悉RDBMS但又不理解MapReduce的技術(shù)人員提供快謝謝閱讀速上手的工具,Hive應運而生,它是當時唯一運行在Hadoop上的SQL-on-Hadoop工具。謝謝閱讀但是MapReduce計算過程中大量的中間磁盤落地過程消耗了大量的I/O,降低的運行效率,為謝謝閱讀了提高SQL-on-Hadoop的效率,大量的SQL-on-Hadoop工具開始產(chǎn)生,其中表現(xiàn)較為突出感謝閱讀的是:MapR的DrillCloudera的ImpalaShark其中Shark是伯克利實驗室Spark生態(tài)環(huán)境的組件之一,它修改了下圖所示的右下角的內(nèi)精品文檔放心下載存管理、物理計劃、執(zhí)行三個模塊,并使之能運行在Spark引擎上,從而使得SQL查詢的速度感謝閱讀得到10-100倍的提升。1.2Shark和SparkSQL.-但是,隨著Spark的發(fā)展,對于野心勃勃的Spark團隊來說,Shark對于Hive的太多依感謝閱讀賴(如采用Hive的語法解析器、查詢優(yōu)化器等等),制約了Spark的OneStackRuleThemAll感謝閱讀的既定方針,制約了Spark各個組件的相互集成,所以提出了SparkSQL項目。SparkSQL拋感謝閱讀棄原有Shark的代碼,汲取了Shark的一些優(yōu)點,如內(nèi)存列存儲(In-MemoryColumnar感謝閱讀Storage)、Hive兼容性等,重新開發(fā)了SparkSQL代碼;由于擺脫了對Hive的依賴性,SparkSQL感謝閱讀無論在數(shù)據(jù)兼容、性能優(yōu)化、組件擴展方面都得到了極大的方便,真可謂“退一步,海闊天空”。謝謝閱讀數(shù)據(jù)兼容方面不但兼容Hive,還可以從RDD、parquet文件、JSON文件中獲取數(shù)據(jù),謝謝閱讀未來版本甚至支持獲取RDBMS數(shù)據(jù)以及cassandra等NOSQL數(shù)據(jù);感謝閱讀性能優(yōu)化方面除了采取In-MemoryColumnarStorage、byte-codegeneration等優(yōu)感謝閱讀化技術(shù)外、將會引進CostModel對查詢進行動態(tài)評估、獲取最佳物理計劃等等;感謝閱讀組件擴展方面無論是SQL的語法解析器、分析器還是優(yōu)化器都可以重新定義,進行擴展。感謝閱讀2014年6月1日Shark項目和SparkSQL項目的主持人ReynoldXin宣布:停止對Shark感謝閱讀的開發(fā),團隊將所有資源放SparkSQL項目上,至此,Shark的發(fā)展畫上了句話,但也因此發(fā)展感謝閱讀出兩個直線:SparkSQL和HiveonSpark。精品文檔放心下載.-其中SparkSQL作為Spark生態(tài)的一員繼續(xù)發(fā)展,而不再受限于Hive,只是兼容Hive;謝謝閱讀而HiveonSpark是一個Hive的發(fā)展計劃,該計劃將Spark作為Hive的底層引擎之一,也就謝謝閱讀是說,Hive將不再受限于一個引擎,可以采用Map-Reduce、Tez、Spark等引擎。感謝閱讀1.3SparkSQL的性能Shark的出現(xiàn),使得SQL-on-Hadoop的性能比Hive有了10-100倍的提高:精品文檔放心下載那么,擺脫了Hive的限制,SparkSQL的性能又有怎么樣的表現(xiàn)呢?雖然沒有Shark相對于感謝閱讀Hive那樣矚目地性能提升,但也表現(xiàn)得非常優(yōu)異:.-為什么SparkSQL的性能會得到怎么大的提升呢?主要SparkSQL在下面幾點做了優(yōu)化:精品文檔放心下載A:內(nèi)存列存儲(In-MemoryColumnarStorage)精品文檔放心下載SparkSQL的表數(shù)據(jù)在內(nèi)存中存儲不是采用原生態(tài)的JVM對象存儲方式,而是采用內(nèi)存列存儲,精品文檔放心下載如下圖所示。該存儲方式無論在空間占用量和讀取吞吐率上都占有很大優(yōu)勢。謝謝閱讀對于原生態(tài)的JVM對象存儲方式,每個對象通常要增加12-16字節(jié)的額外開銷,對于一個精品文檔放心下載270MB的TPC-Hlineitemtable數(shù)據(jù),使用這種方式讀入內(nèi)存,要使用970MB左右的內(nèi)存空精品文檔放心下載間(通常是2~5倍于原生數(shù)據(jù)空間);另外,使用這種方式,每個數(shù)據(jù)記錄產(chǎn)生一個JVM對謝謝閱讀象,如果是大小為200B的數(shù)據(jù)記錄,32G的堆棧將產(chǎn)生1.6億個對象,這么多的對象,對于精品文檔放心下載GC來說,可能要消耗幾分鐘的時間來處理(JVM的垃圾收集時間與堆棧中的對象數(shù)量呈線性相謝謝閱讀關(guān))。顯然這種內(nèi)存存儲方式對于基于內(nèi)存計算的Spark來說,很昂貴也負擔不起。精品文檔放心下載對于內(nèi)存列存儲來說,將所有原生數(shù)據(jù)類型的列采用原生數(shù)組來存儲,將Hive支持的復雜數(shù)據(jù)感謝閱讀類型(如array、map等)先序化后并接成一個字節(jié)數(shù)組來存儲。這樣,每個列創(chuàng)建一個JVM感謝閱讀對象,從而導致可以快速的GC和緊湊的數(shù)據(jù)存儲;額外的,還可以使用低廉CPU開銷的高效感謝閱讀壓縮方法(如字典編碼、行長度編碼等壓縮方法)降低內(nèi)存開銷;更有趣的是,對于分析查詢中感謝閱讀頻繁使用的聚合特定列,性能會得到很大的提高,原因就是這些列的數(shù)據(jù)放在一起,更容易讀入感謝閱讀內(nèi)存進行計算。B:字節(jié)碼生成技術(shù)(bytecodegeneration,即CG)精品文檔放心下載.-在數(shù)據(jù)庫查詢中有一個昂貴的操作是查詢語句中的表達式,主要是由于JVM的內(nèi)存模型引起的。感謝閱讀比如如下一個查詢:SELECTa+bFROMtable在這個查詢里,如果采用通用的SQL語法途徑去處理,會先生成一個表達式樹(有兩個節(jié)點的感謝閱讀Add樹,參考后面章節(jié)),在物理處理這個表達式樹的時候,將會如圖所示的7個步驟:感謝閱讀調(diào)用虛函數(shù)Add.eval(),需要確認Add兩邊的數(shù)據(jù)類型謝謝閱讀調(diào)用虛函數(shù)a.eval(),需要確認a的數(shù)據(jù)類型謝謝閱讀確定a的數(shù)據(jù)類型是Int,裝箱調(diào)用虛函數(shù)b.eval(),需要確認b的數(shù)據(jù)類型謝謝閱讀確定b的數(shù)據(jù)類型是Int,裝箱調(diào)用Int類型的Add返回裝箱后的計算結(jié)果其中多次涉及到虛函數(shù)的調(diào)用,虛函數(shù)的調(diào)用會打斷CPU的正常流水線處理,減緩執(zhí)行。謝謝閱讀Spark1.1.0在catalyst模塊的expressions增加了codegen模塊,如果使用動態(tài)字節(jié)碼生成精品文檔放心下載技術(shù)(配置spark.sql.codegen參數(shù)),SparkSQL在執(zhí)行物理計劃的時候,對匹配的表達式采感謝閱讀用特定的代碼,動態(tài)編譯,然后運行。如上例子,匹配到Add方法:謝謝閱讀然后,通過調(diào)用,最終調(diào)用:.-最終實現(xiàn)效果類似如下偽代碼:vala:Int=inputRow.getInt(0)精品文檔放心下載valb:Int=inputRow.getInt(1)感謝閱讀valresult:Int=a+bresultRow.setInt(0,result)精品文檔放心下載對于Spark1.1.0,對SQL表達式都作了CG優(yōu)化,具體可以參看codegen模塊。CG優(yōu)化的實感謝閱讀現(xiàn)主要還是依靠scala2.10的運行時放射機制(runtimereflection)。對于SQL查詢的CG優(yōu)精品文檔放心下載化,可以簡單地用下圖來表示:.-C:Scala代碼優(yōu)化另外,SparkSQL在使用Scala編寫代碼的時候,盡量避免低效的、容易GC的代碼;盡管增加感謝閱讀了編寫代碼的難度,但對于用戶來說,還是使用統(tǒng)一的接口,沒受到使用上的困難。下圖是一個謝謝閱讀Scala代碼優(yōu)化的示意圖:2、SparkSQL運行架構(gòu).-類似于關(guān)系型數(shù)據(jù)庫,SparkSQL也是語句也是由Projection(a1,a2,a3)、DataSource精品文檔放心下載(tableA)、Filter(condition)組成,分別對應sql查詢過程中的Result、DataSource、謝謝閱讀Operation,也就是說SQL語句按Result-->DataSource-->Operation的次序來描述的。感謝閱讀當執(zhí)行SparkSQL語句的順序為:1.對讀入的SQL語句進行解析(Parse),分辨出SQL語句中哪些詞是關(guān)鍵詞(如SELECT、FROM、謝謝閱讀WHERE),哪些是表達式、哪些是Projection、哪些是DataSource等,從而判斷SQL謝謝閱讀語句是否規(guī)范;2.將SQL語句和數(shù)據(jù)庫的數(shù)據(jù)字典(列、表、視圖等等)進行綁定(Bind),如果相關(guān)的Projection、精品文檔放心下載DataSource等都是存在的話,就表示這個SQL語句是可以執(zhí)行的;精品文檔放心下載3.一般的數(shù)據(jù)庫會提供幾個執(zhí)行計劃,這些計劃一般都有運行統(tǒng)計數(shù)據(jù),數(shù)據(jù)庫會在這些計劃中精品文檔放心下載選擇一個最優(yōu)計劃(Optimize);4.計劃執(zhí)行(Execute),按Operation-->DataSource-->Result的次序來進行的,在執(zhí)行過感謝閱讀程有時候甚至不需要讀取物理表就可以返回結(jié)果,比如重新運行剛運行過的SQL語句,可感謝閱讀能直接從數(shù)據(jù)庫的緩沖池中獲取返回結(jié)果。.-2.1Tree和RuleSparkSQL對SQL語句的處理和關(guān)系型數(shù)據(jù)庫對SQL語句的處理采用了類似的方法,首先感謝閱讀會將SQL語句進行解析(Parse),然后形成一個Tree,在后續(xù)的如綁定、優(yōu)化等處理過程都感謝閱讀是對Tree的操作,而操作的方法是采用Rule,通過模式匹配,對不同類型的節(jié)點采用不同的操感謝閱讀作。在整個sql語句的處理過程中,Tree和Rule相互配合,完成了解析、綁定(在SparkSQL謝謝閱讀中稱為Analysis)、優(yōu)化、物理計劃等過程,最終生成可以執(zhí)行的物理計劃。感謝閱讀2.1.1TreeTree的相關(guān)代碼定義在sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees感謝閱讀LogicalPlans、Expressions、PhysicalOperators都可以使用Tree表示精品文檔放心下載Tree的具體操作是通過TreeNode來實現(xiàn)的謝謝閱讀?SparkSQL定義了catalyst.trees的日志,通過這個日志可以形象的表示出樹的結(jié)構(gòu)感謝閱讀?TreeNode可以使用scala的集合操作方法(如foreach,map,flatMap,collect等)進感謝閱讀行操作?有了TreeNode,通過Tree中各個TreeNode之間的關(guān)系,可以對Tree進行遍歷操作,感謝閱讀如使用transformDown、transformUp將Rule應用到給定的樹段,然后用結(jié)果替代精品文檔放心下載舊的樹段;也可以使用transformChildrenDown、transformChildrenUp對一個給感謝閱讀定的節(jié)點進行操作,通過迭代將Rule應用到該節(jié)點以及子節(jié)點。謝謝閱讀TreeNode可以細分成三種類型的Node:?UnaryNode一元節(jié)點,即只有一個子節(jié)點。如Limit、Filter操作謝謝閱讀?BinaryNode二元節(jié)點,即有左右子節(jié)點的二叉節(jié)點。如Jion、Union操作感謝閱讀?LeafNode葉子節(jié)點,沒有子節(jié)點的節(jié)點。主要用戶命令類操作,如SetCommand感謝閱讀.-2.1.2RuleRule的相關(guān)代碼定義在sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/rules感謝閱讀Rule在SparkSQL的Analyzer、Optimizer、SparkPlan等各個組件中都有應用到謝謝閱讀Rule是一個抽象類,具體的Rule實現(xiàn)是通過RuleExecutor完成精品文檔放心下載Rule通過定義batch和batchs,可以簡便的、模塊化地對Tree進行transform操作精品文檔放心下載Rule通過定義Once和FixedPoint,可以對Tree進行一次操作或多次操作(如對某些Tree進行多次迭代操作的時候,達到FixedPoint次數(shù)迭代或達到前后兩次的樹結(jié)構(gòu)沒變化才停止操作,具體參看RuleExecutor.apply)感謝閱讀2.2sqlContext和hiveContext的運行過程謝謝閱讀SparkSQL有兩個分支,sqlContext和hiveContext,sqlContext現(xiàn)在只支持SQL語法精品文檔放心下載解析器(SQL-92語法);hiveContext現(xiàn)在支持SQL語法解析器和hivesql語法解析器,默認謝謝閱讀為hiveSQL語法解析器,用戶可以通過配置切換成SQL語法解析器,來運行hiveSQL不支持謝謝閱讀的語法,2.2.1sqlContext的運行過程sqlContext總的一個過程如下圖所示:1.SQL語句經(jīng)過SqlParse解析成UnresolvedLogicalPlan;精品文檔放心下載2.使用analyzer結(jié)合數(shù)據(jù)數(shù)據(jù)字典(catalog)進行綁定,生成resolvedLogicalPlan;感謝閱讀3.使用optimizer對resolvedLogicalPlan進行優(yōu)化,生成optimizedLogicalPlan;謝謝閱讀4.使用SparkPlan將LogicalPlan轉(zhuǎn)換成PhysicalPlan;謝謝閱讀5.使用prepareForExecution()將PhysicalPlan轉(zhuǎn)換成可執(zhí)行物理計劃;謝謝閱讀.-6.使用execute()執(zhí)行可執(zhí)行物理計劃;7.生成SchemaRDD。在整個運行過程中涉及到多個SparkSQL的組件,如SqlParse、analyzer、optimizer、SparkPlan精品文檔放心下載等等2.2.2hiveContext的運行過程hiveContext總的一個過程如下圖所示:1.SQL語句經(jīng)過HiveQl.parseSql解析成UnresolvedLogicalPlan,在這個解析過程中對hiveql感謝閱讀語句使用getAst()獲取AST樹,然后再進行解析;精品文檔放心下載2.使用analyzer結(jié)合數(shù)據(jù)hive源數(shù)據(jù)Metastore(新的catalog)進行綁定,生成resolved謝謝閱讀LogicalPlan;3.使用optimizer對resolvedLogicalPlan進行優(yōu)化,生成optimizedLogicalPlan,優(yōu)化前使精品文檔放心下載用了ExtractPythonUdfs(catalog.PreInsertionCasts(catalog.CreateTables(analyzed)))精品文檔放心下載進行預處理;4.使用hivePlanner將LogicalPlan轉(zhuǎn)換成PhysicalPlan;謝謝閱讀5.使用prepareForExecution()將PhysicalPlan轉(zhuǎn)換成可執(zhí)行物理計劃;精品文檔放心下載.-6.使用execute()執(zhí)行可執(zhí)行物理計劃;7.執(zhí)行后,使用map(_.copy)將結(jié)果導入SchemaRDD。謝謝閱讀2.3catalyst優(yōu)化器SparkSQL1.1總體上由四個模塊組成:core、catalyst、hive、hive-Thriftserver:精品文檔放心下載core處理數(shù)據(jù)的輸入輸出,從不同的數(shù)據(jù)源獲取數(shù)據(jù)(RDD、Parquet、json等),將查詢結(jié)果輸出成schemaRDD;謝謝閱讀catalyst處理查詢語句的整個處理過程,包括解析、綁定、優(yōu)化、物理計劃等,說其是優(yōu)化器,還不如說是查詢引擎;謝謝閱讀hive對hive數(shù)據(jù)的處理hive-ThriftServer提供CLI和JDBC/ODBC接口感謝閱讀在這四個模塊中,catalyst處于最核心的部分,其性能優(yōu)劣將影響整體的性能。由于發(fā)展時間尚謝謝閱讀短,還有很多不足的地方,但其插件式的設計,為未來的發(fā)展留下了很大的空間。下面是catalyst精品文檔放心下載的一個設計圖:.-其中虛線部分是以后版本要實現(xiàn)的功能,實線部分是已經(jīng)實現(xiàn)的功能。從上圖看,catalyst主要精品文檔放心下載的實現(xiàn)組件有:sqlParse,完成sql語句的語法解析功能,目前只提供了一個簡單的sql解析器;謝謝閱讀Analyzer,主要完成綁定工作,將不同來源的UnresolvedLogicalPlan和數(shù)據(jù)元數(shù)據(jù)(如hive謝謝閱讀metastore、Schemacatalog)進行綁定,生成resolvedLogicalPlan;謝謝閱讀optimizer對resolvedLogicalPlan進行優(yōu)化,生成optimizedLogicalPlan;謝謝閱讀Planner將LogicalPlan轉(zhuǎn)換成PhysicalPlan;精品文檔放心下載CostModel,主要根據(jù)過去的性能統(tǒng)計數(shù)據(jù),選擇最佳的物理執(zhí)行計劃這些組件的基本實現(xiàn)方法:感謝閱讀先將sql語句通過解析生成Tree,然后在不同階段使用不同的Rule應用到Tree上,通過轉(zhuǎn)換完成各個組件的功能。精品文檔放心下載Analyzer使用AnalysisRules,配合數(shù)據(jù)元數(shù)據(jù)(如hivemetastore、Schemacatalog),完善UnresolvedLogicalPlan的屬性而轉(zhuǎn)換成resolvedLogicalPlan;謝謝閱讀.-optimizer使用OptimizationRules,對resolvedLogicalPlan進行合并、列裁剪、過濾器下推等優(yōu)化作業(yè)而轉(zhuǎn)換成optimizedLogicalPlan;感謝閱讀Planner使用PlanningStrategies,對optimizedLogicalPlan謝謝閱讀3、SparkSQLCLICLI(Command-LineInterface,命令行界面)是指可在用戶提示符下鍵入可執(zhí)行指令的謝謝閱讀界面,它通常不支持鼠標,用戶通過鍵盤輸入指令,計算機接收到指令后予以執(zhí)行。SparkCLI謝謝閱讀指的是使用命令界面直接輸入SQL命令,然后發(fā)送到Spark集群進行執(zhí)行,在界面中顯示運行感謝閱讀過程和最終的結(jié)果。Spark1.1相較于Spark1.0最大的差別就在于Spark1.1增加了SparkSQLCLI和精品文檔放心下載ThriftServer,使得Hive用戶還有用慣了命令行的RDBMS數(shù)據(jù)庫管理員較容易地上手,真正謝謝閱讀意義上進入了SQL時代?!咀ⅰ縎parkCLI和SparkThriftServer實驗環(huán)境為第二課《Spark編譯與部署(下)--Spark精品文檔放心下載編譯安裝》所搭建3.1運行環(huán)境說明3.1.1硬軟件環(huán)境主機操作系統(tǒng):Windows64位,雙核4線程,主頻2.2G,10G內(nèi)存感謝閱讀虛擬軟件:VMware?Workstation9.0.0build-812388感謝閱讀虛擬機操作系統(tǒng):CentOS64位,單核虛擬機運行環(huán)境:JDK:1.7.0_5564位Hadoop:2.2.0(需要編譯為64位)Scala:2.11.4.-?Spark:1.1.0(需要編譯)?Hive:.2機器網(wǎng)絡環(huán)境集群包含三個節(jié)點,節(jié)點之間可以免密碼SSH訪問,節(jié)點IP地址和主機名分布如下:感謝閱讀核序數(shù)/IP地址機器名類型用戶名目錄號內(nèi)存NN/DN/RM1核11hadoop1hadoop/app程序所在Master/Worker/3G路徑1核22hadoop2DN/NM/Workerhadoop/app/scala-.../2G/app/hadoop1核33hadoop3DN/NM/Workerhadoop/app/complied/2G3.2配置并啟動3.2.1創(chuàng)建并配置hive-site.xml在運行SparkSQLCLI中需要使用到HiveMetastore,故需要在Spark中添加其uris。具體方感謝閱讀法是在SPARK_HOME/conf目錄下創(chuàng)建hive-site.xml文件,然后在該配置文件中,添加精品文檔放心下載hive.metastore.uris屬性,具體如下:謝謝閱讀<configuration><property><name>hive.metastore.uris</name>謝謝閱讀.-<value>thrift://hadoop1:9083</value>謝謝閱讀<description>ThriftURIfortheremotemetastore.Usedbymetastoreclientto精品文檔放心下載connecttoremotemetastore.</description>謝謝閱讀</property></configuration>3.2.2啟動Hive在使用SparkSQLCLI之前需要啟動HiveMetastore(如果數(shù)據(jù)存放在HDFS文件系統(tǒng),還需謝謝閱讀要啟動Hadoop的HDFS),使用如下命令可以使HiveMetastore啟動后運行在后臺,可以精品文檔放心下載通過jobs查詢:$nohuphive--servicemetastore>metastore.log2>&1&謝謝閱讀3.2.3啟動Spark集群和SparkSQLCLI精品文檔放心下載通過如下命令啟動Spark集群和SparkSQLCLI:精品文檔放心下載$cd/app/hadoop/spark-1.1.0精品文檔放心下載$sbin/start-all.sh$bin/spark-sql--masterspark://hadoop1:7077--executor-memory1g精品文檔放心下載.-在集群監(jiān)控頁面可以看到啟動了SparkSQL應用程序:謝謝閱讀這時就可以使用HQL語句對Hive數(shù)據(jù)進行查詢,另外可以使用COMMAND,如使用set進謝謝閱讀行設置參數(shù):默認情況下,SparkSQLShuffle的時候是200個partition,可以使用如下命令謝謝閱讀修改該參數(shù):SETspark.sql.shuffle.partitions=20;精品文檔放心下載運行同一個查詢語句,參數(shù)改變后,Task(partition)的數(shù)量就由200變成了20。謝謝閱讀3.2.4命令參數(shù)通過bin/spark-sql--help可以查看CLI命令參數(shù):感謝閱讀.-其中[options]是CLI啟動一個SparkSQL應用程序的參數(shù),如果不設置--master的話,將在精品文檔放心下載啟動spark-sql的機器以local方式運行,只能通過http://機器名:4040進行監(jiān)控;這部分參數(shù),感謝閱讀可以參照Spark1.0.0應用程序部署工具spark-submit的參數(shù)。精品文檔放心下載[clioption]是CLI的參數(shù),通過這些參數(shù)CLI可以直接運行SQL文件、進入命令行運行SQL感謝閱讀命令等等,類似以前的Shark的用法。需要注意的是CLI不是使用JDBC連接,所以不能連接感謝閱讀到ThriftServer;但可以配置conf/hive-site.xml連接到Hive的Metastore,然后對Hive數(shù)精品文檔放心下載據(jù)進行查詢。3.3實戰(zhàn)SparkSQLCLI3.3.1獲取訂單每年的銷售單數(shù)、銷售總額.-第一步設置任務個數(shù),在這里修改為20個spark-sql>SETspark.sql.shuffle.partitions=20;感謝閱讀第二步運行SQL語句spark-sql>usehive;spark-sql>selectc.theyear,count(distincta.ordernumber),sum(b.amount)fromtbStock精品文檔放心下載ajointbStockDetailbona.ordernumber=b.ordernumberjointbDatecon精品文檔放心下載a.dateid=c.dateidgroupbyc.theyearorderbyc.theyear;感謝閱讀第三步查看運行結(jié)果.-3.3.2計算所有訂單每年的總金額第一步執(zhí)行SQL語句spark-sql>selectc.theyear,count(distincta.ordernumber),sum(b.amount)fromtbStock謝謝閱讀ajointbStockDetailbona.ordernumber=b.ordernumberjointbDatecon精品文檔放心下載a.dateid=c.dateidgroupbyc.theyearorderbyc.theyear;感謝閱讀.-第二步執(zhí)行結(jié)果使用CLI執(zhí)行結(jié)果如下:3.3.3計算所有訂單每年最大金額訂單的銷售額第一步執(zhí)行SQL語句.-spark-sql>selectc.theyear,max(d.sumofamount)fromtbDatecjoin(select謝謝閱讀a.dateid,a.ordernumber,sum(b.amount)assumofamountfromtbStockajoin謝謝閱讀tbStockDetailbona.ordernumber=b.ordernumbergroupbya.dateid,a.ordernumber)精品文檔放心下載donc.dateid=d.dateidgroupbyc.theyearsortbyc.theyear;精品文檔放心下載第二步 執(zhí)行結(jié)果使用CLI執(zhí)行結(jié)果如下:.-4、SparkThriftServerThriftServer是一個JDBC/ODBC接口,用戶可以通過JDBC/ODBC連接ThriftServer來精品文檔放心下載訪問SparkSQL的數(shù)據(jù)。ThriftServer在啟動的時候,會啟動了一個SparkSQL的應用程序,而感謝閱讀通過JDBC/ODBC連接進來的客戶端共同分享這個SparkSQL應用程序的資源,也就是說不同精品文檔放心下載的用戶之間可以共享數(shù)據(jù);ThriftServer啟動時還開啟一個偵聽器,等待JDBC客戶端的連接和感謝閱讀提交查詢。所以,在配置ThriftServer的時候,至少要配置ThriftServer的主機名和端口,如感謝閱讀果要使用Hive數(shù)據(jù)的話,還要提供HiveMetastore的uris。感謝閱讀【注】SparkCLI和SparkThriftServer實驗環(huán)境為第二課《Spark編譯與部署(下)--Spark感謝閱讀編譯安裝》所搭建4.1配置并啟動4.1.1創(chuàng)建并配置hive-site.xml第一步創(chuàng)建hive-site.xml配置文件在$SPARK_HOME/conf目錄下修改hive-site.xml配置文件(如果在SparkSQLCLI中已經(jīng)添精品文檔放心下載加,可以省略):$cd/app/hadoop/spark-1.1.0/conf感謝閱讀$sudovihive-site.xml.-第二步修改配置文件設置hadoop1為Metastore服務器,hadoop2為ThriftServer服務器,配置內(nèi)容如下:謝謝閱讀<configuration><property><name>hive.metastore.uris</name>感謝閱讀<value>thrift://hadoop1:9083</value>精品文檔放心下載<description>ThriftURIfortheremotemetastore.Usedbymetastoreclientto感謝閱讀connecttoremotemetastore.</description>謝謝閱讀</property><property><name>hive.server2.thrift.min.worker.threads</name>謝謝閱讀<value>5</value><description>MinimumnumberofThriftworkerthreads</description>感謝閱讀</property><property><name>hive.server2.thrift.max.worker.threads</name>謝謝閱讀<value>500</value><description>MaximumnumberofThriftworkerthreads</description>感謝閱讀.-</property><property><name>hive.server2.thrift.port</name>精品文檔放心下載<value>10000</value><description>PortnumberofHiveServer2Thriftinterface.Canbeoverriddenby謝謝閱讀setting$HIVE_SERVER2_THRIFT_PORT</description>精品文檔放心下載</property><property><name>hive.server2.thrift.bind.host</name>感謝閱讀<value>hadoop2</value><description>BindhostonwhichtoruntheHiveServer2Thriftinterface.Canbe謝謝閱讀overriddenbysetting$HIVE_SERVER2_THRIFT_BIND_HOST</description>謝謝閱讀</property></configuration>.-4.1.2啟動Hive在hadoop1節(jié)點中,在后臺啟動HiveMetastore(如果數(shù)據(jù)存放在HDFS文件系統(tǒng),還需要精品文檔放心下載啟動Hadoop的HDFS):$nohuphive--servicemetastore>metastore.log2>&1&謝謝閱讀4.1.3啟動Spark集群和ThriftServer感謝閱讀在hadoop1節(jié)點啟動Spark集群$cd/app/hadoop/spark-1.1.0/sbin謝謝閱讀$./start-all.sh在hadoop2節(jié)點上進入SPARK_HOME/sbin目錄,使用如下命令啟動ThriftServer精品文檔放心下載$cd/app/hadoop/spark-1.1.0/sbin感謝閱讀$./start-thriftserver.sh--masterspark://hadoop1:7077--executor-memory1g精品文檔放心下載.-注意:ThriftServer需要按照配置在hadoop2啟動!謝謝閱讀在集群監(jiān)控頁面可以看到啟動了SparkSQL應用程序:精品文檔放心下載4.1.4命令參數(shù)使用sbin/start-thriftserver.sh--help可以查看ThriftServer的命令參數(shù):精品文檔放心下載$sbin/start-thriftserver.sh--helpUsage:./sbin/start-thriftserver[options][thriftserver謝謝閱讀options]Thriftserveroptions:Usevalueforgivenproperty精品文檔放心下載.-其中[options]是ThriftServer啟動一個SparkSQL應用程序的參數(shù),如果不設置--master的謝謝閱讀話,將在啟動ThriftServer的機器以local方式運行,只能通過http://機器名:4040進行監(jiān)控;精品文檔放心下載這部分參數(shù),可以參照Spark1.0.0應用程序部署工具spark-submit的參數(shù)。在集群中提供謝謝閱讀ThriftServer的話,一定要配置master、executor-memory等參數(shù)。謝謝閱讀[thriftserveroptions]是ThriftServer的參數(shù),可以使用-dproperty=value的格式來定義;謝謝閱讀在實際應用上,因為參數(shù)比較多,通常使用conf/hive-site.xml配置。精品文檔放心下載4.2實戰(zhàn)ThriftServer4.2.1遠程客戶端連接可以在任意節(jié)點啟動bin/beeline,用!connectjdbc:hive2://hadoop2:10000連接感謝閱讀ThriftServer,因為沒有采用權(quán)限管理,所以用戶名用運行bin/beeline的用戶hadoop,密碼精品文檔放心下載為空:.-$cd/app/hadoop/spark-1.1.0/bin謝謝閱讀$./beelinebeeline>!connectjdbc:hive2://hadoop2:10000精品文檔放心下載4.2.2基本操作第一步 顯示hive數(shù)據(jù)庫所有表beeline>showdatabase;beeline>usehive;beeline>showtables;第二步 創(chuàng)建表testThrift.-beeline>createtabletestThrift(field1String,field2Int);精品文檔放心下載beeline>showtables;第三步把tbStockDetail表中金額大于3000插入到testThrift表中感謝閱讀beeline>insertintotabletestThriftselectordernumber,amountfrom謝謝閱讀tbStockDetailwhereamount>3000;精品文檔放心下載beeline>select*fromtestThrift;精品文檔放心下載第四步重新創(chuàng)建testThrift表中,把年度最大訂單插入該表中感謝閱讀beeline>droptabletestThrift;精品文檔放心下載beeline>createtabletestThrift(field1String,field2Int);謝謝閱讀beeline>insertintotabletestThriftselectc.theyear,max(d.sumofamount)fromtbDatec謝謝閱讀join(selecta.dateid,a.ordernumber,sum(b.amount)assumofamountfromtbStocka精品文檔放心下載.-jointbStockDetailbona.ordernumber=b.ordernumbergroupby謝謝閱讀a.dateid,a.ordernumber)donc.dateid=d.dateidgroupbyc.theyearsortbyc.theyear;精品文檔放心下載beeline>select*fromtestThrift;精品文檔放心下載4.2.3計算所有訂單每年的訂單數(shù)第一步執(zhí)行SQL語句spark-sql>selectc.theyear,count(distincta.ordernumber)fromtbStockajoin感謝閱讀tbStockDetailbona.ordernumber=b.ordernumberjointbDatecona.dateid=c.dateid感謝閱讀groupbyc.theyearorderbyc.theyear;精品文檔放心下載第二步執(zhí)行結(jié)果.-Stage監(jiān)控頁面:查看DetailsforStage284.2.4計算所有訂單月銷售額前十名第一步執(zhí)行SQL語句.-spark-sql>selectc.theyear,c.themonth,sum(b.amount)assumofamountfromtbStocka精品文檔放心下載jointbStockDetailbona.ordernumber=b.ordernumberjointbDatecon精品文檔放心下載a.dateid=c.dateidgroupbyc.theyear,c.themonthorderbysumofamountdesclimit10;謝謝閱讀第二步執(zhí)行結(jié)果Stage監(jiān)控頁面:在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度護士健康管理服務合同
- 2025年度工程轉(zhuǎn)包風險控制合同范本
- 2025年度醫(yī)療健康產(chǎn)業(yè)股權(quán)激勵合同范本
- 2025年度戶外運動場所廣告裝修工程合同
- 2025年度合伙人補充協(xié)議范本:文化創(chuàng)意產(chǎn)業(yè)合作開發(fā)合同
- 2025年度國際農(nóng)產(chǎn)品進口與銷售合同模板
- 2025年專業(yè)版的補償貿(mào)易購銷合同模板(三篇)
- 2025年度汽車租賃公司車輛質(zhì)押典當業(yè)務風險控制合同
- 2025年度健身行業(yè)健身賽事組織與管理合同范本
- 2025年度新能源汽車充電樁股權(quán)未出資轉(zhuǎn)讓及運營管理合同
- 全面解讀新能源法律風險與應對措施
- 彩鋼瓦架子施工方案
- 民法學詳細教案
- 浙江省杭州市2023年中考一模語文試題及答案
- 上海市楊浦區(qū)2022屆初三中考二模英語試卷+答案
- 高中英語原版小說整書閱讀指導《奇跡男孩》(wonder)-Part one 講義
- GB/T 4745-2012紡織品防水性能的檢測和評價沾水法
- 國家綜合性消防救援隊伍消防員管理規(guī)定
- 2023年全國各地高考英語試卷:完形填空匯編(9篇-含解析)
- 五年級上冊數(shù)學習題課件 簡便計算專項整理 蘇教版 共21張
- 疼痛科的建立和建設
評論
0/150
提交評論