Of course if is finding the file, you are actively pointing it towards it.
The BashJavaUtils are supposed to use the log4j configuration file /that is bundled in the BashJavaUtils.jar, /which you are now interfering with. That's also why it doesn't require all of lib/ to be on the classpath; the flink-dist jar is enough.

If you configure the log4j configuration file via the env.java.options in flink-conf.yaml, then it should not be picked up by the BashJavaUtils.

On 30/07/2021 08:48, Yuval Itzchakov wrote:
It is finding the file though, the problem is that the lib/ might not be on the classpath when the file is being parsed, thus the YAML file is not recognized as being parsable.

Is there a way to differ the inference from BashJavaUtils to the actual bootstrap of the app? or perhaps add the lib to the utils classpath?

On Thu, Jul 29, 2021, 17:55 Chesnay Schepler <ches...@apache.org <mailto:ches...@apache.org>> wrote:

    That could be...could you try configuring "env.java.opts:
    -Dlog4j.configurationFile=..."?

    On 29/07/2021 15:18, Yuval Itzchakov wrote:
    Perhaps because I'm passing it as an argument to the job with
    -Dlog4j.configurationFile=... ?

    On Thu, Jul 29, 2021 at 3:27 PM Chesnay Schepler
    <ches...@apache.org <mailto:ches...@apache.org>> wrote:

        Looking once more at the stacktrace this happens in the
        BashJavaUtils, which only puts flink-dist and not the entire
        lib/ directory on the classpath.
        What I don't understand is why it would pick up your log4j
        file. It should only use the file that is embedded within
        BashJavaUtils.jar.

        On 29/07/2021 13:11, Yuval Itzchakov wrote:
        Hi Chesnay,

        So I looked into it, and jackson-databind is definitely in
        my UBER jar as a transitive dependency. Additionally, this
        uber JAR is added to the `lib/` directly for Flink before I
        start the job, yet it still fails.
        Are there any other paths I should explore?

        One thing to add is that I'm using the
        "classloader.resolve-order" = "parent-first" flag due to my
        lib having some deps that otherwise cause runtime collision
        errors in Kafka.


        On Wed, Jul 7, 2021 at 12:25 PM Yuval Itzchakov
        <yuva...@gmail.com <mailto:yuva...@gmail.com>> wrote:

            Interesting, I don't have bind explicitly on the
            classpath, will give it a try.

            Although locally it is working properly.

            On Wed, Jul 7, 2021, 12:19 Chesnay Schepler
            <ches...@apache.org <mailto:ches...@apache.org>> wrote:

                According to the log4j documentation you need both
                jackson-databind and jackson-dataformat-yaml to be
                on the classpath.
                Did you make sure that that this is the case in
                1.13.1? It could very well be that in 1.9 databind
                was on the classpath by chance.

                On 07/07/2021 10:22, Arvid Heise wrote:
                Hi Yuval,

                For some reason the YamlConfigurationFactory is not
                correctly loaded and the fallback
                XmlConfigurationFactory is used unsuccessfully.
                You could try to force DEBUG on that
                YamlConfigurationFactory and check for some output like
                "Missing dependencies for Yaml support,
                ConfigurationFactory {} is inactive"

                In particular, it checks for these classes
                "com.fasterxml.jackson.databind.ObjectMapper",
                "com.fasterxml.jackson.databind.JsonNode",
                "com.fasterxml.jackson.core.JsonParser",
                "com.fasterxml.jackson.dataformat.yaml.YAMLFactory"

                I'm assuming that with improved classloader
                separation, you actually need to put your
                dependency into `lib/` instead of putting it into
                your user jar. But I'm pulling in @Chesnay Schepler
                <mailto:ches...@apache.org> who has much more insights.

                On Sun, Jul 4, 2021 at 9:45 PM Yuval Itzchakov
                <yuva...@gmail.com <mailto:yuva...@gmail.com>> wrote:

                    Hi,

                    I am attempting to upgrade Flink from 1.9 to 1.13.1
                    I am using a YAML based log4j file. In 1.9, it
                    worked perfectly fine by adding the following
                    dependency to the classpath (I deploy with an
                    uber JAR):

                    "com.fasterxml.jackson.dataformat" %
                    "jackson-dataformat-yaml"        % "2.12.3"

                    However, with Flink 1.13.1 I get the following
                    error at runtime (only when running in a
                    Cluster, running locally works fine):

                    
*flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager [Fatal Error] log4j2.yaml:1:1:
                    Content is not allowed in prolog.
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager ERROR StatusLogger Error parsing
                    /opt/foo/conf/log4j2.yaml
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager  org.xml.sax.SAXParseException;
                    systemId: file:///opt/foo/conf/log4j2.yaml;
                    lineNumber: 1; columnNumber: 1; Content is not
                    allowed in prolog.*
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:261)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.core.config.xml.XmlConfiguration.<init>(XmlConfiguration.java:92)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory.getConfiguration(XmlConfigurationFactory.java:46)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:458)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:385)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.core.config.ConfigurationFactory.getConfiguration(ConfigurationFactory.java:293)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:647)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:668)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.LogManager.getContext(LogManager.java:155)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:45)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:48)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:30)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:329)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:349)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager at
                    
org.apache.flink.runtime.util.bash.BashJavaUtils.<clinit>(BashJavaUtils.java:45)
                    
flink-aamtr-a11e58230095d9390e8547eccb0290d4-27ef11e7-tm-6r8dfx
                    taskmanager ERROR StatusLogger No logging
                    configuration

                    This indicates that for some reason, the
                    jackson dataformat YAML library is not getting
                    properly loaded from my uber JAR at runtime.

                    Has anyone run into this? Any possible workarounds?
-- Best Regards,
                    Yuval Itzchakov.




-- Best Regards,
        Yuval Itzchakov.




-- Best Regards,
    Yuval Itzchakov.



Reply via email to