真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Spark的基礎介紹和操作調優(yōu)

本篇內容介紹了“Spark的基礎介紹和操作調優(yōu)”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

本篇內容介紹了“Spark的基礎介紹和操作調優(yōu)”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Spark 基礎介紹

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了巴楚免費建站歡迎大家使用!

在討論spark調優(yōu)之前,先看看spark里的一些概念。

action

Action是得到非RDD結果的RDD操作。如Spark中有如下常見action操作: reduce, collect, count, first, take, takeSample, countByKey, saveAsTextFile

job

每個spark的action會被分解成一個job。

stage

一個job會被分成多組task,每組task稱為一個stage。stage的劃分界限為以下兩種task之一:

shuffleMapTask - 所有的wide transformation之前,可以簡單認為是shuffle之前

resultTask - 可以簡單認為是take()之類的操作

partition

RDD 包含固定數(shù)目的 partition, 每個 partiton 包含若干的 record。narrow tansformation

(比如 map 和 filter)返回的 RDD,一個 partition 中的 record 只需要從父 RDD 對應的 partition 中的 record 計算得到。同樣narrow transformation不會改變partition的個數(shù)。

task

被送到executor上執(zhí)行的工作單元; 一個task只能做一個stage中的一個partition的數(shù)據(jù)。

操作調優(yōu)

調整在 stage 邊屆時的 partition 個數(shù)經??梢院艽蟪潭壬嫌绊懗绦虻膱?zhí)行效率;

associative reductive operation, 能使用reduceByKey時不使用groupByKey,因為grouByKey會把所有數(shù)據(jù)shuffle一遍,而reduceByKey只會Shuffle reduce的結果。

輸入和輸出結果不一樣時,不使用reduceByKey,而使用aggregateByKey;aggregateByKey

: Aggregate the values of each key, using given combine functions and a neutral "zero value". This function can return a different result type, U, than the type of the values in this RDD, V. Thus, we need one operation for merging a V into a U and one operation for merging two U's, as in scala.TraversableOnce. The former operation is used for merging values within a partition, and the latter is used for merging values between partitions. To avoid memory allocation, both of these functions are allowed to modify and return their first argument instead of creating a new U.

不要用flatMap-join-groupBy的模式,可以用cogroup;

當兩個reduceByKey的結果join時,如果大家的partition都一樣,則spark不會在join時做shuffle;

當一個內存能放得下的數(shù)據(jù)集join時,可以考慮broadcast而不使用join;

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)scala> broadcastVar.valueres0: Array[Int] = Array(1, 2, 3)資源調優(yōu)

spark中的資源可以簡單歸結為CPU和內存,而以下的參數(shù)會影響內存和CPU的使用。

executor 越大并行性越好,越大每個executor所有的內存就越小;

core,越大并行性越好;

HDFS client 在大量并發(fā)線程是時性能問題。大概的估計是每個 executor 中最多5個并行的 task 就可以占滿的寫入帶寬。

partition,如果比excutor*core小則很傻;越多每個partition占用的內存就越少;足夠大以后對性能提升不再有用。

我naive的認為應該這樣調整:

core = min(5,cpu核數(shù));

executor = instance數(shù) * cpu核數(shù) / core

平均每instance的executor個數(shù)決定executor.memory,從而決定shuffle.memory和storage.memory;

估計總數(shù)據(jù)量,即最大的shuffle時的數(shù)據(jù)大?。╯park driver運行記錄中會有shuffle size);

用4的結果除以3得到partition數(shù),如果很小,把partition設成和(executor*core)的若干倍.


分享題目:Spark的基礎介紹和操作調優(yōu)
標題路徑:http://weahome.cn/article/cjpps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部