scala windows本地spark读取mysql8.0表插入远程hive3.0表 spark ETL mysql to hive

package main.scala.work

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

object MysqlToHive {

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

    // 1. 创建SparkSession并启用Hive支持
    val spark = SparkSession.builder()
      .appName("Spark3.4.1 Hive Reader")
      .master("local[*]")
      .config("hive.metastore.uris", "thrift://master:9083")  // 在 window的hosts配置IP映射:you_ip master
      .config("spark.sql.warehouse.dir", "hdfs://master:9000/opt/hiveDataFile")  //配置远程hdfs数据文件存储路径
      .enableHiveSupport()
      .getOrCreate()


//    val df =  spark.sql("select * from test_db.room2")
//    df.printSchema()
//    df.show()


    // 2. 配置MySQL连接参数
    val jdbcUrl = "jdbc:mysql://localhost:3306/hivedata?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8"
    val mysqlProps = new java.util.Properties()
    mysqlProps.setProperty("user", "root")
    mysqlProps.setProperty("password", "123456")
    mysqlProps.setProperty("driver", "com.mysql.jdbc.Driver")

    // 3. 从MySQL读取数据
    val mysqlDF = spark.read.jdbc(jdbcUrl, "room2", mysqlProps)

    // 4. 写入Hive表
//    mysqlDF.write
//      .mode(SaveMode.Overwrite) // 覆盖模式:append/ignore/overwrite
//      .saveAsTable("test_db.room2")

    //5. 创建临时视图使用sql插入
    mysqlDF.createTempView("temp_table") // 创建临时视图
    spark.sql("INSERT OVERWRITE TABLE test_db.room2 SELECT * FROM temp_table") //以覆盖的模式插入


    spark.stop()
  }

}

  

posted @ 2025-07-15 19:47  ARYOUOK  阅读(11)  评论(0)    收藏  举报