我正在使用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 Storage for Java的源代码,以找出问题原因。然后,我发现当getCreatedTime
版本低于BlobProperties
时,azure-storage
没有名为v7.1.0-Preview
的方法。同时,azure-storage
库是hadoop-azure
对HDInsight的依赖,其7.0.0
版本需要3.2.0
的最新版本hadoop-azure
如下。
所以你无法通过升级HDInsight解决问题,但你可以使用你的jar文件来覆盖HDInsight中相关的jar文件,通过设置下面的configure选项来改变classpath加载的优先级,使你的程序像本地一样运行。
spark.driver.userClassPathFirst
true