如何在使用hadoop时使用logger api编写java日志文件
我写了一个地图减少我想要调试的代码。
为了做到这一点,我无法使用标准输出,因为除非发生错误,否则Hadoop平台不会将其打印到屏幕上。
相反,我试图使用记录器,以创建日志文件。
我使用处理程序将它拆分为两个文件,遗憾的是,“严重”的日志文件是空的,一般日志文件只记录主线程中发生的事情,而不是映射减少函数。
问题如下:
有没有hadoop和日志文件的问题,还是我的记录器配置有问题? 如果是这样,如何纠正它。
日志配置代码:我使用一个记录器来处理整个应用程序(这次是root logger)
public static Logger configureLogging() { try { logger=Logger.getLogger(""); //FileSystem hdfs=FileSystem.get(URI.create(Misc.S3FS),getConfiguration()); logger.setLevel(Level.ALL); //StreamHandler handler=new StreamHandler(hdfs.create(new Path(Misc.LOGS_PATH+"mylog.log")),new SimpleFormatter()); FileHandler handler=new FileHandler(Misc.LOGS_PATH+"mylog.xml",true); FileHandler severeHandler=new FileHandler(Misc.LOGS_PATH+"mylogSevere.xml",true); severeHandler.setLevel(Level.INFO); logger.addHandler(handler); logger.addHandler(severeHandler); } catch (Exception e) { e.printStackTrace(); } return logger; }
Hadoop附带预配置的log4j。 您所要做的就是导入两个类:
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
现在,您可以在映射器,缩减器和任何您想要的位置定义记录器:
private static final Log LOG = LogFactory.getLog(MyClass.class);
并记录您需要的内容:
LOG.info("My message");
这些消息将在作业执行期间显示。 您可以使用调整log4j配置
conf/log4j.properties
- 如何将Hadoop Path对象转换为Java File对象
- 从map中键入不匹配的值:expected org.apache.hadoop.io.NullWritable,recieved org.apache.hadoop.io.Text
- java.lang.IllegalArgumentException:错误的FS:,期望:hdfs:// localhost:9000
- 使用Java访问HDFS中的文件
- 如何使用java api直接发送hbase shell命令,如jdbc?
- 在HBase MapReduce任务中加载本机共享库
- 使用saveAsTextFile的Spark NullPointerException
- 从windows eclipse运行Mapreduce(yarn)时出错
- 将1GB数据加载到hbase中需要1小时