文章目录
1. Spark SQL整合Hive
为什么要进行整合?
由于hive原生是基于MapReduce的,导致其查询耗时较长。而SparkSQL底层是spark core(RDD),在内存中计算数据,且是粗粒度资源调度。
为了保留Hive的架构解决方案,并优化查询速度,采用SparkSql与hive整合(spark on hive),通过SparkSQL读取hive中表的元数据,把HiveHQL底层采用MapReduce处理任务导致性能慢的特点,改为更加强大的Spark core引擎来进行相应的计算处理。
环境搭建准备 ( 搭建步骤前面写过 )
- 搭建hadoop集群
- 安装hive构建数据仓库
- 安装spark集群
SparkSQL整合hive
Spark SQL的其中一个分支就是Spark on Hive,就是使用Hive中HQL的解析逻辑、执行计划翻译、执行计划优化等逻辑,可认为将物理执行Task从MR作业替换成了Spark作业。
Spark SQL整合hive就是获取hive表中的元数据信息(在mysql中),然后通过Spark SQL来操作数据。
整合步骤:
2. SparkSQL与Hive共用元数据
2.1 开启Hive元数据服务
2.1.1 修改hive配置
在hive的
hive-site.xml
修改一行配置,增加了这一行配置之后,以后在使用hive之前都需要先启动元数据服务
开启hive元数据服务的目的: 是让spark sql 可以获取到hive的元数据
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>
2.1.2 启动hive元数据服务
启动Hive元数据服务,并验证Hive是否可用
启动命令:
nohup hive --service metastore >> metastore.log 2>&1 &
验证hive是否可用:hive
2.2 拷贝hive-site.xml和mysql驱动
将hive-site.xml 复制到spark conf目录下
cp hive-site.xml /usr/local/soft/spark-2.4.5/conf/
将 mysql 驱动包复制到saprk jars目录下
cp mysql-connector-java-5.1.17.jar /usr/local/soft/spark-2.4.5/jars/
2.3 启动SparkSQL
使用yarn-client模式启动,不能使用yarn-cluster模式
使用命令启动:spark-sql --master yarn-client
2.4 测试
1、在spark-sql中设置运行参数:set spark.sql.shuffle.partitions=2;
SparkSQL默认使用的并行度是200个,可以根据数据量的大小进行调。由于student库中的student表数据量较小,将之调整为2
2、统计每个班级的人数
select clazz,count(1) from student group by clazz;