我正在尝试注销在Dataproc上运行的映射器作业。
根据建议here,我仅定义了一个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
,甚至在登录到工作人员实例并在各个明智的位置进行搜索时也找不到。
我缺少任何配置可以使其正常工作吗?
从中读取默认的log4j配置,该如何对其进行汇总?
答案 0 :(得分:1)
我很惊讶这没有记录,但是来自所有YARN容器的日志都可以在Stackdriver日志中找到。在Cloud Console中,转到Stackdriver-> Logging-> Logs,在Cloud Dataproc Cluster-> cluster name-> cluster uuid下查找您的集群。然后,选择yarn-userlogs,其中包括来自所有容器的日志。您可以按应用程序或容器ID(这是JSON有效负载中的字段)进行过滤。
如果您希望YARN在群集上为您收集日志,请考虑设置YARN日志聚合(instructions)。
答案 1 :(得分:0)
This thread解释说,每个工作人员的日志都放置在/tmp
中,并且建议配置某些纱线属性以使用GCS铲斗。尽管您可以收集它们,但是它们不会在Stackdriver中显示,为此,您可能需要使用google-cloud-logging库将自定义消息发送给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方法,您可以找到更多信息here。