从dataproc上的mapreducerMap器进行日志记录

euoag5mw  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(286)

我正在尝试从我的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配置从何处读取?如何聚合它?

fiei3ece

fiei3ece1#

我很惊讶,这是没有记录,但日志从所有Yarn容器可在stackdriver日志。在云控制台中,进入stackdriver->logging->logs,在cloud dataproc cluster->cluster name->cluster uuid下查找集群。然后,选择yarn userlogs,其中包括来自所有容器的日志。您可以通过应用程序或容器id(json负载中的字段)进行过滤。
如果希望yarn在集群上为您收集日志,请考虑设置yarn日志聚合(说明)。

vatpfxk5

vatpfxk52#

此线程说明日志放置在 /tmp 在每个worker中,它建议配置一些Yarn属性以使用gcs存储桶。尽管您可以收集它们,但它们不会显示在stackdriver中,为此,您可能需要使用google cloud日志库向stackdriver发送自定义消息,例如:

import com.google.cloud.logging.Logging;
import com.google.cloud.logging.LoggingOptions;

LoggingOptions options = LoggingOptions.getDefaultInstance();
try(Logging logging = options.getService()) {
  // use logging here
}

关于stackdriver方法,您可以在这里找到更多信息。

相关问题