java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.metadata.HiveException

spark依赖版本差异导致奇怪报错

代码

  • 测试代码
import org.apache.spark.sql.SparkSession

object SparkHive {
  def main(args: Array[String]): Unit = {

    val spark = SparkSession
      .builder()
      .master("local[1]")
      .appName("Spark Hive Example")
      //.config("spark.sql.warehouse.dir", warehouseLocation)
      .enableHiveSupport()
      .getOrCreate()

    import spark.implicits._
    import spark.sql

    val date = "20201121";
    //hive表读取
    sql(s"select * from ms_access_partition  where ms_access_partition.partdate = '$date'").show(3)

  }

}

错误

spark 读取hive时,出现如下错误
java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.metadata.HiveException

检查

  • 依赖检查
<properties>
    <scala.version>2.11.8</scala.version>
    <spotless.version>1.31.3</spotless.version>
    <spark.version>2.4.0</spark.version>
  </properties>
 
<dependencies>
  <!-- spark-core -->
 <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>

   <!-- spark-sql -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>

   <!-- spark-read-hive -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-hive_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>


    <!-- hive-jdbc -->
    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-jdbc</artifactId>
      <version>${hive.version}</version>
    </dependency>
    <!--  Hadoop client-->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.6.5</version>
    </dependency>
  </dependencies>


  • 连接设置
1.检查 resource下的core-site.xml,hdfs-site.xml,hive-site.xml配置是否正确
2.检查代码问题

本次原因

  • 代码依赖错误,spark依赖的scala时2.12.4,spark时spark-*-2.12,导致问题
 <properties>
    <scala.version>2.12.4</scala.version>
    <spotless.version>1.31.3</spotless.version>
    <spark.version>2.4.2</spark.version>
  </properties>

<dependencies>
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.4</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.specs</groupId>
      <artifactId>specs</artifactId>
      <version>1.2.5</version>
      <scope>test</scope>
    </dependency>

  <dependencies>
	<!-- spark-core -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.12</artifactId>
      <version>${spark.version}</version>
    </dependency>

	<!-- spark-sql -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.12</artifactId>
      <version>${spark.version}</version>
    </dependency>

  	<!-- spark-hive -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-hive_2.12</artifactId>
      <version>${spark.version}</version>
    </dependency>
    
    <!-- hive-jdbc -->
    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-jdbc</artifactId>
      <version>2.1.1</version>
    </dependency>
    
      <!-- hadoop-client -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.6.5</version>
    </dependency>
  </dependencies>

解决

  • 修改scala,spark依赖配置
<properties>
    <scala.version>2.11.8</scala.version>
    <spotless.version>1.31.3</spotless.version>
    <spark.version>2.4.0</spark.version>
  </properties>
 
<dependencies>
  <!-- spark-core -->
 <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>

   <!-- spark-sql -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>

   <!-- spark-read-hive -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-hive_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>


    <!-- hive-jdbc -->
    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-jdbc</artifactId>
      <version>${hive.version}</version>
    </dependency>
    <!--  Hadoop client-->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.6.5</version>
    </dependency>
  </dependencies>

  • 注意,spark-2.4.2有个问题,是唯一一个spark 2.4.x中用 scala 2.12.x编译的,避免使用该版本

修改后运行

spark-submit \
--class com.wacai.cn.SparkHive \
 SparkSql-1.0-jar-with-dependencies.jar
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.lang.ClassNotFoundExceptionJava编程中的一个异常类,它表示无法找到指定的类。在你提供的问题中,异常的完整名称是java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.io.parquet.mapreduce.ParquetInputFormat。 这个异常通常发生在Java程序中使用HadoopHive进行数据处理时。它的出现意味着Java虚拟机(JVM)无法加载指定的类。 主要原因可能有以下几种情况: 1. 缺少相关的依赖库:在使用Hive和Parquet进行数据处理时,需要正确配置和引入相关的依赖库。如果依赖库缺失或版本不匹配,就可能导致ClassNotFoundException的异常。解决方法是确保所有的依赖库都被正确引入,并且版本相互兼容。 2. 类路径配置错误:JVM在运行Java程序时会在类路径中查找需要的类。如果类路径没有正确配置,就无法找到目标类,也会触发ClassNotFoundException。检查类路径配置,确保包含了正确的依赖库和类路径。 3. 类名拼写错误:有时候,类名可能被错误地拼写,导致JVM无法找到目标类。在这种情况下,只需检查并修正类名的拼写错误即可。 综上所述,java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.io.parquet.mapreduce.ParquetInputFormat是一个Java类加载异常,常见于使用HadoopHive进行数据处理时。解决这个问题的关键是检查依赖库的引入、类路径的配置和类名的拼写,确保所有配置正确无误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值