我正在查询数据,然后在上面建立一个可视化文件。目前我的整个管道工作正常,但有时可能需要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