如之前的答案所述,更改 Spark 集群详细程度的理想方法是更改相应的 log4j.properties。但是,在 dataproc 上 Spark 运行在 Yarn 上,因此我们必须调整全局配置而不是 /usr/lib/spark/conf
几个建议:
在 dataproc 上,我们可以在集群创建期间传递几个 gcloud 命令和属性。查看文档 是否可以通过指定来更改 /etc/hadoop/conf 下的 log4j.properties
--properties 'log4j:hadoop.root.logger=WARN,console'
Run Code Online (Sandbox Code Playgroud)
也许不是,如文档所示:
--properties 命令不能修改上面未显示的配置文件。
另一种方法是在集群初始化期间使用 shell 脚本并运行 sed:
# change log level for each node to WARN
sudo sed -i -- 's/log4j.rootCategory=INFO, console/log4j.rootCategory=WARN, console/g'\
/etc/spark/conf/log4j.properties
sudo sed -i -- 's/hadoop.root.logger=INFO,console/hadoop.root.logger=WARN,console/g'\
/etc/hadoop/conf/log4j.properties
Run Code Online (Sandbox Code Playgroud)
但是这样就足够了,还是我们还需要更改环境变量 hadoop.root.logger 呢?
我正在使用tensorboard来显示三次运行.我有一个文件夹,logs其中包含三个文件:
2016-03-18_22-11-12
2016-03-18_22-11-27
2016-03-18_22-23-46
Run Code Online (Sandbox Code Playgroud)
当我tensorboard --logdir .(从日志)运行时,只有2016-03-18_22-23-46
可见:
如果我2016-03-18_22-23-46从日志中删除并重新启动tensorboard,那么只有2016-03-18_22-11-27可见.知道这里发生了什么吗?
编辑:日志文件(令我惊讶),相当大:这是结果du -h:
1,1G ./2016-03-18_22-23-46
925M ./2016-03-18_22-11-12
934M ./2016-03-18_22-11-27
2,9G .
Run Code Online (Sandbox Code Playgroud)
编辑: 上面的运行结构可以通过记录和检查点到tensorboard log-dir的子目录获得:
run_time = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
FLAGS.train_dir = '/datalab/tf_runs/' + run_time #Directory to put the training data.
summary_writer = tf.train.SummaryWriter(FLAGS.train_dir, sess.graph_def)
Run Code Online (Sandbox Code Playgroud) 我运行了几个批处理作业,我想将 dataproc 中的 jobId 引用到保存的输出文件。
这将允许拥有与结果相关联的所有参数和输出日志。缺点仍然存在:由于 YARN 中的 executors 过去,无法再获得单个 executor 的日志。