过去3周,我正试图从我的机器远程连接到hive元商店。
我有所有配置文件:
我已经设法使用hdfs中的文件,所以它可以工作。
我想我拥有spark-> hive连接的所有罐子
我写的代码如下:
import org.apache.spark.sql.Row
import org.apache.spark.sql.SparkSession
val warehouseLocation = "/user/hive/warehouse"
val spark = SparkSession
.builder()
.appName("SparkHiveExample")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
它引发了这个异常:
Unable to instantiate SparkSession with Hive support because hive classes are not found. at org.apache.sql.SparkSession$builder.enableHiveSupport
我错过了什么罐子?
观察
如果我不使用enablehiveSupport(),那么它可以工作。
然后我得到了下一个例外,
could not initialize class org.apach.spark.rdd.RDDOperationScope
答案 0 :(得分:0)
我不确定,但发生这种情况可能是因为您忘记了Hive安装上的export HIVE_HOME
。所以SparkSession
无法找到查找hive类的位置。因此,您还需要编辑bash_profile。
nano ~/.bash_profile
将以下行添加到bash_profile
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
保存此文件,然后
source ~/.bash_profile
在此之后尝试运行您的代码。愿这可以解决你的问题。
答案 1 :(得分:0)
我过去曾这样做过,不幸的是,这并不是很简单。我使用命令
创建了一个带有hive的自定义spark分布./make-distribution.sh --name my-spark-dist --tgz -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn
我使用Hive hive-site.xml的客户端配置,指向远程hive和hdfs的core-site.xml和hdfs-site.xml,并且必须更改防火墙配置以允许连接到thrift服务器端口。
Spark是使用Hive 1.2.1编译的,文档说你可以使用较低版本的Metastore但不起作用。有效的最低版本是1.2.0,因为在运行时它会获取config属性中指定的jar,但在构建时它使用hive版本1.2.1 我为同一个https://issues.apache.org/jira/browse/SPARK-14492提出了一个火花虫 我不得不使用随Hive提供的升级工具
将我的Metastore数据库升级到服务版本1.2.0