2022Apache spark中文實踐手冊指南_第1頁
2022Apache spark中文實踐手冊指南_第2頁
2022Apache spark中文實踐手冊指南_第3頁
2022Apache spark中文實踐手冊指南_第4頁
2022Apache spark中文實踐手冊指南_第5頁
已閱讀5頁,還剩131頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Spark最佳實 使用Databricks作為分析平 領英如何應對ApacheSpark的Scalability挑 利用閃存優(yōu)化在Cosco基礎上的Spark 基于Spark和TensorFlow的機器學習實 在kubernetes上運行apachespark:最佳實踐和陷 使用RayOnSpark在大數(shù)據(jù)平臺上運行新興的人工智能應 使用Ray將可擴展的自動化機器學習(AutoML)用于時序預 ApacheSpark3.0對Prometheus監(jiān)控的原生支 助力云上開源生態(tài)-阿里云開源大數(shù)據(jù)平臺的發(fā) EMRSpark-SQL性能極致優(yōu)化揭秘概覽 EMRSpark-SQL性能極致優(yōu)化揭秘RuntimeFilter EMRSpark-SQL性能極致優(yōu)化揭秘NativeCodegen SparkCodegen淺 Tablestore結合Spark的流批一體SQL實 SparkSparkSparkSparkSpark最佳實踐 簡介:簡介:SPARK+AISUMMIT2020中文精華版線上峰會將會帶領大家一起顧2020SPARK又YipitDataDatabricks平臺搭建的分析平臺。YipitData‘sPlatform的相關介紹。(Whyaplatform)YipitData是一家咨詢公司,其客戶主要是投資基金以及財富五百強中的一些公司。該公司通過自己的數(shù)據(jù)產品進行分析,提供給客戶相應的數(shù)據(jù)分析報告。YipitData的主要產出方式和賺錢方式就是533個數(shù)據(jù)工程師。數(shù)據(jù)分析的基礎是數(shù)據(jù),所(Whatisinourplatform)OwnTheProductDataCollection、DataExploration、ETLWorkflowsReportGeneration四個階段。YipitData公司的人員主要包括數(shù)據(jù)分析師和數(shù)據(jù)工程師,其中數(shù)據(jù)分析師來分析數(shù)據(jù)DatabricksWorkspaceNotebookpython、Scala、SQL等語言的代碼,然后交由Databricks平臺去執(zhí)行并返結果。YipitData'Platform是基于DatabricksDatabricksPython(一)(IngestingYipitData1PBParquet,60KTables1.7K的Databases。他們的數(shù)據(jù)收集使用的是ReadypipeURL之后,將downloadURLsParquetReadypipe對網(wǎng)頁進行kinesisFirehose,kinesisFirehoseAWSS3上。在這個階段所存儲的數(shù)據(jù)都是原始JSONschema的,這類數(shù)據(jù)對于數(shù)據(jù)分析師來JSON文件轉換成Bucket,這一步也自帶了壓縮效果。轉換完成之后會有兩個輸出,如下圖所示,一JSONS3Merge處理,將VariousFilePermissionsDataDatapDaDarkspaut(二)(TableYipitData'sPlatform提供了一些tableutilitiestabletable。比如下圖所示的create_tabletable。YipitData公司來說,上面的過程仍然是一個比較繁瑣的過程,因為該公司最重要的任務是進行數(shù)據(jù)分析,且大多數(shù)人員也是數(shù)據(jù)分析師,如果讓數(shù)據(jù)分析師使用SparkAPI去完成上述過程,還是YipitData公司來說,最好是把一些功能進行封裝,不要暴露太多的底層功能,create_table函數(shù),大大降低了數(shù)據(jù)分析師的使用難度。(三)(ClusterSparkSpark集群簡單了。為了解決易用性的問題,YipitDataT-ShirtSize劃分巧妙地將集群劃分成SMALL、MEDIUM、LARGE三類,如下圖所示,數(shù)據(jù)分析師在使用的時候雖然少了靈活性,但是節(jié)省T-Shirt的尺寸一樣做選擇即可,而無需關心背后的復雜RESTAPI(四)ETLWorkflow(ETLWorkflowYipitData使用Airflow來實現(xiàn)ETLWorkflowAirflow來管理ETLWorkflow,ETL的一個標準工具。對于數(shù)據(jù)工程師來說,Airflow的使用不是很難:首先構建一個DAGTASKTASKS的依賴關系即可。但是,終究是要寫一段代YipitData來說就不是那么合適了。因此,YipitDataAirflow+databricksAPIDAGs。具體來說,每個文件夾APIDAGETL的自動化,其中用戶只需要指定Notebook中的參數(shù)值即可。YipitData自動化創(chuàng)建Workflows的過程如下圖所示,整個流程都是在Databricks平臺上擴展得到的。SparkSpark最佳實踐 PAGE72 SparkQ1:Databricks和DataworksSpark應用更強一些。ETL。ApacheSparkSparkSparkSpark用戶生產力,避免“用SparkSparkSpark用戶生成力以及如何優(yōu)化Spark基礎計算架構。Spark團隊軟件工程師,卡耐基梅隆大學碩士學位,專攻分布式系統(tǒng)方向。一、OverviewofSparkEcosystem@二、Scalingchallengeswehave三、SolutionstoscaleourSpark四、SolutionstoscaleSparkcompute一、OverviewofSparkEcosystem@的途徑。在這樣一張龐大的圖譜中分析數(shù)據(jù)獲得insights才能幫助領英平臺中的職場人士。那么大規(guī)ApacheSpark成為了領英的主要計算引擎。SparkHadoop平臺中100vcores2+PB3Spark應用Spark70%shuffle5PB的數(shù)據(jù)。計算基20193倍以上。Spark是一個多元化的生態(tài)系統(tǒng),SparkSpark,要么通過AzkabanJupyternotebookSparkAPI60%SparkSQL應用,通過豐富的大數(shù)據(jù)應用,二、ScalingchallengeswehaveSpark基礎架SparkShuffle,SparkShuffle是最大的規(guī)模擴展瓶頸。領英還嘗SQL優(yōu)化技術,SQLSpark應用數(shù)量下的計算工作量,從而進一步緩解盡量通過自動化的Spark系統(tǒng)答最常見的用戶問題分別是為什么我的Spark運行失敗了,為什么我的Spark運行很慢,以及如何讓它運行的更快。下面分別從用戶生產力及SparkShuffle方面展開詳三、SolutionstoscaleourSparkusersSpark提升用戶生產力,并幫助用戶理解SparkSpark是非??紤]到領英SparkSpark中運行時,Spark用戶花費了很多功夫終于調試好Spark團GridBench,它可以通過各種報告幫助用戶理解性能Spark應用多次運行后的結果自動分析,從而發(fā)現(xiàn)性能瓶頸點。GridBench也可GridBench針對某個應用做出的性能比較報告,通過對比兩組不同時間下運行間的之間執(zhí)行記錄。GridBench可以確定SparkSparkHistoryServerSpark生態(tài)系統(tǒng)中重要的一Spark應用提供歷史日志記錄,通過網(wǎng)頁和RestAPISpark應用的詳細數(shù)據(jù)信息。再通過MetricAPI獲取指標數(shù)據(jù)。SparkHistorySparkSparkHistoryServer獲取每個指標數(shù)據(jù),還是遇到了功能Spark應用數(shù)量比較大,SparkHistoryServer不能很好的處理大量的并發(fā)請求。其次,SparkHistoryServer在解析歷史日志,提取較大的日志文件SparkHistoryServer,proxyserverworkerserver,通過使用多臺服務器可以很好的橫向擴展。為了應用運行結束后才解析歷史日志,IncrementalParsing可以在運行時開始解析,一點點的增量解析日Spark應用結束后,SparkHistoryServerIncrementalParsing可以在很短的時間內提供所需通過對SparkHistoryServerSpark應用指標的數(shù)據(jù)。為了驅動各種用戶生產力數(shù)據(jù),領英搭建了一套基于KafkasamzaSparkTrackingService?;贙afkasamza是領英開源的流處理系統(tǒng),SparkTrackingServiceResourceManagerSparkIDSparkHistoryServerSpark應SparkTrackingService會進一步解析用戶所需要的指標數(shù)據(jù)。由此,四、SolutionstoscaleSparkcomputeSparkShuffle有了提升用戶生產力的各種工具之后,Spark團隊可以更多的投入的優(yōu)化計算引擎之上。Spark本身是一個復雜的系統(tǒng),應該首先改進哪個組件呢?隨著Spark在領英內部使用率的快速增長,SparkShuffleServiceSparkExternalSparkShuffleService管ExecuterSparkShuffleServiceSparkExecuter中ShuffleMapTasksShuffleShuffleShuffleBlock,ShuffleExternalSparkShuffleServiceShuffleReducerTasks開始運行時,都會從遠程的ShuffleServiceShuffleBlockShuffleService可以輕易ShuffleShuffleReducerTasks。由于SparkShuffleService共享性質,在大規(guī)模部署應用服務時遇到了很多問題。SparkShuffleServiceTasks請求陸續(xù)發(fā)出,ShuffleServiceShuffleBlockShuffleServiceShuffle等待時間。第三個問題是ShuffleShuffleServiceShuffleBlocks的應用,ShuffleBlock時很容易對ShuffleServiceShuffleShuffleServiceShuffleBlockShuffleBlock5000ShuffleReduceStage,并在圖StageShuffleBlockShuffle等待時間。數(shù)據(jù)來源是領英ShuffleBlockStage。Stage1ShuffleService升ShuffleServiceShuffle10006000次。ShuffleService背后使用的Next-gen服務器的問題。在較輕量層RPCRPC隔離開來,在集群高峰時段,大量的數(shù)據(jù)層的RPCShuffleServiceRPC請求超時。領英修ShuffleService之后,看到了立桿見影的效果。大大減少了Shuffle組件的可靠性。Stage2:ShuffleServiceShuffleService端限流來幫助解決集群內abusive應用的影響。這類應用所帶ReducerTasksShuffleBlock時,ShuffleShuffle會開始大量的小數(shù)據(jù)隨機讀取操作,很容易ServiceShuffleBlockShuffleBlock獲取速率超過閾值時,ShuffleService可以讓相應應用的ReducerTasks退,通過減少并發(fā)ShuffleBlock獲取數(shù)據(jù)流ShuffleService限流機制,觀察到集群中所有節(jié)點上的ShuffleServiceBlockabusivejobShuffleService以及相鄰應用的影響開始受到了控制。同時,還觀察到集群上Shuffle數(shù)據(jù)傳輸速率并沒有特別明顯的變化。這意味著當限制那些少數(shù)abusiveShuffle數(shù)據(jù)吞吐量。ShuffleServiceabusive應用的影響,但依然不能根本的解決小ShuffleBlockShuffleVLDB2020Magnet可以關注后續(xù)工程博客文章。MagnetShuffleShuffle文件之后,MapTasks會將生成的ShuffleBlockShufflebyte組成的數(shù)據(jù),分組之后另外單獨的線程會讀取一整ShuffleBlock傳輸?shù)竭h程的ShuffleService中。ShuffleServiceShuffleBlock按照不ShuffleShuffleDriverShuffleMapStageShuffleService,MapTasksServicesShuffleBlock始終被分配到同一個遠程的ShuffleServiceShuffleService端將以Besteffort方式把收到ShuffleBlockShuffle文件當中。ShuffleBlock大小和位置之外,SparkDriver也會收到這些分區(qū)合并的ShuffleReducerTasksSparkDriverShuffleBlockReducerTasksShuffleBlock數(shù)量,從ShuffleBlockShuffleServiceBesteffortShuffleBlock按分區(qū)合ShuffleBlock沒有被合并,ReducerTasksShuffleBlockReducerTasks大部分輸入數(shù)據(jù)都被合并在集群的一個節(jié)點之上,SparkDriverReducerTasksShuffle性能。按照不同的ShuffleShuffle當中的小數(shù)據(jù)隨機讀取操作轉化為大數(shù)據(jù)的Shuffle的性能。MagnetGridbench性能分析工具,對SparkMagnet后的性能進行了分析。下圖中使用了較為復雜的生成機器學習特Shuffle30%的應用運行時間的縮短。目前,領英正在將這種全新Shuffle機制推廣到生產集群中。簡介:簡介:SPARK+AISUMMIT2020中文精華版線上峰會將會帶領大家一起顧2020SPARK又開源項目組的軟件工程師吳一介紹了利用Flash閃存優(yōu)化在Cosco基礎上的SparkShuffleFlashforSparkShufflewithCoscoCoscoFacebookSparkShuffleFlashCoscoSparkShuffleSparkShuffle3I/OQueryCoscoCosco(一)CoscoSparkShuffleMapTaskReduceTaskTaskMapTaskMapOutputFiles,PartitionMapTask執(zhí)行完畢之后,ReduceTaskMapOutputFiles中某個分區(qū)的數(shù)據(jù),將其合并成某個大的PartitionI/O性能相關的問題:第一次是在MapTaskshuffledataShuffleDataSpillMapOutputFiles第三次是在ReduceTasksortSpillsmallIOsShuffle的性能變差?;谏鲜鰡栴},CoscoSparkTask生成一個自MapOutputFiles,CoscoMapTaskPartition寫入到同一個內存緩存中,緩FlushPartitionFlushReduceTaskHDFS系統(tǒng)中的文件即可,MMxR數(shù)量級。因此,也就解決了小I/OFlashShuffleshuffleCosco中緩存的時間是可以忽略不計的。1GB100GB的閃存之間讓我們用來部署集群,我們如何抉擇呢?這里有一條不精確的經(jīng)驗:1GB100GB的閃存這兩種第一種是優(yōu)先緩存內存,當內存達到一定閾值之后再Flushpartitionpartition用內存緩存,對于partition用閃存緩存。250GB的內存25TBCosco的優(yōu)勢,用更少的硬件資Flush到閃存中,這樣有兩個好處:ShuffleDatapartitionpartition用內存緩存,對于加載partitionPartition的加載速率,當速率小于某個出,在實際生產中大多數(shù)Partition的加載速度是比較慢的,少部分加載速度比較快,加載速度比較ReduceTask直接從閃存中讀取緩存的數(shù)據(jù),而不是從HDFS中的文件讀取數(shù)據(jù),這樣子提高了數(shù)據(jù)的讀取速率。另外,在引入閃存之后,Shuffle的數(shù)據(jù)塊會變得更大,在Reduce端合并數(shù)據(jù)塊的次數(shù)會變少,讓整個查詢變得更快。DFS上的讀寫也會更加高效。DiscreteeventSyntheticloadgenerationonatestShadowtestingonatestSpecialcanaryinaproductionDiscreteeventDiscreteeventsimulation,也就是離散時間模擬的方法,是一種比較通用的評估方法。我們把每個ShuffleData到達閃存的行為作為一個離散事件,記錄其到達的時間、此時閃存中寫入的數(shù)據(jù)總量以FlushDFS文件的數(shù)據(jù)總量。最終我們會得到如下圖所示統(tǒng)計表,包含了最終數(shù)據(jù)塊SpecialcanaryinaproductionCosco中一個Task可以與多個ShuffleService進行通信,所以很難確定是因為加入了閃存提升了性能還是因為其他AB保持原來的部署模式。之后,我們再對兩個子集群進行評估,SparkTensorFlow的機器學習AIAI技術的2019杭州云棲大會機器學習技術專場,阿里云高級技術專家吳威和阿里云技術專家EMRE-LearningTensorFlowonSpark。EMRE-LearningEMRE-LearningAI技術,通過算法基于歷史數(shù)據(jù)來構建機器學習模型,從而AI技術有了突飛猛進的發(fā)展。AI平臺。下圖展示了AIAI訓練和評估,包含數(shù)據(jù)存儲;右側是AI兩套集群運維復雜:從圖中可以看出,AI開發(fā)涉及的兩套集群是分離的,需要單獨維護,運維成EMRGPUCPU機器;數(shù)據(jù)存儲層包括HDFSOSSKafkaFlumeYARN、K8SZookeeperE-learningSpark,這里的SparkjindoSparkEMRSparkAI場景下的版本,除此之外,還有PAITensorFlowonSpark;最后是計算分析層,提供了數(shù)據(jù)分析、特征工程、AI訓練以及Notebook的功能,方便用戶來使用。EMRCPU、MemGPUYARNSparkDataSourceAPI來方便各類數(shù)據(jù)源的讀取,MLlibpipeline廣泛用Spark+深度學習框架:Spark和深度學習框架的集成支持,包括高效的SparkTensorFlow之間的數(shù)據(jù)傳輸,Spark資源調度模型支持分布式深度學習訓練;資源監(jiān)控與報警:EMRAPM易用性:JupyternotebookPythonTensorFlowonSpark主要包含了下圖中的六個具體設計目標。TensorFlowonSparkPySpark應用框架級別的封裝??蚣苤袑崿F(xiàn)的主要功能包TensorFlow任務,除此之外還需要將特征工PAITensorFlowRuntime進行深度學習和機器學習的訓練。由于Worker任務)Sparkexecutor,PsWorker任務通PAITensorFlowRuntimeDataLake中,方便后期的模型發(fā)布。ApacheArrowAPITensorFlowRuntime,從而加速整個流程TensorFlowonSparkTensorFlowCheckpoints機制,用戶需要ChenpointDataLakeTensorFlow的時候,會讀取最近的CheckpointPs和BarrierExecutiontasktask,重新配置所有環(huán)境變量;TFCheckpoint。TensorFlowonSparkcondapythonvirtualenvTensorFlowTensorFlowPSHorovodMPITensorFlowAPITensorFlowEstimatorAPITensorFlowSessionEMR客戶有很多來自于互聯(lián)網(wǎng)公司,廣告和推送的業(yè)務場景比較常見,下圖是一個比較典型的廣告據(jù)進行ETLTensorFlow框架高效地喂給PAITensorFlowRuntimeDataLake中。API層面,TensorFlowonSpark提供了一個基類,該基類中包含了三個方法需要用戶去實現(xiàn):SparkDataFrame對象;shutdown方法實現(xiàn)用戶長連接資源的釋放;train方法是用戶之前在TensorFlowpl_submit命令來提交TensorFlowonSpark的任務。FM的樣例,F(xiàn)M是一個比較常見的推薦算法,具體場景是給電影評分,根據(jù)客戶對SparkdatasourceAPISparkjoin、ETL處理等;右側是TensorFlowGithub。最后總結一下,EMRE-Learning平臺將大數(shù)據(jù)處理、深度學習、機器學習、數(shù)據(jù)湖、GPUs功能特性緊密的結合,提供一站式大數(shù)據(jù)與機器學習平臺;TensorFlowonSpark提供了高效的數(shù)據(jù)交互流程以E-Learning平臺在公有云服務不同的客戶,成功案例,CPU1000,GPU集群規(guī)模1000。kubernetesapachespark:最kubernetesapachespark的介紹。內容包Summit中文精華版峰會的精彩內容整理。一、DataMechanicsdatamechanicsserverless的平臺,即一個全托管的平臺,pipeline都會做得非常的快,已經(jīng)非常地穩(wěn)定。K8S集群。這樣的話,對整個的安全是一二、Sparkon首先,k8ssparkspark2.3版本以后的事情,在此之前有幾種方式。第一種就是YarnYarn的集群里面了。第四種是Kubernetessparkk8s上面。Sparkonk8sYarnk8s的依賴的管理。這塊是區(qū)分點比較大的一個地方。Yarn提供一個全sparkpython的版本,全局的包的依賴,缺少環(huán)境隔離。而k8s是完全的環(huán)境隔離,每一個應用可以跑在完全不同的環(huán)境、版本等。YarnHDFS。K8s的包image中,支持包依賴管理,將包上傳到OSS/HDFS,sparkexecutorsk8snode16G-RAM,4-coreECS,executor都申請不到!如下圖所示。nodecores85%,那么我們應該這然后這塊是一個比較重要的特點,就是動態(tài)資源。動態(tài)資源的完整支持目前做不到。比如說,Kill一pod,shufflefile會丟失,會帶來重算。ClusterautoscalingdynamicallocationPPT的某一頁,它有一個實線1min~2minexecutor申請過程。Spotinstance75%SLAexecutorkillrecover。如driverkillnodeselectoraffinitiesDrivernode,executorspotinstance。S3Acommitters,JindofsJobCommitter,應該設置ShuffleI/Oshuffleboundworkload的關鍵點,spark2.xdockerfilesystem。Dockerfilesystemvolume來代替。shuffle的提升,中間數(shù)據(jù)的存儲與計算分離。這塊是一個比較Nodedecommission,支持上傳python依賴文件等等。k8ssparkonk8s(二)動態(tài)資源&shuffleShuffleserviceNAStaskfetchTiered(四)EMRSparkEMREMR集群類型為ONJindoSparkJindoFSService/JindoFSSDKOSSJindoJobCommitterOSSACKEMRHDFSOperator增強,DependencyRayOnSparkRayApacheSpark的數(shù)據(jù)處理流水線overhead,支持用戶使用Spark處理的數(shù)據(jù)做新興人工智能應用的開Intel大數(shù)據(jù)團隊軟件工程師黃凱為您介紹Ray和Intel的開源項目AnalyticsZoo,RayOnSparkRayOnSpark的落地實踐。一、OverviewofAnalyticsZoo二、Introductionto三、MotivationsforRayOnApacheSpark四、ImplementationdetailsandAPIdesign五、Real-worldusecases一、OverviewofAnalyticsAIonBig2016年BigDLApacheSpark開發(fā)的分布式高性能的深度學習框架,首次將深度學習引入到BigDL寫的深度學習應用是一在性能方面BigDLMKLBigDLCPU能有良好的性能。在可擴展性方面,BigDLSpark擴展到成百上千個節(jié)點上做對深度學習模型做AnalyticsAnalyticsZooPythonAPI對訓練好的模型做線上推理。在流水線之上,AnalyticsZooMLworkflow,幫助用戶Cluster實際工作中,開發(fā)部署一條數(shù)據(jù)分析和AI的流水線通常需要經(jīng)歷三個步驟:開發(fā)者首先在筆記本上單機的代碼無縫地部署在生成環(huán)境中,并且簡化和自動化搭建整個pipeline的過程,這也是開發(fā)AnalyticsZooRayOnSpark的初衷和目的。二、IntroductiontoPythonimportrayray.init()Ray服務。正常情Python函數(shù)是順序執(zhí)行的,但是如果加上@ray.remote(num_cpus,...)class也能加上@ray.remoteRayactorRay去遠程地啟動。在@ray.remote中還可以指定RayCore實現(xiàn)簡單的并行之外,Rayhigh-levellibrary,加速人工智能workloadRayTune能自動去調參,RLibAPI去執(zhí)行不同強化學習任務,RaySGD在PyTorch和TensorFlow原生的分布式模塊之上實現(xiàn)了一層wrapper來簡化部署分布式訓練的過三、MotivationsforRayOnApacheRayPython環(huán)境和依賴,同時不給AI任務,不可避免地會帶overhead,還需要額外的資源去維護不同的系統(tǒng)和工作流。這些挑戰(zhàn)促使了英特爾開RayOnSparkRay開發(fā)的新興人工智能應用。四、ImplementationdetailsandAPIRayOnSparkRayOnSparkRaySpark數(shù)據(jù)處理的流水線中。顧名思義,RayOnSparkRaySparkYARN集群為例,同樣的思路也KubernetesApacheMesosconda-packPython環(huán)境,在運行時分發(fā)到各個節(jié)點上,這樣一來用戶不需要在每個節(jié)點上提前裝好Python依賴,程序RayOnSpark整體架構,SparkDriver節(jié)點上起一SparkContext的實例,SparkContextSparkExecuterSpark的任務。除了SparkContext之外,RayOnSparkSparkDriverRayContext的實例,利用現(xiàn)有的SparkContext將Ray在集群里啟動起來,Ray的進程會伴隨著在SparkExecuterRayMasterRaylet進程。RayContextSparkExecuterRayManagerRay的RayRayYARN集群上同時SparkRayin-memorySparkRDDDataFrameRay的應用中,Spark的數(shù)據(jù)做新興人工智能應用的開發(fā)。RayOnSparkimportAnalyticsZooinit_spark_on_yarnSparkContextobjectcondaPythonSparkExecuterRayContextobjectRaySpark的橋梁,在創(chuàng)建的時候可以定義五、Real-worlduseRayOnSpark的第一個應用是我們在AnalyticsZoo里基于RayTune和RayOnSpark開發(fā)的AutoML模塊。AutoML可以將這些過程自動化,簡化搭建時間序列模型過程。感興趣的同學可以參見:/intel-analytics/analytics-zoo/tree/master/pyzoo/zoo/automlusecases。AutoMLRayOnSparkpipeline。用戶可以使用PySparkRay并行進行數(shù)據(jù)加載和處理,我們對不同深度學習框架使用RayOnSpark實現(xiàn)了RayOnSpark,通過簡單的代碼修改就可以完成大數(shù)據(jù)合作案例:Drive-thruRecommendationSystematBurger麥克風對話),RayOnSpark構建了一個完整的推薦系統(tǒng)流水線。漢堡王作為全球最大的快餐品MXNetGPUMXNetSparkGPU集群上,無疑使得他們耗費了很多時間。RayOnSparkSpark的集群上做分布式的訓練,這樣一來數(shù)據(jù)layerMXNetYARN集群上部署。MXNetWorker和ServerRay進RayOnSpark的解決方案已經(jīng)被漢堡王部署到了他們的生產環(huán)境中,證明了這種方案更加高效、AutoMLAnalyticsZoo二、ScalableAutoMLforTimeSeries三、UseCaseSharing&Learnings四、FutureWorkAnalyticsBigDLSparkSparkTensorFlow、CaffeBigDLSparkjob的形式跑在大數(shù)深度學習的平臺,為用戶提供單機到集群的無縫式體驗。AnalyticsZoo集成了多種軟硬件加速庫,為概覽,AnalyticsZoo可以跑在各種環(huán)境當中,包括筆記本、K8S集群、HadoopCluster、SparkCluster等等。AnalyticsZoopipeline的支持,這些流水線組件可以使得用戶更方便的將深度學習框架使用到工作學習當中,比如分布式的TensorFlowPyTorch支持、RayOnSpark、SparkDataFrame、MLpipelinesforDL、InferenceModel等等。流水線之上提供了Workflow方面的支持,如自動調參,ClusterServing等。最上層針對不同的用戶場景,提供了場景的算法,使得用戶模型的搭建更加TimeKPI分析可以用于通信網(wǎng)絡質量檢運維方法很難管理大規(guī)模的虛擬機和服務,AIOpsML、AI的技術在監(jiān)控數(shù)據(jù)中進TimeSeries1個觀測點到第ty1yt,目標是yt+1yt+h,h1,取決于具體場景。理論上,從第一個觀測點開始的所有itk個樣本點數(shù)值,如下圖中標記的紫色部分,從yt-k+1到y(tǒng)t。很多種方法可以用于時序預測,如自歸、指數(shù)平滑歸、ARIMA等時序預測要預測數(shù)值,本質上是歸問題,但時序預測相比普通的歸問題有一些特殊性,除了模train數(shù)據(jù)時間戳需要按照順序劃分,在交叉驗證時注模型并不是那么容易的,尤其是那些沒有多少經(jīng)驗的用戶,這也就說明了為什么AutoML越來越火。AutoML希望將耗時的機器學習步驟進行自動化,以此來減輕建模者調優(yōu)的工作量,降低機器學習門檻。AutoML初級版本基本思路是將模型參數(shù)進行排列組合,逐一跑一遍,找最好的一組參數(shù)。現(xiàn)代AutoML把自動尋找最優(yōu)模型的這個任務抽象成了一個新的優(yōu)化問題,也就是:在一個給定的預算之前,AutoML將這些步驟切換成了新的優(yōu)化問題,在給定的范圍之內尋找最優(yōu)的目標指標,所使用的方法遠比簡單的網(wǎng)絡搜索或隨機搜索更加復雜。AutoML不僅可以用于網(wǎng)絡搜索,還可以用于機器學AnalyticsZooAutoML得到更優(yōu)的時序模型。同時減少預處理和特RayandRaySpark大數(shù)據(jù)集群之上。三、ScalableAutoMLforTimeTimeSeriesSolutionInAnalyticsAnalyticsZooTimeSeriesSolutionAutoML框架,框架中對流水法模塊,如時序預測和異常檢測。用戶可以基于自己的場景構造時序應用。TimeSeriesSolution有三AutoMLAnalyticsZooAIpipeline中的功能,使得整個自動化訓練過程更加高SoftwareAutoML框架中包含四個組件,用藍色方框表示,。FeatureTransformerModel是成,特征選擇等任務,Model可以做模型構建及訓練,以及多模型選擇。SearchEngine負責超參組合和啟動實驗,并且負責所有實驗在分布式集群上的調度。當超參過程結束之后,實驗結果進行收,pipeline。Pipeline是端到端的處理過程,包含預處理,特征工程和模型。Pipeline可以被存儲下來后再加載,做推理和增量式訓練,所有模塊都可以被擴展用于其AutoML框架中有兩個灰色的框,在計劃中但AutoML框架中有兩個灰色的框,目前還沒有實現(xiàn)。SearchEngine驅動整個訓練過程。,SearchEngine在構造的時候首先接收一個FeatureTransformerModelSearchpresets。SearchEngineSearchpresets確定Ray的集群上進行調度。每個實驗都有不同的參數(shù)組合來被收和分析,根據(jù)最好的參數(shù)組合和訓練好的模型構建pipeline,最終返給用戶。AglimpseofTimeSequencePredictorfitPredictor,啟動自動樣分布等等。目前已經(jīng)設置了一些公用的reciperecipe。另一個參數(shù)是distributed,表明搜索過程是分布式還是單機的,在單機模式下可以適當減少開銷。FitAPI用于評估,預測和增量式訓練。UseCaseSharing&ProjectZouwu是在前面所介紹的模塊的加持上實現(xiàn)的新的項目,專門為電信領域的時序應用所打造的,不KPIKPI的預測在電信應用KPIKPI預測進行有計劃的實施資源調節(jié),比如在特定時間段關閉一些閑networkslicingKPIProjectZouwuWIDE項KPIKPI。ProjectZouwu為同一個用例提供了兩種不ForecasterAutoML加持的AutoTSnotebookKPI的預測情況。用戶發(fā)現(xiàn)他們只需要對模SK下圖展示了與韓國電信所合作的項目,是KPIKPI預測檢查小2019Sparktalk,感使用了基于AutoML的時序預測方案,在很短很多時間之內就訓練出除了達到準確度要求的模型。analytics-zooAutoMLpipeline會獲得自動生成額外的特征,如是否處于節(jié)假日,忙時還是analytics-zooKPI需要AI技術和產品,從硬件到軟件,以及集成方案。ApacheSpark3.0Prometheus監(jiān)控的EMR技術專家周康為大家?guī)鞟pacheSpark3.0對Prometheus監(jiān)控的原生支持的spark3.0Prometheusspark3.0是如何實現(xiàn)對Prometheus更好的本地化的支持。一、用Prometheus監(jiān)控ApacheApacheSparkETLspark程序WebUI。第二塊主要是日些提醒的措施。Metricsspark里邊,同樣spark3.0以前,我們一般怎么去支持Prometheusjavaagent的方式。CustomsinkPushgatewayserverspark3.0中,就提出了新的目標。主要有兩個需要關注的設計點。一個就是只使用到新的endpointpipeline耦合,不引入對其他一些組件的依賴。另外一塊就是盡量重新使用二、本地化支持PrometheusSupportPrometheusmonitoringspark3.0PrometheusSparkmetricsDropWizardspark3.0中也做了一次升級,帶來jdk11,但是也存在小的負面點,就是它的數(shù)據(jù)格式有所變化,如下圖所示。ExecutorMetricsSourceexecutormemorymetrics做了增為了更好的做一些本地化支持的工作,主要加了兩個組建。一個是PrometheusServlet,它會生成PrometheusResourceexecutormemorymetricsendpoint。3.0spark_infometricdriverserviceannotationPrometheusservicediscovery的特性,從而更方便的進行一metrics的采集和監(jiān)控。三、在K8s(MonitoringinK8sPrometheusservicediscovery這一個特性。如下圖所示,有四個配置。SparkPispark-submit提交一個作業(yè)到K8s。Prometheusdriver端采集到監(jiān)控信息,就可以及時的做一些報警和預處理。第二個場景就是動態(tài)調度。Spark3.0K8s上動態(tài)調度。主要就是把一些配置打開,如下圖中K8s環(huán)境的動態(tài)調度。spark3.0中,添加了spark.sql.streaming.metricsEnabled6種metrics,如下圖所示。對一個流作業(yè),如果要使用PrometheusnameSpace等提前做好設置,避免后續(xù)出現(xiàn)數(shù)據(jù)的6metrics對于流作業(yè)都是比較關鍵的,都應該去監(jiān)控并且做一些報警處理。這里重點States-rowsTotalOOM。Prometheus3.0federation的模式。如下圖所示,左namespace1namespace2下面對流作業(yè)的一個監(jiān)控。他們都可以同時發(fā)送到一個Cluster-wisePrometheusspark_info等等這些信息做一些數(shù)EMRsparkonk8sPrometheus監(jiān)控進行了原生化的支持。目前我們javaagent,后續(xù)也會計劃去引進更多的原生支持。 阿里云開源大數(shù)據(jù)平臺實踐阿里云開源大數(shù)據(jù)平臺實踐 PAGE82 阿里云開源大數(shù)據(jù)平E-MapReduce(EMR)是構建在阿里云云服務器ECS上的開源Hadoop、Spark、HBase、Hive、FlinkPaaS產品。提供用戶在云上使用開源技術建設數(shù)據(jù)倉庫、離線2019杭州云棲大EMR如何助力云上開源Spark環(huán)境搭建起來,而且這個版本很快上線并且發(fā)布到E-MapReduce上線之后經(jīng)過四年的時間發(fā)展到現(xiàn)在,E-MapReduce4.0即將發(fā)布版本,并且在Hadoop3.0以及其他新功能。E-MapReduce將會為開源生態(tài)提供基礎平臺,在這個平臺上能夠讓大家選擇各E-MapReduce也希望能夠E-MapReduceE-MapReduce能夠更好地和云原生技術進行結合。E-MapReduceAWSEMRLike的產品,運行一年之AWS的純動態(tài)方式并不適合國內的場景,因此實現(xiàn)了第一次調整,更加重視常駐集群,并且Web控制臺能力,并且支持了集群的高可用和高安全,也在外圍Impala、Kafka、Druid等各個場景下的軟件,進而可以更好地支持各個業(yè)務場景。除此之外,HDFSKafka,阿里巴巴則提OSS、SLS、RDSHive、Spark、Flink、Rresto、DataWorks、DataVQuickBI進行融合。目前,云上大數(shù)據(jù)方案可以認為是半托管的服HadoopHDFS、AlibabaHDFSOSS。HadoopHDFS有三種存儲方式,EBS云盤存儲數(shù)據(jù)可靠,但是后臺有多個數(shù)據(jù)副本,因此成本較高,同時通過網(wǎng)絡AlibabaHDFS,這種方式數(shù)據(jù)可靠,成本中等,并且數(shù)據(jù)全部通過網(wǎng)絡傳輸,沒有本地計算。OSS標準存儲經(jīng)過阿里巴巴的改造和優(yōu)化之后可以直接在Hadoop中進NativeOSS,NativeOSS存儲數(shù)據(jù)可靠,成本較低,并且通用性比較好,但是性NativeOSSJindoFS,JindoFS做到了數(shù)據(jù)可靠,成MasterTask,Task節(jié)點只進行計算但是不會進行數(shù)據(jù)存儲,因此在云上執(zhí)行計算任務時,TaskStopInstanceTask節(jié)點,當高峰期過去之后,就可以釋放Task節(jié)Hadoop集群,其底層全OSSOSSHive、SparkPresto等,而且這些集群全部都是靈活可銷毀的。右側同樣建立HadoopGateway以及ClientOSSOSSHDFS,借助這種2015SSD等高效存ECSD12016年,E-MapReduceOSS的結合,當時因為帶寬限制,因此使用的客戶較少。到如今,針對之前的發(fā)展和合作經(jīng)驗,E-MapReduceJindoFS、AlibabaHDFS等進行存儲。IaaSE-MapReduce,IaaS層也經(jīng)歷了多次升級。第一代是D1I1D2OSS上面,所有的計算都放在動態(tài)集群上面進行,并且可以隨時進行計算伸縮,JindoFS為客E-MapReduce希望基于平臺實現(xiàn)更多的方案,希望能夠更好地賦能客戶的業(yè)務場景。比如在SparkStreamingSQL中,實現(xiàn)了將業(yè)務數(shù)據(jù)庫的數(shù)據(jù)實時同步到kudo中,可以實現(xiàn)OLAP分析的能力。未來,EMRK8S的融合,希望能夠幫助客戶更好地節(jié)約成本,讓用戶在阿里云內部可以K8SHadoop節(jié)點中作為計算E-MapReduce等進行動態(tài)賦能和線下集群結合起來使用EMRSpark-SQL簡介:這次的優(yōu)化里面,還有一個很好玩的優(yōu)化,就是我們引入的簡介:這次的優(yōu)化里面,還有一個很好玩的優(yōu)化,就是我們引入的NativeRuntime,如果說上Case的殺手锏,NativeRuntime就是一個廣譜大殺器,根據(jù)我們后期統(tǒng)計,引入NativeRuntime,可以普適性的提高SQLQuery15~20%的E2E耗時,這個在TPCDSPerf里面也是一個很大的性能提升點。E-MapReduceTPCDS-Perf榜單中提交了最新成績,相比第二名(2019年提交的記錄)2倍+TPCDSEMapueEMR%E-MapReduceTPCDSPerfSPARK引擎的技術深度以及技術實力,接下來會有一個系列的文章,去介紹我們2020年度打榜過程的一些優(yōu)化點還有思sparkspark應用開發(fā)者可以關注我們的系列文章,也歡迎來和我們交流,最關鍵的是,歡迎多投簡歷,加入阿里云E-MapReduce團隊,我們求賢若渴?。?!TPCDSPerfEMR10TB規(guī)模總共提交了三次成績。PerfTPCDS關注的指標有Flag,我們要在物理硬件保持不變的條件下,純靠軟件優(yōu)化提升2倍+,這樣子性能指標和性價比SparkSparkV2.4.3TPCDS99QueryLoad3PT6PS.其中社區(qū)SparkV2.4.3版本中Query14以及Query95因為OOMSpark200SQueryPS.QueryQuery783X性能提升,Query57100InMemoryTableCacheCTE簡單來說,就是盡量更合理的利用InMemoryTableCache去減少不必要的重復計算,比如說Query23A/BCTE優(yōu)化的模式匹配,識別出需要重復計算且比較耗時的操作,并利用InMemoryTable緩存,整體減少E2E時間FilterFilterDynamicPartition3.02Query64BloomFilterBloomFilterbeforeSMJBloomFilter,JoinSpillDiskPK/FKPK/FKConstraintJoinProjectJoin其GroupByGroupByKeysGroupByKeysGroupBy結果已經(jīng)沒有影響了,因為主鍵列已經(jīng)隱含了Unique的信息GroupByGroupByPushDownFastFastTableAnalyzeStatDecimalLongIntTPCDS99QueryDecimal化都是一些特殊Case的殺手锏,NativeRuntime就是一個廣譜大殺器,根據(jù)我們后期統(tǒng)計,引入NativeRuntimeSQLQuery15~20%E2ETPCDSPerf里面也是一NativeWholeStageCodeGenerationJavaWeldIR來真實運行。Weld詳細參考/。在整個項目里,WeldIR的替換其實是非常小的WeldIR能夠運行起來,我們還需要做以下的工作ExpressionWeldIRCodeGenTPCDS范圍內全支持OperatorsWeldIRCodeGenSortMergeJoinC++WeldIR代替(OffHeapUnsafeRowC&WeldBatch(JavaNativeRuntimeJNIWeldRuntime明顯不能這么玩其他高性能NativeSortMergeJoin、PartitionBy、CSVParsingWeldIR提供的接口無法直接實現(xiàn),我們通過C++來實現(xiàn)這些算子的Native執(zhí)行Spark-SQL有興趣的同學們可以多多關注,多多捧場。同時,EMRHC,請有興趣者聯(lián)系林學維(峰七也可郵箱xuewei.linxuewei@!!!EMRSpark-SQLRuntimeFilterEMRSpark-SQLRuntimeFilter2019SparkSQLCatalystOptimizer10TB99query35%EMR團隊高級開發(fā)工程師,大數(shù)據(jù)領域技術愛好Spark、HiveEMR產品中開源計算引擎的優(yōu)化TPC-DS717storechannel為例,事實表和維度表的關聯(lián)關系如下所示:分析TPC-DS全部99個查詢語句不難發(fā)現(xiàn),絕大部分語句的過濾條件都不是直接作用于事實表,join來間接完成。因此,優(yōu)化器很難直接利用事實表索引2019SparkSQLCatalystOptimizerRuntimeFilter10TB99query35%RuntimeFilter動態(tài)分區(qū)裁剪:事實表以日期列(date_sk)date_dimjoin時,optimizerdate_dimdate_sk取值,并在掃描事實表前過濾掉非分區(qū)列動態(tài)過濾:當事實表與維度表的join列為非分區(qū)列時,optimizer動態(tài)構建和收集維joinMin-MaxRangeBloomFilter,并在掃描事實表時下推至存儲層,利用存儲層索引(如Parquet、ORCFile的zonemap索引)來減少掃描數(shù)據(jù)量。RuntimeFilterquery進行了細致的性queryjoinRuntimeFilter對各個query的性能提升效果后,我們發(fā)現(xiàn):date_dimjoinRuntimeFilterZoneMapload階段沒有針對非分區(qū)列做任何聚集操作(Clustering),每個zone的取值一般也稀疏分散在各個列的值域中。loadjoinZ-Order排序。loadTPC-DS評測總分反而下降。同時,由于joinRuntimeFilter當事實表(lineorder)multi-join時,可將所有維度表的過濾信息下推joinRuntimeFiltermulti-jointree而不是局部binary-jointree。其優(yōu)化效果是即使joinordering為badcase,無用的事實表數(shù)據(jù)也能夠被盡早過濾掉,即讓查詢執(zhí)行更加robust。SparkCBOJoin-ReorderjoinorderingLIPfiltersSparkBroadcastHashJoin基于過濾條件可以傳遞至復雜multi-jointree的任意節(jié)點這一思想去發(fā)散思考,我們發(fā)現(xiàn),當multi-jointreescan,從而減少后續(xù)事實表SortMergeJoin等耗時算子執(zhí)行時所需處理的數(shù)據(jù)量。以一個簡化版的query64為例:withcs_uiaswithcs_uias,sum(cs_ext_list_price)assalefromcatalog_saleswherecs_item_sk=andcs_order_number=cr_order_numbergroupbycs_item_sk)selecti_product_name,i_item_skfromstore_saleswheress_item_sk=i_item_skandss_item_sk=sr_item_skandss_ticket_number=sr_ticket_numberandss_item_sk=cs_ui.cs_item_skandi_colorin('almond','indian','sienna','blue','floral','rosy')andi_current_pricebetween19and19+10andi_current_pricebetween19+1and19+15groupbyi_product_nameplantree考慮未實現(xiàn)維度表過濾廣播的執(zhí)行流程,store_sales數(shù)據(jù)經(jīng)過RuntimeFilter和BroadcastHashJoinjoinSortMergeJoin算子。但如果將LIPfilter下推至4張事實表的scan算子(無需下推至存儲層),不僅減少了join數(shù)據(jù)量,也減少了catalog_sales和catalog_returns表join后的group-byaggregation數(shù)據(jù)量。LIP在optimizer層,我們在原版RuntimeFilter的SyntheticJoinPredicate規(guī)則后插入PropagateDynamicValueFilter規(guī)則,將合成的動態(tài)謂詞廣播至所有合法的join子樹中;同時結合原有的謂詞下推邏輯,保證動態(tài)謂詞最終傳播到所有相關的scan算子上。在算子層,LIPfilters的底層實現(xiàn)可以是HashMap或BloomFilter,針對TPC-DS的數(shù)據(jù)特性,我們選擇BitMap作為廣播過BitMap本身是精確的(ExactFilter),可以結合主外鍵約束信息進一步做semi-join消除優(yōu)化?;谥魍怄I約束的優(yōu)化規(guī)則將在系列后續(xù)文章做詳細介紹。應用該優(yōu)化后,query64177秒降低至632.8Join使用BloomFilter來優(yōu)化大表join是一種常見的查詢優(yōu)化技術,比如在論文《BuildingaHybridWarehouseEfficientJoinsbetweenDataStoredinHDFSandEnterpriseWarehouse》中提出對join兩表BloomFilterzig-zagjoinjoinTPC-DS測試query93為例,store_salesstore_returnsjoinstore_sales原始數(shù)BloomFilter的構建和應用都存在較高的計算開銷,對于selectivityjoin,盲目使用這一優(yōu)化可能反而導致性能退?;陟o態(tài)stats的joinselectivity估算往往誤差,Spark現(xiàn)有的CBO優(yōu)化BloomFilterjoinSparkAdaptiveExecution(AE)BloomFilterjoin優(yōu)化規(guī)則。AEstagestagestats信息重新調整后續(xù)的物理執(zhí)行計劃。目前主reducestageskewshuffleSortMergeJoinAEstatsjoinsizeBloomFilter(buildside),如果是,則buildside和streamside的scanstage會依次串行提交執(zhí)行;否則這兩個stage將并行執(zhí)buildsidescanstage執(zhí)行完成后,AEsizejoinhistogram進行代價估算,并決定最終走BroadcastHashJoin、BloomFilter-SortMergeJoinJoin還是原本的BloomFilter-SortMergeJoinJoin 阿里云開源大數(shù)據(jù)平臺實踐阿里云開源大數(shù)據(jù)平臺實踐 PAGE102 sideshuffleBloomFilterstreamsidescanstageBloomFilterBloomFilterBuildBloomFilerNative-InBloomFilterRDDaggregate來合并各個數(shù)據(jù)分片的BloomFiler會導致driver成為數(shù)據(jù)傳輸和bitmap合并計算的性能瓶頸;使用RDDtreeAggregate實現(xiàn)并行分層合并顯著降低了整體的構建延遲。在過濾階段,Native-InBloomFilterscan算子中合SparkSIMDnative函數(shù),CPUBlockedBloomFilter算法實現(xiàn),該算法通過犧牲少量的bitmap存儲空間來換取訪存時更低的CPUcachemiss率。應用該優(yōu)化后,query93225秒降低至504.5EMRSpark-SQLNativeCodegenFramework作者:周克勇,花名一錘,阿里巴巴計算平臺事業(yè)部EMR團隊技術專家,大數(shù)據(jù)領域技術愛好者,SparkEMR產品中開源計算引擎的優(yōu)化工作。SparkSQL多年來的性能優(yōu)化集中在Optimizer和Runtime兩個領域。前者的目的是為了獲得最優(yōu)的執(zhí)世界(Impala,MaxCompute)Batch-Based(Spark,Hive)MPP-Based(Impala,Presto),甚至無HTAP領域(HyPerADB)Optimizer層面考慮的都是非常類似的問題:Stats收集,CostJoinReorderCTE,特定場景下采用不同的空間搜索策略(如遺傳算法vs.動態(tài)規(guī)劃),但方法大體是相同的。長期以來,RuntimeMapReduce剛出來時網(wǎng)絡帶寬Runtime領域重要的優(yōu)化方向。CPU性能的兩個主流技術是以MonetDB/X100[2](VectorWise[3])為代表的向量化(VectorizedProcessing)HyPer[5][6]為代表的代碼生成(CodeGen)技術(Spark跟進的是CodeGen[9])SQLRecord,向:算子融合。簡單來說,CodeGen框架通過打破算子之間的界限把火山模型“壓平”了,把原來迭代器for循環(huán),同時生成語義相同的代碼(Java/C++/LLVM),緊接著用對應的工具鏈編譯生class(Java)so(C++,LLVM)去執(zhí)行,從而把解釋執(zhí)行轉變成了編譯執(zhí)行。 阿里云開源大數(shù)據(jù)平臺實踐阿里云開源大數(shù)據(jù)平臺實踐 PAGE104 束算子都基本處于寄存器中,不會物化到內存。CodeGenSIMD等優(yōu)化。HyPer[6],Pelonton[7]等。ExpressionCodegen,到后來參考HyPerWholeStageCodegen,再經(jīng)過多年的打磨,SparkSQLCodegen技術已趨成熟,性能也獲得了兩次數(shù)量級的躍升。然而,也許是出于可維護性或開發(fā)者接受度的考慮,SparkSQLCodegenJava代碼,并沒有嘗試NativeCode(C/C++,LLVM)JavaNativeCode還是有一定的OverheadSIMD(Javafeature),Prefetch等語義,更重要的是,NativeCode直接操作裸金屬,易于極致壓榨硬件性能,對一些加速器(GPU)或新硬件(AEP)的支持也更方便?;谝陨蟿訖C,EMRSparkSQLNativeCodegenSparkSQL換了引擎,新引20%EMRNativeCodegen框架。如何集成到針對生成什么代碼,結合調研的結果以及開發(fā)同學的技術棧,有三個候選項:C/CLLVM,WeldIR。HyPer的測評數(shù)據(jù),C++LLVM高了一個數(shù)量級。querycase編譯時間比運行時間還要長。基于這個考慮,我們排C/C++LLVMNativeCodeGenHyPer,Impala,MaxCompute,ADBLLVM作為目標代碼。LLVM對LLVMHyPer僅把算子核心邏輯用LLVM生成,其他通用功能(如spill,復雜數(shù)據(jù)結構管理等)C++編寫并提前編譯好。即使LLVM+C++節(jié)省了不少工作量,對我們來說依然不可接受,因此我們把目光轉向了第三個選項:WeldIR(IntermediateRepresentation)。WeldWeldShoumikPalkar是MateiZahariaSpark的作者。Weld最初想解決的問題是不同libpandasnumpypandasnumpy讀取內存進行計算,對于極度優(yōu)lib來說,內存的寫入和讀取的時間可能會遠超計算本身。針對這個問題,WeldCommonRuntimeIR,再加上惰性求值的特性,只需(簡單)libWeld的規(guī)范,libWeldRuntime,WeldRuntimelibPipeline,從而省去此外,WeldC代碼,可以方便調用三方庫。WeldIRRuntime。WeldIR面向數(shù)據(jù)分析進行設計,因此語義上跟SparkSQLUnsafeRowBatchstructvecdict,能較好的表達SQL里重度Hash結構。操作層面,WeldIRmap,filteriterator等,配合+Project語義,具體含義是若第二列大于10,則返第一列IRgroupBygroupByWeldWeldAPI提供了兩個核型接口:weld_module_compile,WeldIR編譯成可執(zhí)行模塊(module)weld_module_run,執(zhí)行編譯好的模塊。WeldIRLLVM,C++方便很多)WeldIR作為目標代碼。SparkSQL原有的CodeGen/article/727277。我們參考了SparkWholeStageCodegen。Producer-ConsumerWholeStageCodeGenExec負責Weld不支持的算子Java,WeldIRvecWeldIRJavaCodegenStageRecord的模式,取而代之FilterProject,F(xiàn)ilter算子生成的IR如下,過濾掉第二列<=10的數(shù)據(jù):Project算子生成的IR如下,返第一列數(shù)據(jù)WeldLoop-Fusion優(yōu)化可以極大簡化CodeGenLoop-Fusion過SQL(3層以上)甚至無法在有限時間給出結果。當時面臨兩個選擇:修改WeldCodeGenLoop-Fusion之后的代碼,我們選擇了后者。重構后生成1,2,11行由Scan算子生成,3,4,5,6,8,9,10Filter算子生成,7Project算子|v:vec[{i32,i32}]||v:vec[{i32,i32}]|n.$1>這個優(yōu)化使得編譯時間重亞秒級別FallbackWeldWeldSortMergeJoin,Rollup等。即使是NativeCodeGenJavaCodeGen接管。Fallback的粒度:是算子級別還是Stage級別?Pipeline的斷裂。如上文所述,CodeGenStagePipeline化,打破算RecordFallbackStageNativeRuntime,另一部分走JavaRuntime,則兩者連接處無可避免存在中間數(shù)據(jù)物化,這個開銷通常會大于NativeRuntime帶來的收益?;谝陨峡紤],我們選擇了StageFallbackCodeGen階段一旦遇到不支持的算子,則整個80%。SparkFallbackSpark集成了。Spark的WholeStageCodegenExecTableScan,ShuffleRead,還是Scan)RowIterator,如下圖所示:StageFallbackJavaRuntimeNativeRuntimeRowBatch/RowIteratorWeld認識ShuffleReader/BroadCastRowIteratorRowBatch,只不過Spark反序列化后轉換成RowIterator后再喂給CodeGenModule,RowBatch包裝成RowIteratorNativeRuntimeRowBatch。解決辦法呼之欲出了:把RowBatchWeldvecRowBatch喂WeldRowBatch也是滿足某種規(guī)范的字節(jié)流而已,Spark也提供了OffHeap模式把內存直接存堆外(僅針對ScanStageShuffle數(shù)據(jù)和Broadcast數(shù)據(jù)需要讀到堆外),Weld可以直接訪問。SparkUnsafeRow的內存布局大致如下:針對確定的schema,nullbitmapfixed-lengthdata的結構是固定的,可以映射成struct,而針對var-lengthdatacopy到連續(xù)的內存地址中。如此一來,針對無變長數(shù)據(jù)的Filter+Project的例子,一條RecordintUnsafeRow的內存布局如下(為了對齊,Spark8字節(jié))。顯而易見,這個結構可以很方便映射成WeldRowBatchWeldInputWeldOutputRowBatch本質是以上過程的逆向操作,不再贅述。解決了Java和NativeStage的轉換并喂給ShuffleWriter。如下圖所示:本文介紹了EMR團隊在SparkNativeCodegenNativeWeldDict大家感興趣的任何內容歡迎溝通MakingSenseofPerformanceinDataAnalyticsFrameworks.KayMonetDB/X100:Hyper-PipeliningQueryExecution.PeterVectorwise:aVectorizedAnal

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論