网站建设技术架构和语言,高校建设主流的校园网站,宇泽佛山网站建设,传奇页游排行榜SparkSQL与Hive交互一、内嵌Hive应用二、外部Hive应用三、运行Spark SQL CLI四、IDEA操作外部HiveSparkSQL可以采用内嵌Hive#xff0c;也可以采用外部Hive。企业开发中#xff0c;通常采用外部Hive。
一、内嵌Hive应用
内嵌Hive#xff0c;元数据存储在Derby数据库。 也可以采用外部Hive。企业开发中通常采用外部Hive。
一、内嵌Hive应用
内嵌Hive元数据存储在Derby数据库。 1如果使用Spark内嵌的Hive则什么都不用做直接使用即可。
[rootbigdata111 spark-local]$ bin/spark-shellscala spark.sql(show tables).show注意执行完后发现多了$SPARK_HOME/metastore_db和derby.log用于存储元数据 2创建一个表
scala spark.sql(create table user(id int, name string))注意执行完后发现多了$SPARK_HOME/spark-warehouse/user用于存储数据库数据
3查看数据库
scala spark.sql(show tables).show4向表中插入数据
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
[rootbigdata111 spark-local]$ rm -rf metastore_db/ spark-warehouse/1确定原有Hive是正常工作的
[rootbigdata111 hadoop-3.1.3]$ sbin/start-dfs.sh
[rootbigdata111 hadoop-3.1.3]$ sbin/start-yarn.sh[rootbigdata111 hive]$ bin/hive2需要把hive-site.xml拷贝到spark的conf/目录下
[rootbigdata111 conf]$ cp hive-site.xml /opt/module/spark-local/conf/3如果以前hive-site.xml文件中配置过Tez相关信息注释掉不是必须
4把MySQL的驱动copy到Spark的jars/目录下
[rootbigdata111 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
[rootbigdata111 spark-local]$ bin/spark-shell8查询表
scala spark.sql(show tables).show9创建一个表
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窗口。
[rootbigdata111 spark-local]$ bin/spark-sqlspark-sql (default) show tables;四、IDEA操作外部Hive
1在pom中添加依赖
dependenciesdependencygroupIdorg.apache.spark/groupIdartifactIdspark-sql_2.12/artifactIdversion3.0.0/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.27/version/dependencydependencygroupIdorg.apache.spark/groupIdartifactIdspark-hive_2.12/artifactIdversion3.0.0/version/dependency
/dependencies2拷贝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()}}