【问题标题】:SparkHDInsights cluster when using blobproperties.getcreatedtime is not working使用 blobproperties.getcreatedtime 时 SparkHDInsights 群集不起作用
【发布时间】:2019-07-30 10:14:08
【问题描述】:

我正在使用 SparkHDInsights 集群通过 spark-submit 命令运行 jar。我用过

libraryDependencies += "com.microsoft.azure" % "azure-storage" % "8.1.0" 

在 sbt 文件中。

该程序在本地运行良好。只有在尝试在集群上运行时才会创建异常。我相信它使用库 "com.microsoft.azure" % "azure-storage" % "5.3.0",这可能是 Azure HDI 集群中的默认选项。

程序sn-p是:

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 apache-spark azure-blob-storage azure-hdinsight


    【解决方案1】:

    根据您的错误信息,我尝试查看 Azure Storage for Java 的源代码以找出问题原因。然后,我发现当azure-storage版本低于v7.1.0-Preview时,BlobProperties没有名为getCreatedTime的方法。同时azure-storage库是hadoop-azure对HDInsight的依赖,其7.0.0版本需要hadoop-azure的最新版本3.2.0如下。

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

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

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

    以上选项可以在spark.conf文件中设置或者通过spark-submit传递。

    【讨论】:

    • 谢谢先生。我尝试使用 --driver-class-path 和 spark-submit。当我强制使用所需的更新 jar 时,它起作用了。
    • 感谢您帮助我解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多