成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

4個簡單技巧,可提高您的Apache Spark工作性能

大數據 Spark
在開發Spark應用程序時,最耗時的部分之一是優化。 在此博客文章中,我將提供一些性能提示,以及(至少對我而言)啟動時可能會使用的未知配置參數。

使您的Apache Spark應用程序運行速度更快,而對代碼的更改最少!

[[326152]]

介紹

在開發Spark應用程序時,最耗時的部分之一是優化。 在此博客文章中,我將提供一些性能提示,以及(至少對我而言)啟動時可能會使用的未知配置參數。

因此,我將介紹以下主題:

  • 多個小文件作為源
  • 隨機分區參數
  • 強制廣播Join
  • 分區vs合并vs隨機分區參數設置

我們可以改善什么?

1. 使用多個小文件?

OpenCostInBytes(來自文檔)—可以同時掃描打開文件的估計成本(以字節數衡量)。 將多個文件放入分區時使用。 最好高估一下,然后,具有較小文件的分區將比具有較大文件的分區(首先安排)更快。 默認值為4MB。

spark.conf.set("spark.files.openCostInBytes", SOME_COST_IN_BYTES)

我對包含12,000個文件的1GB文件夾,包含800個文件的7.8GB文件夾和包含1.6k個文件的18GB文件夾進行了測試。 我的目的是弄清楚輸入文件是否較小,最好使用低于默認值的文件。

因此,當測試1GB和7.8GB文件夾時-肯定是較低的值,但是測試大約11MB的文件時,較大的參數值會更好。

使用接近您的小文件大小的openCostInBytes大小。 這樣會更有效率!

2. 隨機分區

開始使用Spark時,我莫名其妙地想到了在創建Spark會話時設置的配置是不可變的。 天哪,我怎么錯。

因此,通常,在進行聚集或聯接時,spark分區在spark中是一個靜態數字(默認為200)。 根據您的數據大小,這會導致兩個問題:

  • 數據集很小-200太多,數據分散且效率不高
  • 數據集巨大-200太少了。 數據被浪費了,我們沒有充分利用我們想要的所有資源。

因此,在遇到此類問題時遇到了一些麻煩,我在Google上花費了很多時間,發現了這個美麗的東西

  1. spark.conf.set("spark.sql.shuffle.partitions", X) 

可以在運行時中途隨時隨地更改此整潔的配置,它會影響設置后觸發的步驟。 您也可以在創建Spark會話時使用這個壞男孩。 在對聯接或聚合進行數據混排時,將使用此分區數量。 還獲得數據幀分區計數:

  1. df.rdd.getNumPartitions() 

您可以估計最合適的混搭分區數,以進行進一步的聯接和聚合。

也就是說,您有一個巨大的數據框,并且想要保留一些信息。 這樣就得到了大數據幀的分區數。 將shuffle分區參數設置為此值。 這樣一來,加入后就不會成為默認值200! 更多并行性-我們來了!

3. 廣播Join

非常簡單的情況:我們有一個龐大的表,其中包含所有用戶,而我們的表中包含內部用戶,質量檢查人員和其他不應包含在內的用戶。 目標只是離開非內部人員。

  • 讀兩個表
  • Huge_table 左防聯接小表

它看起來像是一個簡單且性能明智的好解決方案。 如果您的小型表小于10MB,則您的小型數據集將在沒有任何提示的情況下進行廣播。 如果在代碼中添加提示,則可能會使它在更大的數據集上運行,但這取決于優化程序的行為。

但是,假設它是100-200MB,并且提示您不要強制廣播它。 因此,如果您確信它不會影響代碼的性能(或引發一些OOM錯誤),則可以使用它并覆蓋默認值:

  1. spark.conf.set("spark.sql.autoBroadcastJoinThreshold", SIZE_OF_SMALLER_DATASET) 

在這種情況下,它將廣播給所有執行者,并且加入應該工作得更快。

當心OOM錯誤!

4. 分區vs合并vs隨機分區配置設置

如果您使用的是Spark,則可能知道重新分區方法。 對我來說,來自SQL后臺方法合并的方式有不同的含義! 顯然,在分區上進行火花合并時,其行為方式有所不同-它移動并將多個分區組合在一起。 基本上,我們將數據改組和移動減到最少。

如果我們只需要減少分區數,則應該使用合并而不是重新分區,因為這樣可以最大程度地減少數據移動并且不會觸發交換。 如果我們想更均勻地在分區之間劃分數據,請重新分區。

但是,假設我們有一個重復出現的模式,我們執行聯接/轉換并得到200個分區,但是我們不需要200個分區,即100個甚至1個。

讓我們嘗試進行比較。 我們將讀取11MB的文件夾,并像以前一樣進行匯總。

通過將數據幀持久存儲在僅存儲選件磁盤上,我們可以估計數據幀大小。 所以small_df只有10 MB,但是分區數是200。等等? 平均每個分區可提供50KB的數據,這效率不高。 因此,我們將讀取大數據幀,并將聚合后的分區計數設置為1,并強制Spark執行,最后我們將其算作一項操作。

這是我們三種情況的執行計劃:

4個簡單技巧,可提高您的Apache Spark工作性能

> Setting shuffle partition parameter

4個簡單技巧,可提高您的Apache Spark工作性能

> Coalesce action

4個簡單技巧,可提高您的Apache Spark工作性能

> Repartitioning

因此,在所有可見的設置中,我們不會調用Coalesce / Exchange的其他步驟(重新分區操作)。 因此,我們可以通過跳過它來節省一些執行時間。 如果我們看一下執行時間:Shuffle Partition設置在7.1分鐘,Coalesce 8.1,Repartition 8.3中完成。

這只是一個簡單的示例,它仍然顯示了通過設置一個配置參數可以節省多少時間!

摘要

關于如何使您的Apache Spark應用程序更快,更高效地運行,有許多小而簡單的技巧和竅門。 不幸的是,使用Spark時,大多數情況下解決方案都是單獨的。 為了使其正常工作,大多數時候您必須了解Spark內部組件的內幕,并從頭到尾閱讀文檔多次。

在本文中,我提到了如何更快地讀取多個小文件,如何強制建議廣播連接,選擇何時使用shuffle分區參數,合并和重新分區。

我希望它很有用,并會在您開發Apache Spark應用程序的過程中為您提供幫助!

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2017-11-06 13:25:25

MySQL數據庫技巧

2024-10-25 15:48:21

GPUPyTorch編程

2020-03-25 08:00:32

Kubernetes節點工作

2020-08-04 08:30:18

JS數組技巧

2017-02-05 17:33:59

前端優化Web性能

2020-09-23 09:20:58

代碼Java字符串

2021-05-12 09:00:00

WebReactJavaScript

2017-11-17 08:56:59

Java性能優化技巧

2009-12-23 17:07:37

WPF性能

2015-11-16 10:03:10

效率

2023-10-13 12:56:23

工作效率VS Code技巧

2020-06-04 15:55:54

GitHub代碼開發者

2017-05-18 09:16:54

前端CSS技巧

2016-10-21 16:05:44

SQLSQL SERVER技巧

2011-08-05 10:55:53

2019-08-30 14:25:03

Vim命令Linux

2024-04-09 14:21:15

HTML開發

2019-03-19 14:20:58

Linux在機器學習腳本

2009-06-17 10:13:03

提高EJB性能

2022-01-09 23:06:39

JavaScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜网站视频 | 亚洲色视频 | 中文字幕一区二区不卡 | 欧美色综合| 日日操日日干 | 久草欧美视频 | 天天干视频 | 成人高潮片免费视频欧美 | 欧美日韩在线观看一区 | 台湾av在线 | 欧美在线视频网站 | 日韩一二区在线 | 久久久久久久久久久久91 | 黄色一级片在线播放 | 国产精品视频999 | 国产精品中文字幕一区二区三区 | 国产精品美女www爽爽爽 | 日韩欧美在线播放 | 97精品超碰一区二区三区 | 日韩精品一区二区三区四区 | 亚洲国产一区视频 | 黄色一级大片在线免费看产 | 日韩毛片免费视频 | 在线一区二区三区 | 亚洲一区二区在线 | 国产精品美女在线观看 | 亚洲精品乱码久久久久久蜜桃 | 在线不卡视频 | 亚洲 成人 av | 亚洲成人精品 | 亚洲va国产日韩欧美精品色婷婷 | 国产精品国产三级国产aⅴ中文 | 狠狠久 | 99久热| 国产精品久久久久久久久久久久久 | www.日韩av.com | 羞羞色视频 | 国产精品久久久久久久毛片 | 久久久久久久久久久久一区二区 | 日韩欧美不卡 | 国产91在线 | 中日 |