Apache Spark - 访问RDD上的内部数据?

时间:2015-09-30 08:35:21

标签: apache-spark rdd checkpointing

我开始做amp-camp 5 exercises。我尝试了以下两种情况:

情景#1

val pagecounts = sc.textFile("data/pagecounts")
pagecounts.checkpoint
pagecounts.count

情景#2

val pagecounts = sc.textFile("data/pagecounts")
pagecounts.count

Spark shell应用程序UI中显示的总时间对于两者都不同 场景。
场景#1花了0.5秒,而场景#2只花了0.2秒 s

在场景#1中,checkpoint命令什么都不做,它既不是a,也不是 转型也不是行动。一旦RDD实现,它就说了 执行操作后,继续保存到磁盘。我在这里错过了什么吗?

问题:

  1. 我知道场景#1需要更多时间,因为RDD是 检查指向(写入磁盘)。有没有办法让我知道所花的时间 检查点,从总时间?
    Spark shell Application UI显示以下内容 - Scheduler delay,Task 反序列化时间,GC时间,结果序列化时间,获得结果 时间。但是,并没有显示检查点的细分。

  2. 有没有办法访问上述指标,例如调度程序延迟,GC时间 并以编程方式保存它们?我想记录上面的一些指标 在RDD上调用的每个操作。

  3. 如何以编程方式访问以下信息:

    • RDD的大小,在检查点上持久保存到磁盘?
    • 目前内存中RDD的百分比是多少?
    • 计算RDD所需的总时间?
  4. 如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

Spark REST API提供了几乎所有你要求的东西。

一些例子;

  

目前内存中RDD的百分比是多少?

<p(.*?)>(.+?)<\/p\>

将回复:

GET /api/v1/applications/[app-id]/storage/rdd/0
  

计算RDD所需的总时间?

计算RDD也称为作业,阶段或尝试。 { "id" : 0, "name" : "ParallelCollectionRDD", "numPartitions" : 2, "numCachedPartitions" : 2, "storageLevel" : "Memory Deserialized 1x Replicated", "memoryUsed" : 28000032, "diskUsed" : 0, "dataDistribution" : [ { "address" : "localhost:54984", "memoryUsed" : 28000032, "memoryRemaining" : 527755733, "diskUsed" : 0 } ], "partitions" : [ { "blockName" : "rdd_0_0", "storageLevel" : "Memory Deserialized 1x Replicated", "memoryUsed" : 14000016, "diskUsed" : 0, "executors" : [ "localhost:54984" ] }, { "blockName" : "rdd_0_1", "storageLevel" : "Memory Deserialized 1x Replicated", "memoryUsed" : 14000016, "diskUsed" : 0, "executors" : [ "localhost:54984" ] } ] }

将回复:

GET /applications/[app-id]/stages/[stage-id]/[stage-attempt-id]/taskSummary

你的问题过于宽泛,因此我不会回应所有人。我相信所有必须反映的内容都会反映在REST API中。