我正在使用 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的源代码以找出问题原因。然后,我发现当azure-storage
版本低于v7.1.0-时,
。同时,BlobProperties
没有名为getCreatedTime
的方法预览azure-storage
库是hadoop-azure
对HDInsight的依赖,其7.0.0
版本需要最新版本3.2.0
hadoop-azure
如下。
因此,您无法通过升级HDInsight来解决该问题,但您可以通过设置以下配置选项来使用您的jar文件覆盖HDInsight中的相关jar文件来更改类路径加载的优先级,以使您的程序像在本地一样运行.
- 设置
spark.driver.userClassPathFirst
值为true
,请查看下面的官方含义。
- 设置
spark.executor.userClassPathFirst
值为true
,请查看下面的官方含义。
上面的选项可以在 spark.conf
文件中设置或通过 spark-submit
传递。
关于azure - 使用 blobproperties.getcreatedtime 时 SparkHDInsights 集群不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55062204/