Apache spark Avro的Spark教程

Apache spark Avro的Spark教程,apache-spark,Apache Spark,我从Spark开始,我的用例是读取Avro文件(数据源)并根据规则执行ETL。首先,我只是想尝试阅读AVRO并创建一个RDD。根据其中一个stackoverflow站点的建议,我` object abc { def main(args: Array[String]): Unit = { //val master = Properties.envOrElse("MASTER",args(0)) val path = args(0) val sparkConte

我从Spark开始,我的用例是读取Avro文件(数据源)并根据规则执行ETL。首先,我只是想尝试阅读AVRO并创建一个RDD。根据其中一个stackoverflow站点的建议,我`

object abc {

  def main(args: Array[String]): Unit = 
  { 
    //val master = Properties.envOrElse("MASTER",args(0))
    val path = args(0)
    val sparkContext = new SparkContext(new SparkConf().setAppName("My-spark-app"))
    val jobConf = new JobConf(sparkContext.hadoopConfiguration)
    val rdd = sparkContext.hadoopFile (
        path, 
        classOf[org.apache.avro.mapred.AvroInputFormat[GenericRecord]],
        classOf[org.apache.avro.mapred.AvroWrapper[GenericRecord]],
        classOf[org.apache.hadoop.io.NullWritable],
        10)

    println(rdd.first)

  }
}`
我的环境是CDH 5.1.3。我得到以下错误

15/03/17 08:53:58 INFO YarnClientClusterScheduler: YarnClientClusterScheduler.postStartHook done
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/avro/mapred/AvroInputFormat
        at com.scif.afw.abc$.main(abc.scala:30)
        at com.scif.afw.abc.main(abc.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:292)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:55)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.avro.mapred.AvroInputFormat
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
我已经使用Maven构建了这个项目,我的POM有AVROJAR,我可以在jar中看到这个类


感谢您的帮助

如果您使用的是yarn cluster,则可能会有来自warn.application.classpath的avro jar。NoClassDefFound可能是由类路径中同一类的多个实例引起的(1个来自您的jar,2个来自默认应用程序类路径)