EMR在哪里存储Spark stdout?

时间:2017-12-07 23:43:45

标签: amazon-web-services apache-spark amazon-s3 emr amazon-emr

我在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

2 个答案:

答案 0 :(得分:6)

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

  • 资源管理器 - >您的申请 - >日志 - >标准输出
  • 您的S3日志目录 - > containers/application_.../container_.../stdout(虽然申请后需要几分钟才能填充)
  • SSH进入EMR,yarn logs -applicationId <Application ID> -log_files <log_file_type>

答案 1 :(得分:1)

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

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

for i in your_rdd.collect():
    print i

但是以下内容将在执行程序中运行,因此它将在Spark日志中编写:

def run_in_executor(value):
    print value

your_rdd.map(lambda x: value(x))

现在转到原来的问题,第二种情况将写入日志位置。日志通常写入位于/ mnt / var / log / hadoop / steps中的主节点,但最好使用--log-uri将日志配置到s3存储桶。这样会更容易找到。