Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark缓存:RDD仅缓存8%_Scala_Memory Management_Apache Spark_Distributed Computing_Rdd - Fatal编程技术网

Scala Spark缓存:RDD仅缓存8%

Scala Spark缓存:RDD仅缓存8%,scala,memory-management,apache-spark,distributed-computing,rdd,Scala,Memory Management,Apache Spark,Distributed Computing,Rdd,对于我的代码片段,如下所示: val levelsFile=sc.textFile(levelsFilePath) val levelsSplitedFile=levelsFile.map(line=>line.split(fileDelimiter,-1)) val levelPairRddtemp=levelsSplitedFile .filter(linearr=>(linearr(pogIndex).length!=0)) .map(linearr=>(linearr(pogIndex)

对于我的代码片段,如下所示:

val levelsFile=sc.textFile(levelsFilePath)
val levelsSplitedFile=levelsFile.map(line=>line.split(fileDelimiter,-1))
val levelPairRddtemp=levelsSplitedFile
.filter(linearr=>(linearr(pogIndex).length!=0))
.map(linearr=>(linearr(pogIndex).toLong,levelsIndexes.map(x=>linearr(x))
.filter(value=>(!value.equalsIgnoreCase(“”&!value.equalsIgnoreCase(“”&!value.equalsIgnoreCase(“”)&!value.equalsIgnoreCase(“”)&!null“))
.mapValues(value=>value.mkString(“,”))
.partitionBy(新HashPartitioner(24))
.persist(仅限存储级别的内存)
levelPairRddtemp.count//仅用于触发rdd创建
信息

  • 文件大小约为4G
  • 我使用2个执行器(每个5G)和 12芯
  • Spark
    版本:1.5.2
  • 问题

    当我查看
    存储选项卡中的
    SparkUI
    时,我看到的是:

    查看
    RDD
    ,似乎24个
    分区中只有2个被缓存

    对此行为的任何解释,以及如何修复此问题

    编辑1:我刚刚尝试了60个分区作为
    HashPartitioner

    ..
    .partitionBy(new HashPartitioner(60))
    ..
    
    而且它起作用了。现在我得到了整个
    RDD
    缓存。猜猜这里会发生什么事?数据偏斜会导致这种行为吗

    Edit-2:当我再次使用24个
    分区运行时,包含
    BlockManagerInfo
    的日志。这次缓存了3/24
    分区

    16/03/17 14:15:28 INFO BlockManagerInfo: Added rdd_294_14 in memory on ip-10-1-34-66.ec2.internal:47526 (size: 107.3 MB, free: 2.6 GB) 
    16/03/17 14:15:30 INFO BlockManagerInfo: Added rdd_294_17 in memory on ip-10-1-34-65.ec2.internal:57300 (size: 107.3 MB, free: 2.6 GB) 
    16/03/17 14:15:30 INFO BlockManagerInfo: Added rdd_294_21 in memory on ip-10-1-34-65.ec2.internal:57300 (size: 107.4 MB, free: 2.5 GB)
    

    我相信这是因为内存限制已经达到,或者更重要的是,您使用的内存选项并没有让您的工作利用所有资源


    增加#分区意味着减少每个任务的大小,这也许可以解释这种行为。

    是否可能在整个作业完成之前截取了屏幕截图,但它没有得到更新?如果您有日志文件,是否可以查找包含
    BlockManagerMasterActor
    的行?否则它将意味着一个bug…我的是一个周期为5分钟的流作业。我等了15分钟。我从BlockManagerMaster获得了一些日志,但只是作为信息,没有错误。
    BlockManagerMasterActor
    中的任何内容都与
    上的内存中添加的rdd_0_1相似吗?你有多少?当然是在“24”分区的情况下。@MateuszDymczyk:相关日志被添加到问题中。