安装Spark3之后Spark-SQL读不到之前安装好的Hive 数据库

  • 前言
  • 一、问题?
  • 二、解决方案
  • 方法1.引入hive-site.xml
  • 方法2.很多步骤 ><
  • 1.增加CDH环境配置
  • 2.增加spark配置
  • 2.1 spark-defaults.conf
  • 2.2 spark-env.sh
  • 2.3 log4j.properties
  • 2.4 分发 spark软件包
  • 2.5 执行spark-sql



前言

因为之前已经 安装过CDH 其中版本为 hive 2.1.1与spark 2.2.0 , 再另外安装Spark3之后,Spark3是调用自己default 的hive。无法连接之前安装过CDH的hive数据库。


一、问题?

透过新安装的Spark3连接hive结果只有default数据库,并无其他hive中已创建好的数据库,期望可以连接到能显示hive中其他的数据库。

hive spark 监控 spark hive3_spark

二、解决方案

方法1.引入hive-site.xml

在安装spark3后发现spark/conf里面并没有hive-site.xml档案:

hive spark 监控 spark hive3_大数据_02


将hive安装目录下的hive-site.xml拷贝到SPARK_HOME/conf下!

方法2.很多步骤 ><

1.增加CDH环境配置

在hive安装目录下的hive-site.xml拷贝到SPARK_HOME/conf目录下建立hadoop/hive相关配置文件的软连接!

cd $SPARK_3_0_1_HOME/conf

ln -s /etc/hive/conf/hdfs-site.xml hdfs-site.xml

ln -s /etc/hive/conf/mapred-site.xml mapred-site.xml

ln -s /etc/hive/conf/yarn-site.xml yarn-site.xml

ln -s /etc/hive/conf/core-site.xml core-site.xml

ln -s /etc/hive/conf/hive-env.sh hive-env.sh

ln -s /etc/hive/conf/hive-site.xml hive-site.xml

ps:如果软连接没添加的话,很容易在连spark-shell指令或是执行spark-sql时,会一直出现连线的状态如下,目前我只添加在master 机上建置软连接:

hive spark 监控 spark hive3_hive_03

2.增加spark配置

SPARK_HOME/conf目录下修改!spark-defaults.conf与spark-env.sh和log4j.properties配置。

2.1 spark-defaults.conf

SPARK_HOME/conf目录下修改!spark-defaults.conf可以复制既有spark-defaults.conf.template取代 。打开spark-defaults.conf 添加下面的配置。

# hive metastore版本设置为 2.1.1
spark.sql.hive.metastore.version=2.1.1
# 引用 HIVE在 cloudera/parcels相关的jar包
spark.sql.hive.metastore.jars=/opt/cloudera/parcels/CDH/lib/hive/lib/*
# 设置 spark提交任务默认的 yarn 队列
spark.yarn.queue=root.analysis
2.2 spark-env.sh

SPARK_HOME/conf目录下修改!spark-env.sh可以复制既有spark-env.sh.template取代 。打开spark-env.sh添加下面的配置。

# 添加 hadoop 配置文件的路径
export HADOOP_CONF_DIR=/etc/hadoop/conf
 # 添加 spark job history 相关参数 包括日志的 web ui的端口 / 缓存的spark作业日志数目 / 日志的hdfs路径
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://nameservice1/user/history/done_intermediate/spark3.0.1/eventlogs"
2.3 log4j.properties

SPARK_HOME/conf目录下修改!log4j.properties可以复制既有log4j.properties.template取代 。如果有个别需求,自己添加。

2.4 分发 spark软件包

将配置好的spark软件包分发到 CDH 集群的其他节点上

#XXX01是传过去的主机位置, spark是最上层目录
scp -r spark root@XXX01:/opt/soft/.
2.5 执行spark-sql

SPARK_HOME/bin目录下,执行以下指令:

# 运行 spark-sql命令
/opt/soft/spark/bin/spark-sql --master yarn --name spark-sql-test

####### 2.5 .1执行spark-sql 发生的问题

出现Failed to load main class org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver.这是不能加载 org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver 这个类,添加spark-hive-thriftserver_版本号.jar

hive spark 监控 spark hive3_spark_04


解决方式就是添加spark-hive-thriftserver_版本号.jar包到自己搭建spark中存放jar的目录里,我这边是放在/opt/soft/spark/jars这个文志。

我放的是spark-hive-thriftserver_2.12-3.0.0.jar版本


# 总结 提示:这里对文章进行总结: 发现在当时在安装spark-3.0.0-bin-hadoop3.2.tgz时候, 用方法1就可以解决,如果不能解决就用方法2