我正在研究地點如何影響Spark sql作業中的任務讀取時間。NODE_LOCAL與RACK_LOCAL任務讀取時間
THE TEST:
- 爲了便於I運行的執行表掃描和沒有返回數據,任務花費時間讀取塊,然後對其進行處理一個簡單的SQL查詢的analisys。
- 查詢:「CREATE TABLE target_table AS SELECT * FROM source_table WHERE column_name> 1000」。
- 選擇性等於0(即column_name不會超過1000)
- 已使用一個執行程序創建Spark上下文,以便觀察NODE_LOCAL和RACK_LOCAL任務。
- 我的集羣由
與千兆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平均任務持續時間。
謝謝, 洛倫佐
沒關係,但是當在該節點上被分配的執行器的有8個VCore,所有這些都在本地HDD上競爭,以防NODE_LOCAL增加獲取時間。相反,8個VCores在不同的遠程硬盤上遠程檢索它們的塊將需要支付「網絡」部分,但是應該有很大的好處,因爲遠程硬盤的過載小得多。 – loba76