Spark读取Mysql数据写入Hive

代码片段

package SparkToHive
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

import java.util.Properties
//spark读取Mysql数据,并写入到Hive指定表中
object SparkHivePatition {
  def main(args: Array[String]): Unit = {
    val sparkConf=new SparkConf().setMaster("local[*]").setAppName("ReadMysqlToHive")
    //创建Hive的session
    val sparkSessionWithHive: SparkSession = SparkSession.builder().config("hive.metastore.uris", 
    "thrift://192.168.38.160:9083").enableHiveSupport().config(sparkConf).getOrCreate()
// 这个地方的端口统一使用9083,并且在虚拟机开启hiveserver2服务
    //mysql的配置信息
    val prop=new Properties()
    prop.put("user","root")
    prop.put("password","123456")

    val url="jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"
    //查询MySQL的数据,用dataFrame保存数据
    val dataFrame=sparkSessionWithHive.read.jdbc(url,"employee",prop).select("*").where("id>0")

    //切换hive数据库
    sparkSessionWithHive.sql("use ssm")
    //以年为分组,将数据保存到表new_test_partition中,savaMode为覆盖,也可以选择append追加
    dataFrame.write.mode("overwrite").partitionBy("year").saveAsTable("new_test_partition")
    sparkSessionWithHive.sql("select * from new_test_partition").show()     //读取Hive表并展示到控制台
      sparkSessionWithHive.stop()
  }
}
   

如果遇到错误,请检查以下步骤是否完成

1、代码运行之前要在虚拟机上开启hive仓库服务:hive --service metastore
这是一个堵塞进程,所以要复制会话进行别的操作。

2、更改本机(windows) hosts文件,将要连接的虚拟机地址+主机名添加在hosts文件中。
示例:192.168.38.xxx master

3、连接之前检查Hadoop集群是否已经开启,hive仓库在hdfs的默认地址为:/user/hive/warehouse
如果运行代码出现权限问题,请修改此文件夹的权限
hdfs dfs -chmod -R 777 /user/hive/warehouse/

注意:hive的数据仓库建立在hdfs上,hdfs的数据保存在虚拟机里配置

1、当使用DG工具远程连接Hive仓库时,要使用hiveserver2服务(端口:10000)
2、当使用spark远程操控hive时,使用hiveserver(端口:9083)

原因:

hiveserver2不需要jdbc连接包即可远程连接hive,DG工具并没有此连接包,所以就只能使用hiveserver2进行连接操作。而Spark代码中可以在pom中添加jdbc连接协议,所以可以使用hiveserver进行连接。

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值