Spark 2连接到Hive MetaStore

时间:2017-04-19 10:52:14

标签: java scala apache-spark hive bigdata

过去3周,我正试图从我的机器远程连接到hive元商店。

我有所有配置文件:

  • 蜂巢现场
  • 和hdfs的配置

我已经设法使用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

2 个答案:

答案 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