2016-07-07 13 views

Antwort

1

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:

  1. kopieren Sie die flink/conf Verzeichnis ein nur für den Job benutzerdefinierten Ort
  2. die log4j.properties oder andere Konfigurationsdatei
  3. , 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.

1

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

+2

Aber wo bieten Sie die „- Dlog4j.configuration =/Pfad/zu/log4j.properties "? Es scheint keine Befehlszeilenoption für Flink zu sein. –