我正在使用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;
答案 0 :(得分:1)
根据您的错误信息,我尝试查看用于Java的Azure存储的源代码以找出问题的原因。然后,我发现当getCreatedTime
版本低于BlobProperties
时,azure-storage
没有名为v7.1.0-Preview
的方法。同时,azure-storage
库是hadoop-azure
对HDInsight的依赖项,并且其7.0.0
版本需要hadoop-azure
的最新版本3.2.0
,如下所示。 >
因此您无法通过升级HDInsight来解决此问题,但是可以通过设置以下配置选项来更改类路径加载的优先级,以使程序像在本地运行一样,使用jar文件覆盖HDInsight中的相关jar文件。
spark.driver.userClassPathFirst
的值设置为true
,请参见下面的正式含义。spark.executor.userClassPathFirst
的值设置为true
,请参见下面的正式含义。您可以在spark.conf
文件中进行设置或通过spark-submit
进行传递。