我正在查詢數據,然後在上面建立一個可視化文件。目前我的整個管道工作正常,但有時可能需要10分鐘才能返回我的查詢結果,我非常肯定我錯過了一些優化或其他導致速度降低的關鍵步驟。Spark Slow Performance
詳情: 我在3500 csv中有大約500gb。我將它們存儲在Azure Blob存儲帳戶中,並在Azure HDInsights上運行Spark羣集。我正在使用spark 2.1。
這裏是腳本(PySpark3在Azure上Jupyter筆記本電腦),我用它來攝取數據:
csv_df = spark.read.csv('wasb://[email protected]/folder/*.csv', header=True, inferSchema=True) //Read CSV
csv_df.write.parquet('wasb://[email protected]/folder/parquet_folder/csvdfdata.parquet’) //Write Parquet
parquet_df = spark.read.csv('wasb://[email protected]/folder/parquet_folder/csvdfdata.parquet) //Read Parquet
parquet_df.createOrReplaceTempView(‘temp_table’) //Create a temporary table
spark.sql("create table permenant_table as select * from temp_table"); //Create a permanent table
我然後使用ODBC驅動程序和此代碼中提取數據。我知道odbc可以減慢一些事情,但我相信10分鐘比預期的要多。 https://github.com/Azure-Samples/hdinsight-dotnet-odbc-spark-sql/blob/master/Program.cs 我的拉數據的代碼與此相似^
問題是管道工作正常,但它太慢了,無法使用。我創建的可視化效果最好需要在幾秒鐘內提取數據。
其他詳情: 查詢良好的金額使用DateID其在int format = 20170629
(2017年6月29日) 示例查詢日期= select DateId, count(PageId) as total from permanent_table where (DateId >= 20170623) and (DateId <= 20170629) group by DateId order by DateId asc
任何幫助將不勝感激!提前致謝! 謝謝!
嗨Maxiluk,感謝您的提示。我用dateId分區,並且以極快的速度提高了我的速度!對於500GB我現在下降到2分鐘左右。理想情況下,我想推幾秒鐘。我應該加快進行其他優化? 另外我的最終數據大小將接近12TB,目前我正在使用500GB進行測試。鑑於你會推薦使用什麼集羣配置?我目前正在使用D12 v2的頭節點(2個節點8個核心)和4個D4 v2工作節點(4個節點,32個核心)。我應該使用什麼配置? –
嗨,抱歉,延遲與迴應。有很多優化你可以做。我在下面的Spark性能優化系列視頻中記錄了最重要的視頻:https://channel9.msdn.com/Shows/Data-Exposed/Spark-Performance-Series-1-with-Maxim-Lukiyanov – maxiluk
關於12TB的簇大小你會使用D14_v2工作節點10-40個。數量越多,你的速度就越快。 – maxiluk