我在晚上运行一系列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
我需要查看“存储内存”列,还是需要考虑“输入”和/或“随机读取”?