Spark代码打包上传到集群中运行时报错ClassNotFoundException

Spark代码打包上传到集群中运行时报错ClassNotFoundException,第1张

Spark代码打包上传到集群中运行时报错ClassNotFoundException

首先准备代码

import org.apache.spark.sql.{Dataframe, SaveMode, SparkSession}

object demo4onHive {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession
      .builder()
      .appName("demo4OnHive")
      .config("spark.sql.shuffle.partitions", 1)
      .enableHiveSupport() //在代码中开启hive元数据支持,后面写代码可以直接使用hive中的表
      .getOrCreate()

    import spark.implicits._
    import org.apache.spark.sql.functions._

    //通过表名获得一个Dataframe
    val students: Dataframe = spark.table("students")

    //DSL
    val df: Dataframe = students
      .groupBy($"clazz")
      .agg(count($"id"))

    //不写DSL的话可以直接编写sql使用hive中的表
//    val clazzNum: Dataframe = spark.sql(
//      """
//        |select clazz,count(1) from students group by clazz
//        |""".stripMargin)

    df.write
      .format("csv")
      .option("sep",",")
      .mode(SaveMode.Overwrite)
      .save("/data/on_hive")
  }
}

这里是统计每个班级的人数

打包前需要在pom.xml文件里面添加plugin,目的是将依赖打入Jar包


        

            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.1
                
                    1.8
                    1.8
                
            


            
            
                maven-assembly-plugin
                
                    
                        jar-with-dependencies
                    
                
                
                    
                        make-assembly
                        package
                        
                            single
                        
                    
                
            

            
            
                org.scala-tools
                maven-scala-plugin
                2.15.2
                
                    
                        
                            compile
                            testCompile
                        
                    
                
            

        

    

然后使用maven的打包功能

选择对应的module项目

打包完成后,将带有依赖的jar包上传到集群中,然后执行命令

spark-submit --master yarn-client --class demo4onHive Spark-1.0-SNAPSHOT-jar-with-dependencies.jar 

spark-submit 是spark的提交命令
–master 指定以yarn-client模式运行
–class 后面的 demo4OnHive是代码文件的路径,根据下图复制可得

最后面则是上传的jar包名称

执行命令后,如果报ClassNotFoundException,说明没有找到demo4OnHive,这是因为打包的时候是根据target文件夹打包,如果只是编写了代码,但是没有编译,那么最后打包的jar包里面就没有这个代码文件

因此可以将重新编译项目,也可以直接将target文件删掉,build需要打包的地方

然后再重新上传新的jar包并执行

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5696071.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存