2016-03-18 40 views
0

我正在研究地點如何影響Spark sql作業中的任務讀取時間。NODE_LOCAL與RACK_LOCAL任務讀取時間

THE TEST:

  1. 爲了便於I運行的執行表掃描和沒有返回數據,任務花費時間讀取塊,然後對其進行處理一個簡單的SQL查詢的analisys。
  2. 查詢:「CREATE TABLE target_table AS SELECT * FROM source_table WHERE column_name> 1000」。
  3. 選擇性等於0(即column_name不會超過1000)
  4. 已使用一個執行程序創建Spark上下文,以便觀察NODE_LOCAL和RACK_LOCAL任務。
  5. 我的集羣由

與千兆swithch(1個千兆位點對點)連接在一起的一個機架裝有每8芯7層的節點組成得到我的問題我將前點想說明幾個假設:

  • 每個任務處理
  • 由於數據局部性優選一個單獨的塊,驅動程序分配NODE_LOCAL任務第一和然後RACK_LOCAL那些
  • 當不止一個內核電壓我s ^分配,任務最初競爭的本地硬盤上獲取他們的塊,然後取上其他節點的遠程完成
  • 網絡吞吐量跑贏硬盤驅動器的吞吐量,因此在壓力下硬盤是瓶頸

最後的問題:)

當許多VCores分配(例如8)在一個執行器中,考慮到上述假設,我期望RACK_LOCAL任務的讀取時間比NODE_LOCAL的讀取時間快。

根據我的測試,Insted,RACK_LOCAL讀取時間平均比NODE_LOCAL慢幾個百分點,如here所示。很明顯,我錯過了一些東西,但是我沒有理由就出來了。這是什麼東西?

鏈接的figure顯示增加數量的VCores的NODE_LOCAL和RACK_LOCAL平均任務持續時間。

謝謝, 洛倫佐

回答

3

其實我發現,我的假設之一是不正確的:「網絡吞吐量跑贏硬盤驅動器的吞吐量,因此在壓力下硬盤是瓶頸」

一個千兆交換機在平均0.8的速度執行意味着兩個節點以100MB/s的網絡吞吐量鏈接在一起。硬盤可以正常讀取速度爲150MB/s。

作爲遠程讀取和網絡傳輸在管道中進行,NODE_LOCAL和RACK_LOCAL之間的小差異是由於其讀取和發送之間發生的遠程緩衝時間

2

RACK_LOCAL意味着一個塊被從遠程節點上的HDD讀出,然後被傳遞通過網絡。 NODE_LOCAL表示在此節點上正在讀取塊,因此省略「網絡」部分,因此一般來說NODE_LOCAL應該更快。

+0

沒關係,但是當在該節點上被分配的執行器的有8個VCore,所有這些都在本地HDD上競爭,以防NODE_LOCAL增加獲取時間。相反,8個VCores在不同的遠程硬盤上遠程檢索它們的塊將需要支付「網絡」部分,但是應該有很大的好處,因爲遠程硬盤的過載小得多。 – loba76