Partition in Spark

What is Spark Partition?

分區(qū)(Partitioning)實(shí)質(zhì)上是將數(shù)據(jù)劃分為多個(gè)部分踪蹬。在分布式系統(tǒng)中萍歉,分區(qū)被定義為將大數(shù)據(jù)集分割后存儲(chǔ)為集群的多個(gè)文件塊。
基于數(shù)據(jù)局部性的原則,Worker節(jié)點(diǎn)拉取靠近自己的數(shù)據(jù)執(zhí)行計(jì)算任務(wù)。通過(guò)分區(qū)猪腕,網(wǎng)絡(luò)IO請(qǐng)求量大大降低,從而使得數(shù)據(jù)處理的速度大大提高钦勘。

數(shù)據(jù)的分區(qū)是基于 RDD 實(shí)現(xiàn)的陋葡,不同分區(qū)的數(shù)據(jù)可以在不同的節(jié)點(diǎn)上被不同計(jì)算任務(wù)。RDD 中單個(gè)分區(qū)內(nèi)的數(shù)據(jù)只會(huì)被同一個(gè)任務(wù)(Task)處理彻采。

Partition Techniques

HashPartitioner

HashPartitioner 是 Spark 中的默認(rèn)分區(qū)方法脖岛,基于 Java 中 Object.hashcode() 實(shí)現(xiàn)分區(qū)功能. hashcode() 的作用是保證相等的對(duì)象擁有相同的 hashcode.

RangePartitioner

如果 RDD 中的數(shù)據(jù)是可排序的,則可以選擇 RangePartitioner 將數(shù)據(jù)記錄(Record)劃分為幾乎相等的區(qū)間颊亮。Spark 通過(guò)對(duì) RDD 內(nèi)數(shù)據(jù)進(jìn)行采樣的方法來(lái)確定區(qū)間邊界柴梆。

RangePartitioner 首先基于鍵值對(duì)數(shù)據(jù)記錄排序,然后依據(jù)傳入的分區(qū)數(shù)參數(shù)對(duì)記錄進(jìn)行分區(qū)终惑。

CustomPartitioner

通過(guò)繼承 Partitioner 類绍在,可以創(chuàng)建新的分區(qū)方法,以實(shí)現(xiàn)自定義分區(qū)數(shù)量并決定每個(gè)分區(qū)中存儲(chǔ)什么數(shù)據(jù)記錄雹有。

Code Snippets

Partition

分區(qū)在 Spark 中被定義為特質(zhì)(Trait)偿渡,如下所示:

/**
 * An identifier for a partition in an RDD.
 */
trait Partition extends Serializable {
  /**
   * Get the partition's index within its parent RDD
   */
  def index: Int

  // A better default implementation of HashCode
  override def hashCode(): Int = index

  override def equals(other: Any): Boolean = super.equals(other)
}

Partition 的定義中,我們發(fā)現(xiàn)霸奕,分區(qū)中最重要的幾個(gè)元素是:

  1. index, 即該記錄在父 RDD 中的分區(qū)編號(hào)溜宽,通常一條記錄所屬的分區(qū)可由其在父 RDD 中的分區(qū)編號(hào)推導(dǎo)得到;
  2. hashCode(), 該分區(qū)的 hashCode;
  3. equals(other), 用于判斷兩個(gè)分區(qū)是否相等的方法质帅。

Partitioner

Partitioner 類在 Spark 中的定義如下:

abstract class Partitioner extends Serializable {
  def numPartitions: Int
  def getPartition(key: Any): Int
}

從定義中可以看到适揉,一個(gè)具體的分區(qū)方法必須實(shí)現(xiàn)兩個(gè)方法:

  1. numPartitions, 返回該分區(qū)方法最終將劃分出的類別總數(shù)量;
  2. getPartition(key), 根據(jù)傳入的鍵值煤惩,確定該記錄所屬的分區(qū)嫉嘀。

Experiences

Spark 中通過(guò) spark.default.parallelism 確定了 RDD 中分區(qū)的數(shù)量,通常取值為集群中可用核心(Core)數(shù)量的 2~3 倍魄揉。

References

  1. Understanding Partitioning in Spark | Partitioning Techniques - Acadgild
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剪侮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子洛退,更是在濱河造成了極大的恐慌瓣俯,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兵怯,死亡現(xiàn)場(chǎng)離奇詭異彩匕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)摇零,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門推掸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人驻仅,你說(shuō)我怎么就攤上這事谅畅。” “怎么了噪服?”我有些...
    開(kāi)封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵毡泻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我粘优,道長(zhǎng)仇味,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任雹顺,我火速辦了婚禮丹墨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嬉愧。我一直安慰自己贩挣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布没酣。 她就那樣靜靜地躺著王财,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裕便。 梳的紋絲不亂的頭發(fā)上绒净,一...
    開(kāi)封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音偿衰,去河邊找鬼挂疆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛下翎,可吹牛的內(nèi)容都是我干的囱嫩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼漏设,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼墨闲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起郑口,我...
    開(kāi)封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鸳碧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后犬性,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞻离,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年乒裆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了套利。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肉迫,靈堂內(nèi)的尸體忽然破棺而出验辞,到底是詐尸還是另有隱情,我是刑警寧澤喊衫,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布跌造,位于F島的核電站,受9級(jí)特大地震影響族购,放射性物質(zhì)發(fā)生泄漏壳贪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一寝杖、第九天 我趴在偏房一處隱蔽的房頂上張望违施。 院中可真熱鬧,春花似錦瑟幕、人聲如沸醉拓。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)亿卤。三九已至,卻和暖如春鹿霸,著一層夾襖步出監(jiān)牢的瞬間排吴,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工懦鼠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钻哩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓肛冶,卻偏偏與公主長(zhǎng)得像街氢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子睦袖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355