当前位置: 首页 > news >正文

SparkSQL与Hive交互

SparkSQL与Hive交互

    • 一、内嵌Hive应用
    • 二、外部Hive应用
    • 三、运行Spark SQL CLI
    • 四、IDEA操作外部Hive

SparkSQL可以采用内嵌Hive,也可以采用外部Hive。企业开发中,通常采用外部Hive。

一、内嵌Hive应用

内嵌Hive,元数据存储在Derby数据库。
(1)如果使用Spark内嵌的Hive,则什么都不用做,直接使用即可。

[root@bigdata111 spark-local]$ bin/spark-shellscala> spark.sql("show tables").show

注意:执行完后,发现多了$SPARK_HOME/metastore_dbderby.log,用于存储元数据
(2)创建一个表

scala> spark.sql("create table user(id int, name string)")

注意:执行完后,发现多了$SPARK_HOME/spark-warehouse/user,用于存储数据库数据

(3)查看数据库

scala> spark.sql("show tables").show

(4)向表中插入数据

scala> spark.sql("insert into user values(1,'wgh')")

(5)查询数据

scala> spark.sql("select * from user").show

注意:然而在实际使用中,几乎没有任何人会使用内置的Hive,因为元数据存储在derby数据库,不支持多客户端访问。

二、外部Hive应用

如果Spark要接管Hive外部已经部署好的Hive,需要通过以下几个步骤:

(0)为了说明内嵌Hive和外部Hive区别:删除内嵌Hive的metastore_db和spark-warehouse

[root@bigdata111 spark-local]$ rm -rf metastore_db/ spark-warehouse/

(1)确定原有Hive是正常工作的

[root@bigdata111 hadoop-3.1.3]$ sbin/start-dfs.sh
[root@bigdata111 hadoop-3.1.3]$ sbin/start-yarn.sh[root@bigdata111 hive]$ bin/hive

(2)需要把hive-site.xml拷贝到spark的conf/目录下

[root@bigdata111 conf]$ cp hive-site.xml /opt/module/spark-local/conf/

(3)如果以前hive-site.xml文件中,配置过Tez相关信息,注释掉(不是必须

(4)把MySQL的驱动copy到Spark的jars/目录下

[root@bigdata111 software]$ cp mysql-connector-java-5.1.48.jar /opt/module/spark-local/jars/

(5)需要提前启动hive服务,/opt/module/hive/bin/hiveservices.sh start(不是必须

(6)如果访问不到HDFS,则需把core-site.xml和hdfs-site.xml拷贝到conf/目录(不是必须

(7)启动 spark-shell

[root@bigdata111 spark-local]$ bin/spark-shell

(8)查询表

scala> spark.sql("show tables").show

(9)创建一个表

scala> spark.sql("create table student(id int, name string)")

(10)向表中插入数据

scala> spark.sql("insert into student values(1,'wgh')")

(11)查询数据

scala> spark.sql("select * from student").show

三、运行Spark SQL CLI

Spark SQL CLI可以很方便的在本地运行Hive元数据服务以及从命令行执行查询任务。在Spark目录下执行如下命令启动Spark SQL CLI,直接执行SQL语句,类似Hive窗口。

[root@bigdata111 spark-local]$ bin/spark-sqlspark-sql (default)> show tables;

四、IDEA操作外部Hive

(1)在pom中添加依赖

<dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_2.12</artifactId><version>3.0.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.27</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive_2.12</artifactId><version>3.0.0</version></dependency>
</dependencies>

(2)拷贝hive-site.xml到resources目录(如果需要操作Hadoop,需要拷贝hdfs-site.xml、core-site.xml、yarn-site.xml)

(3)代码实现

package com.wghu.sparksqlimport org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession/*** User: WGH* Date:2023-03-08** idea写代码连接外部hive* 1.导入pom依赖,spark-sql  mysql连接驱动,spark-hive* 2.将hive-site.xml放入到项目的类路径下* 3.代码里面获取外部hive的支持,在创建sparkSession对象是加入.enableHiveSupport()*/object SparkSQL12_Hive {def main(args: Array[String]): Unit = {System.setProperty("HADOOP_USER_NAME","root")//1.创建配置对象val conf : SparkConf = new SparkConf().setAppName("SparkSQLTest").setMaster("local[*]")//2.创建sparkSession对象val spark: SparkSession = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()//3.编写代码//连接hivespark.sql("show tables").show()spark.sql("create table bbb(id int,name string)").show()spark.sql("insert into bbb values(1,'wgh')").show()spark.sql("select * from bbb").show()//4.关闭scspark.stop()}}
http://www.lryc.cn/news/34250.html

相关文章:

  • 「题解」日常遇到指针面试题
  • 实习生JAVA知识总结目录
  • GMPC认证有哪些内容?
  • D2-Net: A Trainable CNN for Joint Description and Detection of Local Features精读
  • Java基础面试题
  • SQL和MongoDB对比
  • 研究链表空间销毁问题
  • Linux面试总结
  • anaconda的linux版本以及jupyter的安装和DataSpell连接linux的jupyter服务器
  • Zookeeper集群和Hadoop集群安装(保姆级教程)
  • 利用matlab的newff构建BP神经网络来实现数据的逼近和拟合
  • 【经验分享】电路板上电就挂?新手工程师该怎么检查PCB?
  • 运筹系列68:TSP问题Held-Karp下界的julia实现
  • 神经影像信号处理总成(EEG、SEEG、MRI、CT)
  • ZooKeeper 进阶:基本介绍
  • CSS的常用元素属性,显示模式,盒模型,弹性布局
  • 【20230308】串口接收数据分包问题处理(Linux)
  • 数据库复试问题总结
  • Linux操作系统安装——服务控制
  • 【C语言】编译+链接
  • 为「IT女神勋章」而战
  • JS 动画 之 setInterval、requestAnimationFram
  • 【LeetCode——排序链表】
  • 二叉树的遍历(前序、中序、后序)| C语言
  • 【建议收藏】深入浅出Yolo目标检测算法(含Python实现源码)
  • Vue常见的事件修饰符
  • 【卷积神经网络】激活函数 | Tanh / Sigmoid / ReLU / Leaky ReLU / ELU / SiLU / GeLU
  • 刷题记录:牛客NC24048[USACO 2017 Jan P]Promotion Counting 求子树的逆序对个数
  • MpAndroidChart3最强实践攻略
  • Spring笔记(9):事务管理ACID