从 Dataproc 上的 MapReducer 映射器记录日志
Logging from a MapReducer mapper on Dataproc
我正在尝试退出我的映射器作业,运行 在 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
,甚至是登录到工作实例并在各种合理的地方搜索时也找不到。
我是否缺少任何可以使其正常工作的配置?
从哪里读取默认的 log4j 配置?如何聚合它?
说明日志放在每个worker中的/tmp
,建议配置一些yarn属性使用GCS bucket。尽管您可以收集它们,但它们不会显示在 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。
我很惊讶这没有记录在案,但 Stackdriver 日志记录中提供了来自所有 YARN 容器的日志。在 Cloud Console 中,转到 Stackdriver -> Logging -> Logs,在 Cloud Dataproc Cluster -> cluster name -> cluster uuid 下查找您的集群。然后,select yarn-userlogs,其中包括来自所有容器的日志。您可以按应用程序或容器 ID(它们是 json 有效负载中的字段)进行过滤。
如果您希望 YARN 在集群上为您收集日志,请考虑设置 YARN 日志聚合 ()。
我正在尝试退出我的映射器作业,运行 在 Dataproc 上。
按照建议
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 配置?如何聚合它?
/tmp
,建议配置一些yarn属性使用GCS bucket。尽管您可以收集它们,但它们不会显示在 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。
我很惊讶这没有记录在案,但 Stackdriver 日志记录中提供了来自所有 YARN 容器的日志。在 Cloud Console 中,转到 Stackdriver -> Logging -> Logs,在 Cloud Dataproc Cluster -> cluster name -> cluster uuid 下查找您的集群。然后,select yarn-userlogs,其中包括来自所有容器的日志。您可以按应用程序或容器 ID(它们是 json 有效负载中的字段)进行过滤。
如果您希望 YARN 在集群上为您收集日志,请考虑设置 YARN 日志聚合 (