2016-08-24 40 views
1

當我發佈同時作業服務器請求時,他們似乎總是處於FIFO模式。儘管我盡了最大的努力來啓用FAIR調度程序,我如何確保我的請求始終並行處理?如何使用Spark-Jobserver配置FAIR調度程序?

背景:在我的集羣有一個SparkContext到用戶可以發佈請求來處理數據。每個請求可能會作用於不同的數據塊,但操作始終是相同的。一小時一分鐘的工作不應該等待大量的一小時工作完成。

直覺上我希望下面的情況發生(見下面我的配置): 上下文公平的游泳池內運行。每次用戶發送處理某些數據的請求時,Spark都應該拆分公平池並提供一部分羣集資源來處理該新請求。然後每個請求以FIFO模式運行,並行於任何其他併發請求。

下面是我運行同時作業時實際發生的情況: 接口顯示「1公平調度程序池」,並列出一個名爲「default」的活動(FIFO)池。似乎一切都在同一個FIFO池內執行,它本身在FAIR池中單獨運行。我可以看到,我的公平池詳細信息已正確加載到Spark的環境頁面上,但我的請求都以FIFO方式處理。

如何配置我的環境/應用程序,使每個請求實際上是在並行運行給別人?我是否需要爲每個請求創建一個單獨的上下文?我是否可以在我的FAIR池中創建任意數量的相同的FIFO池,然後每次請求時都會選擇一個空池?考慮到Jobserver的目標,似乎這應該都是自動的,並且不是很複雜。以下是我的配置中的一些細節,以防我犯了一個簡單的錯誤。

從local.conf中:

contexts { 
mycontext { 
    spark.scheduler.mode = FAIR 
    spark.scheduler.allocation file = /home/spark/job-server-1.6.0/scheduler.xml 
    spark.scheduler.pool = fair_pool 
} 
} 

從scheduler.xml:

<?xml version="1.0"?> 
<allocations> 
    <pool name="fair_pool"> 
    <schedulingMode>FAIR</schedulingMode> 
    <weight>1</weight> 
    </pool> 
</allocations> 

感謝您的任何意見或指針。對不起,術語混淆了 - 「job」這個詞在jobserver中有兩個含義。

回答

1

我看着我的配置,發現

spark.scheduler.allocation文件應該是spark.scheduler.allocation.file

和所有的值均以像

contexts { 
    mycontext { 
    spark.scheduler.mode = "FAIR" 
    spark.scheduler.allocation.file = "/home/spark/job-server-1.6.0/scheduler.xml" 
    spark.scheduler.pool = "fair_pool" 
    } 
} 

同時確保創建mycontext並在提交作業時傳遞mycontext。

您可以驗證mycontext是否使用星火主UI也使用公平調度。

+1

謝謝指出缺失的時期。隨着改變,fair_pool開始出現在用戶界面中。但是,作業仍在默認池中運行。 關鍵的改變是添加了'sc.setLocalProperty( 「spark.scheduler.pool」, 「fair_pool」)'在我的Scala代碼。我認爲這可以在我的Jobserver配置文件中指定 - 顯然不是! –

+0

你是對的! – noorul

+0

@grahamS你能創建一個問題嗎? https://github.com/spark-jobserver/spark-jobserver/issues – ZeoS

相關問題