Ich habe mehrere flink-Jobs auf einem eigenständigen Cluster ausgeführt. Ich möchte verschiedene Protokolldateien für verschiedene Flink-Jobs. Also, wie kann ich verschiedene log4j.properties Datei übergeben, während flink Job übergeben.Wie Sie verschiedene log4j.properties-Dateien für verschiedene flink-Jobs angeben, die auf demselben Standalone-Cluster ausgeführt werden
Antwort
Ab sofort gibt es keine einfache Möglichkeit, dies zu tun, da flink die Dateien immer unter flink/conf
lädt.
Wenn Sie die ein Garn-Cluster-per-Job-Modus von flink (dh Sie Ihre Skripte starten mit: flink run -m yarn-cluster ...
), ist hier eine Abhilfe:
- kopieren Sie die
flink/conf
Verzeichnis ein nur für den Job benutzerdefinierten Ort - die
log4j.properties
oder andere Konfigurationsdatei - , bevor Sie Ihren Job starten, führen Sie modifizieren
export FLINK_CONF_DIR=/path/to/my/conf
Abhängig von Ihrer Version von flink, überprüfen Sie die Datei flink/bin/config.sh
. Wenn Ihr accross dieser Linie laufen:
FLINK_CONF_DIR=$FLINK_ROOT_DIR_MANGLED/conf
Änderung mit:
if [ -z "$FLINK_CONF_DIR" ]; then
FLINK_CONF_DIR=$FLINK_ROOT_DIR_MANGLED/conf;
fi
Wenn Sie einen anderen Weg finden, teilen Sie es bitte bei uns.
Gemäß der Dokumentation Flink (der die neueste Version), können Sie einfach die log4j/logback Datei übergeben zu verwenden, wenn Sie einreichen, hier ist der Link: https://ci.apache.org/projects/flink/flink-docs-master/monitoring/logging.html
Kurz gesagt, können Sie „-Dlog4j.configuration=/path/to/log4j.properties
“ bieten oder "-Dlogback.configurationFile=/path/to/logback.xml
". Sie könnten auch einfach verschiedene Logger für jeden Job konfigurieren, so dass Sie eine einzelne "logback"/"log4j
" Datei behalten könnten. Hier ist ein Beispiel mit logback:
<!-- logback.xml -->
<configuration>
<property name="LOG_HOME" value="/path/to/logs" />
<appender name="JOB1"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/job1/job.out</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover hourly -->
<fileNamePattern>${LOG_HOME}/job1/%d{yyyyMMdd_HH}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<logger name="com.yourcompany.job1" level="INFO" additivity="false">
<appender-ref ref="JOB1" />
</logger>
<!-- rest of configs -->
</configuration>
Und in Ihrem Code (Beispiel mit Scala, es ist so ziemlich das gleiche mit Java):
import org.slf4j.LoggerFactory
private final val logger = LoggerFactory.getLogger("com.yourcompany.job1")
logger.info("some message")
Prost
Aber wo bieten Sie die „- Dlog4j.configuration =/Pfad/zu/log4j.properties "? Es scheint keine Befehlszeilenoption für Flink zu sein. –