项目场景: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运行前就启动了



