一,測試環境
1) 硬件環境完全相同:
包括:cpu/內存/網絡/磁盤Io/機器數量等
2)軟件環境:
相同數據
相同測試用例
3) 不同計算框架,其中spark-sql 都是基於yarn的
4)spark-sql executor內存總量不大於 hive使用內存峰值
二,不同框架在兩個測試用例下的性能對比
1)bu_出租車需求數計算.sql
orc | orc (split 110M) | parquet +snappy | parquet +gzip | |
spark-sql 1.4 | 2mins, 7sec | 1mins,40sec | Parquet does not support decimal | Parquet does not support decimal |
spark-sql 1.6 | 1mins, 30sec | 大概1mins,4sec | 大概1mins,4sec | 大概1mins,4sec |
hive | 20mins | 18.5mins | 大概20mins | 大概20mins |
所占空間(raw倍數) | 1 | 1 | 1.6 | 1 |
2)專快播單,接單情況.sql
spark-sql 1.6保持分配600G的內存不變,在不同數據量下進行測試:
|
200G
|
550G
|
1.1T
|
---|---|---|---|
spark-sql 1.4 | 11-12mins | ||
spark-sql 1.6 | 7-8mins | 22mins | 51mins |
hive | 15mins | 50mins | 將近5T內存,就沒測試 |
3) 聽單
|
time
|
---|---|
spark-sql 1.6 | 190s |
hive | 1117s |
4)
三,總結
1)spark-sql 1.6 相對於spark-sql 1.4 提高30%的性能;
2)不同應用spark-sql相對於hive性能提升幅度不同,但是都會提高很多
3)不同存儲+壓縮格式,存儲空間不同
4)hive的stage-1的mr個數與數據存儲空間大小成正比;
注:mr 的個數與block大小有關,所以在split切分設為110M以后,資源占用大概兩倍;
5)在數據量接近或遠大於分配內存資源的情況下,spark-sql速度比下降,但相對於hive,仍就很快(並且hive資源占用過多);