首页 > 解决方案 > 使用 blobproperties.getcreatedtime 时 SparkHDInsights 群集不起作用

问题描述

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

标签: azureapache-sparkazure-blob-storageazure-hdinsight

解决方案


根据您的错误信息,我尝试查看 Azure Storage for Java 的源代码以找出问题原因。然后,我发现当版本低于getCreatedTime. 同时,该库是对 HDInsight 的依赖,其版本要求为最新版本,如下所示。BlobPropertiesazure-storagev7.1.0-Previewazure-storagehadoop-azure7.0.03.2.0hadoop-azure

在此处输入图像描述

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

  1. 设定spark.driver.userClassPathFirst值为true,请看下面的官方含义。

在此处输入图像描述

  1. 设定spark.executor.userClassPathFirst值为true,请看下面的官方含义。

在此处输入图像描述

您可以在文件中设置上述选项spark.conf或通过spark-submit.


推荐阅读