flink clickhouse-jdbc和flink-connector 寫入數據到clickhouse因為jar包沖突導致的60 seconds.Please check if the requested resources are available in the YARN cluster和Could not resolve ResourceManager address akka報錯血案


一、問題現象,使用flink on yarn 模式,寫入數據到clickhouse,但是在yarn 集群充足的情況下一直報:Deployment took more than 60 seconds. Please check if the requested resources are available in the YARN cluster,表面現象是 yarn 集群資源可能不夠,實際yarn 集群資源是夠用的。

查看flink jobmanager的日志,發現日志中一直在出現如下報錯:

Could not resolve ResourceManager address akka.tcp://flink@xxxxxxxxx.cn:38121/user/rpc/resourcemanager_*, retrying in 10000 ms: Could not connect to rpc endpoint under address akka.tcp://xxxxxxx.cn:38121/user/rpc/resourcemanager_*.

從這個日志來看,也就基本可以確定不是yarn集群資源的問題,是yarn 集群通信出現了問題。

1)、交叉驗證,發現提交別的flink streamling 任務都不會存在該問題,只有寫clickhouse的時候才會出現該問題,初步排除可能是代碼問題或者該任務的jar包引起的。

2)、查看pom依賴:

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-jdbc_2.11</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.11</artifactId>
            <version>${flink.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka_2.11</artifactId>
            <version>${flink.version}</version>
      </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>${flink.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>ru.yandex.clickhouse</groupId>
            <artifactId>clickhouse-jdbc</artifactId>
            <version>${clickhouse-jdbc.version}</version>
       </dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>

從日志中雖然看不出明顯的jar包沖突問題,但是依然能從Could not resolve ResourceManager address akka.tcp://flink@xxxxxxxxx.cn:38121/user/rpc/resourcemanager_*, retrying in 10000 ms: Could not connect to rpc endpoint under address akka.tcp://xxxxxxx.cn:38121/user/rpc/resourcemanager_*. 聯想到可能是jar沖突或者jar包版本導致的沖突,導致 connect 失敗。

聯想到hadoop 環境中,最容易出現沖突的包,如下所示,首先去排查。

                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>

  然后發現,果然clickhouse-jdbc中存在這個包,如下所示

 在pom中排除該包,如下所示

        <dependency>
            <groupId>ru.yandex.clickhouse</groupId>
            <artifactId>clickhouse-jdbc</artifactId>
            <version>${clickhouse-jdbc.version}</version>
            <exclusions>
            <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
            </exclusion>
            </exclusions>
        </dependency>

重新運行,問題得到解決。

二、問題啟示:

1、所有的日志中沒有地方顯示代碼沖突,表層現象為Could not resolve ResourceManager address akka.tcp://flink@xxxxxxxxx.cn:38121/user/rpc/resourcemanager_*, retrying in 10000 ms: Could not connect to rpc endpoint under address akka.tcp://xxxxxxx.cn:38121/user/rpc/resourcemanager_*. 很難聯想到jar包沖突,后來靈感來源於

https://blog.csdn.net/qq_31957747/article/details/108883793   這個篇博文,雖然發生沖突的jar是不一樣,但是問題很類似,所以朝這個方向去做了嘗試。發現jar包沖突,真的可能會帶來這個問題。

2、flink on yarn 模式中,最容易出現flink任務的jar包和hadoop集群中的jar包沖突。 在寫代碼的時候,一般pom中可能是檢測不出來的,因為很多包不直接依賴。但是在flink run -m yarn-cluster 提交任務時,卻會使用到hadoop lib 下的classpath。 所以這種沖突代碼中很難檢測,實際中卻很容易出現。

3、不要被表面的現象迷惑,要能根據現象去看到本質,這樣才能解決到問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM