【问题标题】:How to add databricks avro jar to hdinsight如何将 databricks avro jar 添加到 hdinsight
【发布时间】:2017-04-04 15:54:11
【问题描述】:

我目前正在尝试使用外部库 spark-avro 在我们的 HDInsight 群集上运行 Spark Scala 作业,但没有成功。有人可以帮我解决这个问题吗? 目标是找到能够读取驻留在 HDInsight 群集上 Azure blob 存储上的 avro 文件的必要步骤。

当前规格:

  • Linux 上的 Spark 2.0 (HDI 3.5) 集群类型
  • Scala 2.11.8
  • spark-assembly-2.0.0-hadoop2.7.0-SNAPSHOT.jar
  • spark-avro_2.11:3.2.0

使用的教程:https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-apache-spark-intellij-tool-plugin

Spark Scala 代码:

基于以下示例:https://github.com/databricks/spark-avro

import com.databricks.spark.avro._
import org.apache.spark.sql.SparkSession

object AvroReader {

  def main (arg: Array[String]): Unit = {

    val spark = SparkSession.builder().master("local").getOrCreate()

    val df = spark.read.avro("wasb://container@storageaccount.blob.core.windows.net/directory")
    df.head(5)
  }
}

收到错误:

java.lang.NoClassDefFoundError: com/databricks/spark/avro/package$
    at MediahuisHDInsight.AvroReader$.main(AvroReader.scala:14)
    at MediahuisHDInsight.AvroReader.main(AvroReader.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:627)
Caused by: java.lang.ClassNotFoundException: com.databricks.spark.avro.package$
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

【问题讨论】:

  • 请提供您的构建文件。看起来你的 jar 需要一定的运行时依赖。

标签: scala apache-spark intellij-idea azure-hdinsight spark-avro


【解决方案1】:

默认情况下,您的 default_artifact.jar 仅包含您的类,而不包含您引用的库中的类。您大概可以为此使用“Referenced Jars”输入字段。

另一种方法是将解压缩的库添加到您的工件中。转到文件-> 项目结构。在可用元素下,右键单击 spark-avro 库并选择提取到输出根。点击 OK,然后 Build -> Build Artifacts 并重新提交。

【讨论】:

  • 感谢您的帮助! “提取到输出根目录”功能解决了这个问题。非常感谢!
猜你喜欢
  • 2022-08-23
  • 2013-05-07
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 2022-10-06
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多