EMR存储Spark Stdout在哪里



我在EMR上运行Spark应用程序,并具有几个println()语句。除控制台外,这些陈述在哪里记录?

我的集群的S3 AWS-LOGS目录结构看起来像:

node ├── i-0031cd7a536a42g1e │   ├── applications │   ├── bootstrap-actions │   ├── daemons │   ├── provision-node │   └── setup-devices containers/ ├── application_12341331455631_0001 │   ├── container_12341331455631_0001_01_000001

您可以在几个地方找到println:

  • 资源管理器 ->您的应用程序 -> logs-> stdout
  • 您的S3日志目录 -> containers/application_.../container_.../stdout(尽管在应用程序之后需要几分钟才能填充)
  • SSH进入EMR,yarn logs -applicationId <Application ID> -log_files <log_file_type>

从Spark打印时需要考虑一个非常重要的事情:您是否正在运行在驱动程序中执行的代码,还是在执行程序中运行的代码?

例如,如果您执行以下操作,则将数据带回驱动程序时,它将在控制台中输出:

for i in your_rdd.collect():
    print i

但是以下将在执行器中运行,因此将写在火花日志中:

def run_in_executor(value):
    print value
your_rdd.map(lambda x: value(x))

现在要解决您的原始问题,第二种情况将写入日志位置。日志通常写入位于/mnt/var/log/hadoop/steps中的主节点,但最好将日志配置为带有-log-uri的S3桶。这样,它将更容易找到。

最新更新