项目场景:
项目场景:hive与SparkSQL整合时,出现该报错,严格意义上来说是
使用SparkSQL命令时遇到该报错
问题描述
在使用SparkSQL命令时遇到该报错
java.lang.ClassNotFoundException: org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:229)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:695)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Failed to load main class org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver.
You need to build Spark with -Phive and -Phive-thriftserver.
原因分析:
这是外网原文中谈及的原因
This error usually occurs when installing a Spark version without built-in Hadoop libraries (headless version) as the Spark hive and hive thrift server packages are not included.
大意是说,这个问题的原因是你安装spark时选择了without Hadoop的版本, 所以没有找到Spark hive
和hive thrift server
的包
解决方案:
有两种解决方式
一、重新安装spark,选择带hadoop的版本
在spark官网下载界面下载spark
下载好安装包后上传至服务器
进行解压安装
tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz
放到你想安装的目录,建立软连接
sudo mv spark-2.1.0-bin-hadoop2.7 /usr/local/
sudo ln -snf /usr/local/spark-2.1.0-bin-hadoop2.7/ /usr/local/spark
软连接的目的是为了以后更换spark版本方便,操作也简洁
编辑环境变量
vim /etc/profile
#Spark
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin
source /etc/profile
$SPARK_HOME/conf
中有配置文件的示例,复制一份,编辑配置文件
cp spark-env.sh.template spark-env.sh
在文件中添加这一行
这是spark对Hadoop的依赖地址
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
之后就可以启动spark
二、手动下载缺失的jar包
这种方法不一定有用
手动下载包
If you are installing other versions of Spark, download the right package accordingly.
请下载与你spark版本对应的包
安装包下载地址:
Maven仓库中spark-hive-thriftserver
下载包或者利用sftp工具上传:
wget https://repo1.maven.org/maven2/org/apache/spark/spark-hive-thriftserver_2.12/3.0.1/spark-hive-thriftserver_2.12-3.0.1.jar
将包放到$SPARK_HOME/jars
文件夹下
mv spark-hive-thriftserver_2.12-3.0.1.jar $SPARK_HOME/jars/
下载另一个需要的文件spark-hive_*
wget https://repo1.maven.org/maven2/org/apache/spark/spark-hive_2.12/3.0.1/spark-hive_2.12-3.0.1.jar
放到$SPARK_HOME/jars
文件夹下
mv spark-hive_2.12-3.0.1.jar $SPARK_HOME/jars/
现在sparksql可以正常使用了
注意:确保你的HiveServer2服务在sparksql运行前就启动了