我正在尝试从我的Map程序工作中注销一些日志,运行在dataproc上。
按照这里的建议,我简单地定义了一个log4j记录器并提供了以下信息:
import org.apache.log4j.Logger;
public class SampleMapper extends Mapper<LongWritable, Text, Text, Text> {
private Logger logger = Logger.getLogger(SampleMapper.class);
@Override
protected void setup(Context context) {
logger.info("Initializing NoSQL Connection.")
try {
// logic for connecting to NoSQL - ommitted
} catch (Exception ex) {
logger.error(ex.getMessage());
}
}
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
// mapper code ommitted
}
}
但是,我在任何地方都找不到任何日志,不是通过dataproc用户界面,也不是通过调用 yarn logs
在主服务器上,甚至在登录到worker示例并在各种合理的位置进行搜索时也是如此。
是否有任何配置,我错过了,应该使它的工作?
默认的log4j配置从何处读取?如何聚合它?
2条答案
按热度按时间fiei3ece1#
我很惊讶,这是没有记录,但日志从所有Yarn容器可在stackdriver日志。在云控制台中,进入stackdriver->logging->logs,在cloud dataproc cluster->cluster name->cluster uuid下查找集群。然后,选择yarn userlogs,其中包括来自所有容器的日志。您可以通过应用程序或容器id(json负载中的字段)进行过滤。
如果希望yarn在集群上为您收集日志,请考虑设置yarn日志聚合(说明)。
vatpfxk52#
此线程说明日志放置在
/tmp
在每个worker中,它建议配置一些Yarn属性以使用gcs存储桶。尽管您可以收集它们,但它们不会显示在stackdriver中,为此,您可能需要使用google cloud日志库向stackdriver发送自定义消息,例如:关于stackdriver方法,您可以在这里找到更多信息。