2017-08-28 42 views
1

我正在使用直接卡夫卡API以1分鐘的間隔一批火花我流應用程序也符合Pyspark我的應用程序代碼中使用熊貓。使用Direct Kafka API運行Spark流應用程序所需的最佳資源是什麼?

下面是我的羣集配置:與具有8個核心,12GB的RAM的容量每一個數據節點 3數據節點。

我已經提供了下面的參數火花提交作業,

--master yarn 
--deploy-mode cluster 
--executor-memory 2G 
--total-executor-cores 4 
--num-executors 11 

,但我的SPARK UI顯示我的積極批次將在隊列狀態,

config("spark.streaming.backpressure.enabled", "true") \ 
.config("spark.streaming.kafka.maxRatePerPartition","200") \ 

基於一些後/回答問題我已低於火花配置選項中指定以下以避免工作進入隊列狀態,

如果是錯在應用p的任何階段,請指正rocessing?

+0

如果你在'Pandas'中運行大計算,你也會想增加驅動程序的內存('--driver-memory'),因爲一切都將在本地完成 – MaFF

+0

但是在集羣模式下它不會是使用pandas分發?我的輸入流最多隻能有1000條記錄,當我爲兩個不同的客戶同時運行同一個應用程序時,我的進程會被排隊! –

+0

如果您只有36G,那麼您使用2G/executor * 11執行程序的總數爲22G,這是第二個應用程序排隊的正常情況。我對駕駛員的記憶的話只是說,它也是你有,如果你希望你的應用程序運行,因爲大熊貓更快不會散發 – MaFF

回答

1

首先,由@Marie在評論中提到的,部分大熊貓將在驅動程序執行locally意義。如果你想這樣做,--driver-memory必須增加這種分配處理的目的。話雖這麼說,但從5-10秒開始,慢慢加入它是一個好主意。除了您可以調整的參數外,還有spark.streaming.concurrentJobs,因爲原因here,文檔中沒有提及它。從10增加這個值,看看最適合什麼。有很多關於優化流應用程序的博客文章,其中有些已經完成了設置。您可能還想添加"spark.serializer": "org.apache.spark.serializer.KryoSerializer",其中的益處可以解釋爲here

相關問題