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

时间:2019-03-08 11:22:36

标签: azure apache-spark azure-storage-blobs hdinsight

我正在使用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;

1 个答案:

答案 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,如下所示。 >

enter image description here

因此您无法通过升级HDInsight来解决此问题,但是可以通过设置以下配置选项来更改类路径加载的优先级,以使程序像在本地运行一样,使用jar文件覆盖HDInsight中的相关jar文件。

  1. spark.driver.userClassPathFirst的值设置为true,请参见下面的正式含义。

enter image description here

  1. spark.executor.userClassPathFirst的值设置为true,请参见下面的正式含义。

enter image description here

您可以在spark.conf文件中进行设置或通过spark-submit进行传递。