我在晚上运行一系列spark-submit作业作为AWS / EMR集群上的步骤 . 完成后,火花簇将被拆除,但是日志会保存到S3 .

我想我还没有完全利用执行程序内存,我可以减少核心实例的大小或数量,但我想要聪明地做 .

基本上我想了解如何导航日志,以便找到最坏情况执行者使用的最大内存 . 理想情况下,我希望找到每个“步骤”(基本上每个spark-submit作业),但“步骤”日志中没有任何用处 .

我相信在缓存RDD和新对象之间内存分为60/40,所以也许一个简单的max不够精确,但它对我来说是一个不错的开始 . 更高级的想法赞赏 .

我正在运行Spark 1.6.0 .

日志目录的结构如下...任何想法找到使用最大执行程序内存的最佳方法?

containers/
  application_unknown-id_000n/
    container_unknown-id_000n_0m_00000o/
      stderr.gz
      stdout.gz
em/
  agg/
    lots of .bin files
  chart/
    lots of .html.gz files
  raw/
    lots of .bin files
node/
  node_id/
    applications/
      hadoop-hdfs/
        hadoop-hdfs-datanode-node_id-date-hour.gz
      hadoop-yarn/
        yarn-yarn-nodemanager-node_id-date-hour.gz
    daemons/
      instance-state/
        instance-state.log-date-hour-15min.gz
    provision-node/
      unknown-id/
        controller.gz
        stderr.gz
        stdout.gz
      apps-phase/
        stderr.gz
        stdout.gz
    setup-devices/
      format-drives.log.gz
      setup_tmp_dir.log.gz
      setup_var_lib_dir.log.gz
      setup_var_log_dir.log.gz
      setup_var_tmp_dir.log.gz
steps/
  step_id/
    controller.gz
    stderr.gz

EDIT - broadening question in case logs don't have it

日志将是我的首选源...如果唯一的选择是在运行时查看执行程序选项卡...我相信'存储内存'被定义为...

使用的内存/用于存储数据的总可用内存,如内存中缓存的RDD分区 .

但有些事情没有意义......

  • 即使在读取2 TB的数据并对其进行处理之后,该列也全部为0

  • 在为Yarn分配1024MB后,每个执行程序应该有37GB,而其他部分用于开销...这表示每个执行程序27GB

我需要查看“存储内存”列,还是需要考虑“输入”和/或“随机读取”?

while running