当前位置:   article > 正文

Spark SQL整合hive_sparksql整合mysql与整合hive的区别

sparksql整合mysql与整合hive的区别

为什么要进行整合?

由于hive原生是基于MapReduce的,导致其查询耗时较长。
为了保留Hive的架构解决方案,并优化查询速度,采用SparkSql与hive整合(spark on hive),通过SparkSql读取hive中表的元数据,把HiveHQL底层采用MapReduce处理任务导致性能慢的特点,改为更加强大的Spark引擎来进行相应的计算处理。

环境搭建准备

1、搭建hadoop集群
2、安装hive构建数据仓库
3、安装spark集群

SparkSQL整合hive

Spark SQL的其中一个分支就是Spark on Hive,就是使用Hive中HQL的解析逻辑、执行计划翻译、执行计划优化等逻辑,近似认为仅将物理执行计划从MR作业替换成了Spark作业。
Spark SQL整合hive就是获取hive表中的元数据信息(在mysql中),然后通过Spark SQL来操作数据。

整合步骤:

1 拷贝hive配置文件到spark

查看hive 目录中conf目录下的配置文件,hive-site.xml,可以发现之前配置的hive的元数据信息在node03的mysql数据库中。

 <property>
                <name>javax.jdo.option.ConnectionURL</name>
                <value>jdbc:mysql://node03.hadoop.com:3306/hive?createDatabaseIfNotExis
t=true</value>
        </property>
  • 1
  • 2
  • 3
  • 4
  • 5

整合需要spark能够读取找到Hive的元数据以及数据存放位置。所以需要将hive-site.xml文件拷贝到Spark的conf目录下。
在node01的hive安装目录下执行以下命令:

 cp conf/hive-site.xml /export/servers/spark/conf/
 scp conf/hive-site.xml node02:/export/servers/spark/conf/
scp conf/hive-site.xml node03:/export/servers/spark/conf/

  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

拷贝mysql驱动到spark

在node01中hive的lib目录下执行以下命令(因为在安装hive时已经拷贝了mysql驱动):
/export/servers/hive-1.1.0-cdh5.14.0/lib

cp mysql-connector-java-5.1.38.jar /export/servers/spark/jars/
scp mysql-connector-java-5.1.38.jar node02:/export/servers/spark/jars/
scp mysql-connector-java-5.1.38.jar node03:/export/servers/spark/jars/

  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

以上命令也可以在其他设备上执行,因为每台设备配置文件及mysql驱动jar包都相同。只要文件可以拷贝成功即可。

3 启动

启动HDFS,YARN集群(yarn集群也可以不启动,只启动hdfs即可);
启动spark集群;
在这里插入图片描述

启动hive,在node03上hive目录下(首先启动一下metastore服务):

nohup bin/hive --service metastore  &
bin/hive
  • 1
  • 2

在这里插入图片描述

启动spark sql
在spark安装目录的bin目录下:

spark-sql --master spark://node01:7077  --executor-memory 1g  --total-executor-cores 2
  • 1

启动时,发现有大量日志:
在这里插入图片描述

可进入/export/servers/spark/conf目录,调整日志级别:
cp log4j.properties.template log4j.properties
vim log4j.properties

# Set everything to be logged to the console
log4j.rootCategory=INFO, console
  • 1
  • 2

改为:

# Set everything to be logged to the console
log4j.rootCategory=WARN, console
  • 1
  • 2

在这里插入图片描述

重新启动sparkSQL
在这里插入图片描述

测试整合情况:

在这里插入图片描述

可以像在spark-sql中操作hive中的数据库和表,表明整合成功。

整合问题

在spark2.0版本后由于出现了sparkSession,在初始化sqlContext的时候,会设置默认的spark.sql.warehouse.dir=spark-warehouse,
此时将hive与sparksql整合完成之后,在通过spark-sql脚本启动的时候,还是会在哪里启动spark-sql脚本,就会在当前目录下创建一个spark.sql.warehouse.dir为spark-warehouse的目录,存放由spark-sql创建数据库和创建表的数据信息,与之前hive的数据信息不是放在同一个路径下(可以互相访问)。但是此时spark-sql中表的数据在本地,不利于操作,也不安全。

所有在启动的时候需要加上这样一个参数:

--conf  spark.sql.warehouse.dir=hdfs://node1:9000/user/hive/warehouse
  • 1

保证spark-sql启动时不在产生新的存放数据的目录,sparksql与hive最终使用的是hive同一存放数据的目录。
如果使用的是spark2.0之前的版本,由于没有sparkSession,不会有spark.sql.warehouse.dir配置项,不会出现上述问题。

spark-sql \
--master spark://node01:7077 \
--executor-memory 1g \
--total-executor-cores 2 \
--conf  spark.sql.warehouse.dir=hdfs://node01:8020/user/hive/warehouse

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/991335
推荐阅读
相关标签
  

闽ICP备14008679号