使用blobproperties.getcreatedtime时,SparkHDInsights集群不起作用

问题描述 投票:2回答:1

我正在使用SparkHDInsights集群使用spark-submit命令运行jar。我用过

libraryDependencies += "com.microsoft.azure" % "azure-storage" % "8.1.0" 

在sbt文件中。

该计划在当地完全正常。只有在尝试在集群上运行时才会创建异常。我相信它使用库"com.microsoft.azure" % "azure-storage" % "5.3.0",它可以是Azure HDI集群中的默认选项。

该程序片段是:

val blob = blobInDir.asInstanceOf[CloudBlockBlob]  
var blobtime = blob.getProperties.getCreatedTime().getTime

我收到的错误如下:

Exception in thread "main" java.lang.NoSuchMethodError: com.microsoft.azure.storage.blob.BlobProperties.getCreatedTime()Ljava/util/Date;
azure apache-spark azure-storage-blobs hdinsight
1个回答
1
投票

根据您的错误信息,我尝试查看Azure Storage for Java的源代码,以找出问题原因。然后,我发现当getCreatedTime版本低于BlobProperties时,azure-storage没有名为v7.1.0-Preview的方法。同时,azure-storage库是hadoop-azure对HDInsight的依赖,其7.0.0版本需要3.2.0的最新版本hadoop-azure如下。

enter image description here

所以你无法通过升级HDInsight解决问题,但你可以使用你的jar文件来覆盖HDInsight中相关的jar文件,通过设置下面的configure选项来改变classpath加载的优先级,使你的程序像本地一样运行。

  1. 设置qazxsw poi值是qazxsw poi,请参阅下面的官方含义。

spark.driver.userClassPathFirst

  1. 设置qazxsw poi值是qazxsw poi,请参阅下面的官方含义。

true

上面的选项可以在enter image description here文件中设置或通过spark.executor.userClassPathFirst传递。

© www.soinside.com 2019 - 2024. All rights reserved.