如何将 databricks avro jar 添加到 hdinsight
How to add databricks avro jar to hdinsight
我目前正在尝试 运行 使用外部库 spark-avro 在我们的 HDInsight 集群上执行 Spark Scala 作业,但没有成功。有人可以帮我解决这个问题吗? 目标 是找到能够读取驻留在 HDInsight 群集上的 Azure blob 存储上的 avro 文件的必要步骤。
当前规格:
- Spark 2.0 on Linux (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.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
默认情况下,您的 default_artifact.jar 仅包含您引用的库中的 类,而不是 类。您大概可以为此使用 "Referenced Jars" 输入字段。
另一种方法是将解压后的库添加到工件中。转到文件 - >项目结构。在可用元素下,右键单击 spark-avro 库并 select 提取到输出根目录。点击 OK,然后 Build -> Build Artifacts 并重新提交。
我目前正在尝试 运行 使用外部库 spark-avro 在我们的 HDInsight 集群上执行 Spark Scala 作业,但没有成功。有人可以帮我解决这个问题吗? 目标 是找到能够读取驻留在 HDInsight 群集上的 Azure blob 存储上的 avro 文件的必要步骤。
当前规格:
- Spark 2.0 on Linux (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.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
默认情况下,您的 default_artifact.jar 仅包含您引用的库中的 类,而不是 类。您大概可以为此使用 "Referenced Jars" 输入字段。
另一种方法是将解压后的库添加到工件中。转到文件 - >项目结构。在可用元素下,右键单击 spark-avro 库并 select 提取到输出根目录。点击 OK,然后 Build -> Build Artifacts 并重新提交。