美文网首页Spark
Spark内存储级别性能测试及其选择

Spark内存储级别性能测试及其选择

作者: Michael孟良 | 来源:发表于2018-10-04 21:47 被阅读591次

Spark有多种储级别,下面我用数据的方式展示各种存储级别的区别和其选择,希望能给在座各位在工作中或面试中一点帮助!转载请注明出处:Michael孟良

存储级别StorageLevel

如上篇文章所说,当 Execution 空间不足而且 Storage 空间也不足的情况下,Storage 空间如果曾经使用了超过 Unified 默认的 50% 空间的话则超过部份会被强制 drop 掉一部份数据来解决 Execution 空间不足的问题。
drop 后数据会不会丢失主要是看你在程序设置的 storage_level 来决定你是 Drop 到那里。
设计代码:

 object CacheTest {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("CacheTest").master("local").getOrCreate()
    
    
    val sc = spark.sparkContext
    var rdd1 = sc.textFile("file:///E:/BigData/wc5")
    rdd1 = rdd1.persist(StorageLevel.OFF_HEAP     )

    val startTime = System.currentTimeMillis()
    val count = rdd1.count()
    val endTime = System.currentTimeMillis()

    val startTime1 = System.currentTimeMillis()
    val count1 = rdd1.count()
    val endTime1 = System.currentTimeMillis()
    println("count:" + count + "\tdurations:" + (endTime-startTime) + " ms")//第一个时间是从文件中读过来的时间
    println("count:" + count1 + "\tdurations:" + (endTime1-startTime1) + " ms")//第二个时间是从内存或磁盘读过来的时间
    while(true){}
//    spark.close()
  }
}

下面我们通过http://localhost:4040/storage/,来观察storage_level 分配情况:

val DISK_ONLY = new StorageLevel(true, false, false, false)
val DISK_ONLY_2 = new StorageLevel(true, false, false, false, 2)

count:10851865 durations:146601 ms
count:10851865 durations:60397 ms


val MEMORY_ONLY = new StorageLevel(false, true, false, true)
val MEMORY_ONLY_2 = new StorageLevel(false, true, false, true, 2)

count:10851865 durations:71126 ms
count:10851865 durations:32691 ms


val MEMORY_ONLY_SER = new StorageLevel(false, true, false, false)
val MEMORY_ONLY_SER_2 = new StorageLevel(false, true, false, false, 2)

count:10851865 durations:88367 ms
count:10851865 durations:65296 ms


val MEMORY_AND_DISK = new StorageLevel(true, true, false, true)
val MEMORY_AND_DISK_2 = new StorageLevel(true, true, false, true, 2)

count:10851865 durations:118936 ms
count:10851865 durations:63087 ms


val MEMORY_AND_DISK_SER = new StorageLevel(true, true, false, false)
val MEMORY_AND_DISK_SER_2 = new StorageLevel(true, true, false, false, 2)

count:10851865 durations:148841 ms
count:10851865 durations:60774 ms


val OFF_HEAP = new StorageLevel(true, true, true, false, 1)

count:10851865 durations:127012 ms
count:10851865 durations:60083 ms


备注:
1.以MEMORY_ONLY_2为例,MEMORY_ONLY_2相比于MEMORY_ONLY存储数据的方式是相同的,不同的是会将数据备份到集群中两个不同的节点,其余情况类似。
2.当MEMORY_AND_DISK 时,文件不太大,会优先放到memory为主。
3.以MEMORY_ONLY_SER为例,MEMORY_ONLY_SER比MEMORY_ONLY多做了序列化操作。同样大小的文件放在disk会小很多,和在memory序列化后大小一样。
4.除去使用MEMORY,DISK,还有一种是OFF_HEAP,称之为 使用JVM堆外内存,使用OFF_HEAP的优势在于,在内存有限时,可以减少频繁GC及不必要的内存消耗,提升程序性能。


StorageLevel的选择

经过上面的数据,我们可以得出:
1.第一个优先选择MEMORY_ONLY ,从数据上看,读最快(32691 ms)。
2.第二个优先选择MEMORY_ONLY_SER 。当空间不够,可以选择MEMORY_ONLY_SER,加多了序列化步骤,但节约了空间。
3.第三个优先选择MEMORY_AND_DISK_SER ,当空间再不够,才选择将部分放到磁盘。
4.不建议用DISK_ONLY ,用了60397 ms,还不如MEMORY_ONLY在文件中重新读一遍(71126 ms);而其读文件要用146601 ms,相当其他读文件的一倍。

Thanks for watching!

相关文章

  • Spark内存储级别性能测试及其选择

    Spark有多种储级别,下面我用数据的方式展示各种存储级别的区别和其选择,希望能给在座各位在工作中或面试中一点帮助...

  • Spark 性能优化方案

    Spark 性能优化方案(转自李智慧的Spark性能优化方案): Spark性能测试工具 •Spark性能测试基准...

  • 性能测试

    测试分哪些: 安全测试、功能测试 软件性能概念: 软件运行速度越快,占用系统存储资源及其他资源越少,则软件性能越好...

  • Spark RDD如何选择存储级别

    首先介绍下RDD的存储级别 在RDD的操作中persist(或cache)是数据集是Spark最重要功能的其中之一...

  • 美团关于大数据技术的文章

    Spark性能优化指南——基础篇Spark性能优化指南——高级篇Spark在美团的实践Kafka文件存储机制那些事...

  • 【Spark】Spark 存储原理--存储层分析

    本篇结构: 缓存分析 存储级别 如何选择存储级别 堆内和堆外内存规划 内存空间分配 参考博文 一、缓存分析 RDD...

  • spark-sql-perf

    简介 spark-sql-perf 是一个 spark sql 性能测试框架,可以用来进行一些基准测试。 测试环境...

  • SPARK表存储格式在HDFS性能比较

    SPARK表存储格式在HDFS性能比较###### 不管是Impala表抑或spark表,数据存储都可以是HDFS...

  • Spark 离线开发框架设计与实现

    一、背景 随着 Spark 以及其社区的不断发展,Spark 本身技术也在不断成熟,Spark 在技术架构和性能上...

  • 大数据入门:Spark持久化存储策略

    持久化存储是Spark非常重要的一个特性,通过持久化存储,提升Spark应用性能,以更好地满足实际需求。而Spar...

网友评论

    本文标题:Spark内存储级别性能测试及其选择

    本文链接:https://www.haomeiwen.com/subject/xyqfaftx.html