我正在尝试在Yarn集群中安排1000个作业。我希望每天同时运行1000多个工作岗位,以便管理资源。对于来自hdfs的1000个不同类别的文件,我试图从python创建spark submit命令并执行。但是由于使用驱动程序内存提交spark,我的内存错误。
如何在火花纱簇中安排1000个工作?我甚至尝试过oozie作业调度框架和spark,它没有像预期的那样与HDP一起工作。
答案 0 :(得分:0)
实际上,您可能不需要1000个作业来读取HDFS中的1000个文件。您也可以尝试在一个RDD中加载所有内容(API确实支持在路径中读取多个文件和通配符)。现在,在读取单个RDD中的所有文件之后,您应该专注于确保是否有足够的内存,内核等分配给它并开始查看您的业务逻辑,这样可以避免像shuffle等昂贵的操作。
但是,如果您坚持需要为每个文件生成1000个作业,那么您应该查看--executor-memory
和--executor-cores
(以及num-executors
的并行性)。这些可以帮助您优化内存/ CPU占用空间。
同样好奇,你说你在spark-submit(使用驱动程序内存)期间获得了OOM。驱动程序根本不使用任何内存,除非您使用大集合执行collect
或take
之类的操作,这会将执行程序中的数据带到驱动程序中。你还在yarn-client
模式下开始工作吗?另一个预感是检查你产生火花点火工作的盒子是否有足够的内存来产生这些工作?
如果你还可以在这里粘贴一些日志会更容易。