Кластер SparkHDInsights при использовании blobproperties.getcreatedtime не работает - PullRequest
2 голосов
/ 08 марта 2019

Я использую кластер SparkHDInsights для запуска jar с помощью команды spark-submit. Я использовал

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 Ответ

1 голос
/ 11 марта 2019

Согласно вашей информации об ошибке, я попытался просмотреть исходный код хранилища Azure для Java, чтобы выяснить причину проблемы. Затем я обнаружил, что нет метода с именем getCreatedTime для BlobProperties, когда версия azure-storage ниже, чем v7.1.0-Preview. Между тем, библиотека azure-storage зависит от hadoop-azure от HDInsight, и для ее версии 7.0.0 требуется последняя версия 3.2.0 из hadoop-azure, как показано ниже.

enter image description here

Таким образом, вы не можете решить проблему с помощью обновления HDInsight, но вы можете использовать ваши файлы JAR для покрытия связанных файлов JAR в HDInsight, установив параметры конфигурации ниже, чтобы изменить приоритет загрузки classpath, чтобы ваша программа работала как в локальном .

  1. Установить spark.driver.userClassPathFirst значение true, см. Официальное значение ниже.

enter image description here

  1. Установите spark.executor.userClassPathFirst значение true, см. Официальное значение ниже.

enter image description here

Опции выше вы можете установить в spark.conf файле или передать через spark-submit.

...