ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

spark sql整合hive-重要

2022-07-17 21:34:21  阅读:194  来源: 互联网

标签:-- hive student sql spark id


spark sql整合hive

在spark sql中使用hive的元数据

spark sql是使用spark进行计算的,hive使用MR进行计算的

1、在hive的hive-site.xml修改一行配置,增加了这一行配置之后,以后在使用hive之前都需要先启动元数据服务

cd /usr/local/soft/hive-1.2.1/conf/

<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>

2、启动hive元数据服务, 将hvie的元数据暴露给第三方使用

nohup  hive --service metastore >> metastore.log 2>&1 &

3、将hive-site.xml 复制到spark conf目录下

cp hive-site.xml /usr/local/soft/spark-2.4.5/conf/

4、 将mysql 驱动包复制到spark jars目录下

cd /usr/local/soft/hive-1.2.1/jars
cp mysql-connector-java-5.1.49.jar /usr/local/soft/spark-2.4.5/jars/

5、整合好之后在spark-sql 里面就可以使用hive的表了
# 模式是local模式
spark-sql -conf  spark.sql.shuffle.partitions=2
# 使用yarn-client模式
spark-sql --master yarn-client  --conf  spark.sql.shuffle.partitions=2

#在spark-sql中设置运行参数
set spark.sql.shuffle.partitions=2;

在spark-sql中创建一个sparkdb数据库在hive中也可以看见,证明二者使用同一个数据库

现在如果不启动hive的元数据服务,就会报一个错误,如下:

spark-sql -e

-- 执行一条sql语句,执行完,自动退出
spark-sql -e "select * from sparkdb.student"

spark-sql -f

vim a.sql
select clazz,count(clazz) from spark.student group by clazz
-- 执行一个sql文件
spark-sql -f text.sql

当spark-sql 和hive整合好之后再代码中也可以直接使用hive的表

val spark: SparkSession = SparkSession
.builder()
.appName("onhive")
.enableHiveSupport() //开启hive的元数据支持,在代码中读取hive的元数据
.getOrCreate()

//读取hie的表
val studentDF = spark.talbe("studnet")

//写好的代码不能再本地运行, 需要打包上传到集群运行

spark sql和hvie的建表语句一样

create external table student
(
id  string,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS textfile
location '/spark/data/students/';

create table score
(
student_id  string,
cource_id string,
sco int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS textfile
location '/spark/data/scores/';

禁用集群spark日志

cd /usr/local/soft/spark-2.4.5/conf
mv log4j.properties.template log4j.properties
vim log4j.properties
修改配置
log4j.rootCategory=ERROR, console

spark sql和hive区别

1、spark sql缓存

-- 进入spark sql命令行
spark-sql
-- 可以通过一个网址访问spark任务
http://master:4040
-- 设置并行度
set spark.sql.shuffle.partitions=1;

-- 再spark-sql中对同一个表进行多次查询的时候可以将表缓存起来
cache table student;
-- 删除缓存
uncache table student;

-- 再代码中也可以缓存DF
 studentDF.persist(StorageLevel.MEMORY_ONLY)

网页变化如下:

以前:

现在:

2、spark sql mapjoin --- 广播变量

Reduce Join
select * from 
student as a
join 
score as b
on
a.id=b.student_id

MapJoin

当一个大表关联小表的时候可以将小表加载到内存中进行关联---- 广播变量

在map端进行表关联,不会产生shuffle

select /*+broadcast(a)  */ * from 
student as a
join 
score as b
on
a.id=b.student_id

/*+broadcast(a) */ HINT:给sql加提示的语法

标签:--,hive,student,sql,spark,id
来源: https://www.cnblogs.com/atao-BigData/p/16488505.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有