Spark使用scala语言连接hive数据库

一、步骤

step1:使用idea创建maven管理工具创建项目

step2:在main下添加resources文件夹,并设置为Resources root

step3:拷贝Hadoop安装路径中etc目录下的core-site.xml、hdfs-site.xml文件到resources中

step4:拷贝hive安装路径中conf目录下的hive-site.xml文件到resources中

Spark使用scala语言连接hive数据库

step5:修改hive-site.xml文件中的javax.jdo.option.ConnectionURL,改为自己虚拟机的IP地址

javax.jdo.option.ConnectionURL
  jdbc:mysql://192.168.90.3:3306/hive(mysql地址localhost)

step6:依赖配置

org.apache.spark
      spark-core_2.12
      3.0.0

      org.apache.spark
      spark-sql_2.12
      3.0.0

      com.springml
      spark-sftp_2.11
      1.1.5

      org.scala-lang
      scala-library
      2.11.12

      commons-net
      commons-net
      3.6

      com.jcraft
      jsch
      0.1.55

      mysql
      mysql-connector-java
      5.1.44

      io.delta
      delta-core_2.12
      0.5.0

      org.apache.hive
      hive-jdbc
      2.3.0

      org.apache.spark
      spark-hive_2.12
      3.0.0

step7:创建对象

import org.apache.spark.sql.SparkSession

object Test1 {

  def main(args: Array[String]): Unit = {
//    val conf = new SparkConf().setMaster("local[1]").setAppName("sparkDemo2")
//    val sc = SparkContext.getOrCreate(conf)
//    sc.setLogLevel("error")

//    建立sparkSession,并传入定义好的Conf
    val spark = SparkSession
      .builder()
      .master("local[*]")
      .appName("sparkDemo")
      .enableHiveSupport()
      .getOrCreate()

    spark.sql("show databases").show()
    spark.sql("select * from test_data.teacher").show()
    spark.sql("insert into test_data.teacher values(1,'zs')")
  }
}

step8:执行成功。

问题总结

问题一:

java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT

Spark使用scala语言连接hive数据库

问题原因:

spark-hive jar包版本冲突

出现问题时使用的jar包版本

org.apache.spark
  spark-core_2.12
  3.0.0

  org.apache.spark
  spark-sql_2.12
  3.0.0

  org.apache.spark
  spark-hive_2.12
  2.4.0

解决方案:

修改spark-hive的版本,与spark-core、spark-sql一致,修改后此问题解决

org.apache.spark
  spark-hive_2.12
  3.0.0

问题二:

java.lang.AssertionError: assertion failed: No plan for HiveTableRelation

Spark使用scala语言连接hive数据库

出现问题时代码:

val conf = new SparkConf().setMaster("local[1]").setAppName("sparkDemo2")
    val sc = SparkContext.getOrCreate(conf)
    sc.setLogLevel("error")

//    建立sparkSession,并传入定义好的Conf
    val spark = SparkSession
      .builder()
      .master("local[*]")
      .appName("sparkDemo")
      .enableHiveSupport()
      .getOrCreate()

解决方法:

将前三行代码去掉

Original: https://blog.csdn.net/Flychuer/article/details/124989362
Author: 猿界零零七
Title: Spark使用scala语言连接hive数据库

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/818283/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球