我有一個Spark Streaming作業,它使用streamContext.textFileStream("s3://log-directory/")
來偵聽文件,然後解析它們並將它們輸出爲ORC文件。這個特定的目錄有很多文件流入 - 每5分鐘超過40個文件。如何通過針對S3的Spark流提高性能
但是,無論我在EMR集羣上添加多少臺機器,它在任何給定時間都有3到4個執行程序停頓,最多運行30個任務。這使得工作很快就落後了,因爲每個microbatch作業大約需要5分鐘來解析和轉換所有數據,而且它一次只能解析4-10個日誌文件。理想情況下,每個批次將在五分鐘內處理所有40個以上的文件,然後轉到下一個集合,基本與流保持同步。
所以,我的問題 - 有沒有辦法增加運行executor的數量?或者還有其他一些我沒有想到的問題會使我的工作跟上新文件的步伐嗎?我已經閱讀了一些關於S3如何在Spark上非常慢的事情,但是我的工作不斷返回諸如 17/04/21 19:14:32 INFO FileInputDStream: Finding new files took 2135 ms
的消息。這不是快但它也不是5分鐘,所以我覺得它不是一個查找文件的問題。至於環境,我目前設置spark.maximizeResourceAllocation=true
作爲一個配置選項,這將導致:
spark.default.parallelism = 160
spark.executors.cores = 8
spark.executor.memory = 10356M
這似乎是它應該是足夠的,以及 - 文件目前在每一個100MB盡了全力。我可以提供任何幫助,如果有必要,我們很樂意添加更多細節。
Streaming的來源是什麼?室壁運動?卡夫卡?文件? –
來自Amazon ELB的文件 – jpavs