最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀spark添加二方包導(dǎo)致依賴沖突排查問題

 更新時間:2024年06月19日 10:01:05   作者:張哈希  
這篇文章主要介紹了spark添加二方包導(dǎo)致依賴沖突排查問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

問題描述

近期發(fā)現(xiàn)了一個線上問題,本地啟動byzer服務(wù)是正常的,但打好的docker鏡像就是拋異常跑不起來,而前幾天構(gòu)建的鏡像是正常的,初步定位到時新的發(fā)布導(dǎo)致的!

于是經(jīng)過了一系列痛苦的排查。

錯誤堆棧

看byzer-lang最近的提交記錄都在30天前,顯示不會是它的問題,于是根據(jù)日志研究。

7bafdda4df93] __MMMMMM__ Total jobs: 1 current job:1 job script:load modelList.`` as __output__ 
22/02/09 14:58:32  ERROR Executor: Exception in task 0.0 in stage 2.0 (TID 2)
java.lang.IllegalArgumentException: Illegal pattern component: XXX
at org.apache.commons.lang3.time.FastDatePrinter.parsePattern(FastDatePrinter.java:282)
at org.apache.commons.lang3.time.FastDatePrinter.init(FastDatePrinter.java:149)
at org.apache.commons.lang3.time.FastDatePrinter.<init>(FastDatePrinter.java:142)
at org.apache.commons.lang3.time.FastDateFormat.<init>(FastDateFormat.java:384)
at org.apache.commons.lang3.time.FastDateFormat.<init>(FastDateFormat.java:369)
at org.apache.commons.lang3.time.FastDateFormat$1.createInstance(FastDateFormat.java:91)
at org.apache.commons.lang3.time.FastDateFormat$1.createInstance(FastDateFormat.java:88)
at org.apache.commons.lang3.time.FormatCache.getInstance(FormatCache.java:82)

報錯xxx令人不知所措,一開始懷疑是modelList這個腳本在RestController執(zhí)行的時候,攜帶了這個xxx錯誤參數(shù),但因為是鏡像中不好debug,定位堆棧拋異常的是如下代碼:

val jsonDF = limitOrNot {
  df.limit(outputSize)
}.toJSON
val scriptJsonStringResult = fetchType match {
  case "collect" => jsonDF.collect().mkString(",")

看代碼得知是jsonDF.collect().mkString(",")這行的問題,outputSize數(shù)據(jù)有問題,但我并沒有在啟動服務(wù)的時候請求任何腳本,于是陷入了死胡同。

google后發(fā)現(xiàn)是一個spark2普遍的問題,找到如下文章:


描述很清晰,是commons-lang3依賴沖突導(dǎo)致的,需要保證commons-lang3依賴在3.5以上。

于是順著這個方向,排了工程里面相關(guān)的依賴,本地啟動正常,docker中啟動報錯。。。

于是懷疑是docker環(huán)境問題導(dǎo)致,拉取了最新的docker構(gòu)建腳本,發(fā)現(xiàn)大量新增代碼,果然是新增代碼的鍋,新增邏輯比較多,于是直接拉上相關(guān)同事一起看。

發(fā)現(xiàn)最近docker的lib文件夾下增加了很多jar,spark提交任務(wù)的腳本增加了很多插件類:

COPY lib/ansj_seg-5.1.6.jar \
  lib/nlp-lang-1.7.8.jar \
  lib/${AZURE_BLOB_NAME} \
  lib/mlsql-assert-${MLSQL_SPARK_VERSION}_${SCALA_BINARY_VERSION}-0.1.0-SNAPSHOT.jar \
  lib/mlsql-excel-${MLSQL_SPARK_VERSION}_${SCALA_BINARY_VERSION}-0.1.0-SNAPSHOT.jar \
  lib/mlsql-ext-ets-${MLSQL_SPARK_VERSION}_${SCALA_BINARY_VERSION}-0.1.0-SNAPSHOT.jar \
  lib/mlsql-shell-${MLSQL_SPARK_VERSION}_${SCALA_BINARY_VERSION}-0.1.0-SNAPSHOT.jar \
  lib/mlsql-mllib-${MLSQL_SPARK_VERSION}_${SCALA_BINARY_VERSION}-0.1.0-SNAPSHOT.jar \
  ${MLSQL_HOME}/libs/

spark-submit 任務(wù)啟動腳本:

$SPARK_HOME/bin/spark-submit --class streaming.core.StreamingApp \ --driver-memory ${DRIVER_MEMORY} \
               ...
-streaming.plugin.clzznames "tech.mlsql.plugins.ds.MLSQLExcelApp,tech.mlsql.plugins.assert.app.MLSQLAssert,tech.mlsql.plugins.shell.app.MLSQLShell,tech.mlsql.plugins.ext.ets.app.MLSQLETApp"

顯然是二方包導(dǎo)致的依賴沖突,而之前花了大量時間改byzer的依賴,打包,部署,重新構(gòu)建docker都是無用功!

但jar還是比較多,只能窮舉的在docker環(huán)境中一個一個的刪掉,測試是否有啟動異常,在排查到AZURE這個jar的時候發(fā)現(xiàn)了問題,該jar是我們?yōu)榱酥С諥ZURE添加的,已經(jīng)經(jīng)過沖突依賴shade處理的,shade重構(gòu)建的項目在這個REPO下:

GitHub - byzer-org/byzer-objectstore-dep

于是clone項目,使用maven Dependency Analyzer分析:

并沒有commons-lang3這個依賴,于是懷疑是其他依賴導(dǎo)致的沖突,把azure相關(guān)的依賴直接引入到byzer的項目中(為了做依賴沖突分析),于是驚奇的發(fā)現(xiàn)commons-lang3又有了:

是因為打包項目為了滿足不同的hadoop版本打包,設(shè)置了profiles,導(dǎo)致分析工具失效了:

修復(fù)問題

對azure-store項目中的依賴做shade處理:

<profile>
    <id>shade</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                            </excludes>
                        </filter>
                    </filters>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                    <relocations>
                     
                        <relocation>
                            <pattern>org.apache.commons</pattern>
                            <shadedPattern>shadeio.azure.org.apache.commons</shadedPattern>
                        </relocation>
                        <relocation>
                            <pattern>commons-lang</pattern>
                            <shadedPattern>shadeio.azure.commons-lang</shadedPattern>
                        </relocation>
                    </relocations>
                </configuration>

                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

在byzer-lang中添加統(tǒng)一的版本約束:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.10</version>
        </dependency>
    </dependencies>
</dependencyManagement>

在啟動byzer的子pom中顯式聲明依賴:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

問題得到解決,另外發(fā)現(xiàn)一個問題,雖然dependencyManagement定義版本這種定義方式有如下規(guī)范:

  • 如果子pom中顯式設(shè)置了version則以子pom的version為主
  • 需要使用父pom依賴時需要聲明依賴并且不設(shè)置version

但我測試發(fā)現(xiàn)在azure這個依賴中攜帶的commons-lang3即使不在子pom聲明使用dependencyManagement定義后,其版本也會被約束成3.10而不是以前的3.3。

筆者建議聲明一下避免打包解析樹的時候出現(xiàn)問題。

?總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文詳解Java如何使用commons-csv搞定CSV文件操作

    一文詳解Java如何使用commons-csv搞定CSV文件操作

    在?Java?開發(fā)中,處理?CSV(逗號分隔值)文件是一項常見的任務(wù),本文將利用Apache?Commons?CSV?庫實現(xiàn)讀取,寫入和操作CSV文件,希望對大家有所幫助
    2025-02-02
  • Java實現(xiàn)修改PDF文件MD5值且保持內(nèi)容不變

    Java實現(xiàn)修改PDF文件MD5值且保持內(nèi)容不變

    在某些場景中,我們可能需要改變PDF文件的MD5值,而又不希望改變文件的可視內(nèi)容,本文詳細(xì)介紹了如何實現(xiàn)這一目標(biāo),并提供了具體的Java實現(xiàn)示例,需要的可以參考下
    2023-10-10
  • Java中Map.merge()方法使用示例詳解

    Java中Map.merge()方法使用示例詳解

    這篇文章主要介紹了Map.merge()方法使用和介紹,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • springboot封裝JsonUtil,CookieUtil工具類代碼實例

    springboot封裝JsonUtil,CookieUtil工具類代碼實例

    這篇文章主要介紹了springboot封裝JsonUtil,CookieUtil工具類過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Netty通道的容器屬性Attribute詳解

    Netty通道的容器屬性Attribute詳解

    這篇文章主要介紹了Netty通道的容器屬性Attribute詳解,Netty中的Channel通道類,有類似于Map的容器功能,可以通過鍵值對的形式來保存任何Java Object的值,一般來說可以存放一些與通道實例相關(guān)聯(lián)的屬性,比如說服務(wù)期端的ServerSession會話實例,需要的朋友可以參考下
    2023-12-12
  • SpringCloud 中使用 Ribbon的方法詳解

    SpringCloud 中使用 Ribbon的方法詳解

    本文重點給大家介紹SpringCloud 中使用 Ribbon的方法,本文通過實例文字相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-10-10
  • SpringBoot集成Graphql Query實戰(zhàn)示例

    SpringBoot集成Graphql Query實戰(zhàn)示例

    這篇文章主要為大家介紹了SpringBoot集成Graphql Query實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Java中大數(shù)據(jù)推薦算法使用場景分析

    Java中大數(shù)據(jù)推薦算法使用場景分析

    在Java中實現(xiàn)大數(shù)據(jù)推薦算法時,通常會使用一些開源的機器學(xué)習(xí)庫,如Apache Mahout、Weka、DL4J(DeepLearning4j,用于深度學(xué)習(xí))或者Spark MLlib(用于在Spark集群上運行),這篇文章主要介紹了Java中可以用的大數(shù)據(jù)推薦算法,需要的朋友可以參考下
    2024-06-06
  • 關(guān)于ObjectUtils.isEmpty()?和?null?的區(qū)別

    關(guān)于ObjectUtils.isEmpty()?和?null?的區(qū)別

    這篇文章主要介紹了關(guān)于ObjectUtils.isEmpty()?和?null?的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring系列中的beanFactory與ApplicationContext

    Spring系列中的beanFactory與ApplicationContext

    這篇文章主要介紹了Spring系列中的beanFactory與ApplicationContext,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09

最新評論

名山县| 山东省| 台中县| 湖南省| 遂昌县| 永昌县| 通辽市| 华蓥市| 兴山县| 刚察县| 巫溪县| 邳州市| 长汀县| 汝州市| 健康| 勃利县| 荔浦县| 龙江县| 松阳县| 儋州市| 鲁甸县| 金川县| 远安县| 荆州市| 洪泽县| 克什克腾旗| 郴州市| 湖口县| 台南县| 贺兰县| 镇安县| 榆中县| 云安县| 湖州市| 扎囊县| 准格尔旗| 永和县| 阳东县| 松江区| 峡江县| 北流市|