Spark 2 连接到 Hive MetaStore [重复]

Posted

技术标签:

【中文标题】Spark 2 连接到 Hive MetaStore [重复]【英文标题】:Spark 2 connection to Hive MetaStore [duplicate] 【发布时间】:2017-04-19 10:52:13 【问题描述】:

在过去的 3 周里,我正在尝试从我的机​​器远程连接到 hive metaStore。

我有所有的配置文件:

蜂巢站点 和 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

【问题讨论】:

我认为我拥有所有依赖项 当我导入 org.apache.spark.sql.hive_ 时一切正常 你找出问题所在了吗? 【参考方案1】:

我不确定,但这可能是因为您在安装 Hive 时忘记export HIVE_HOME。所以SparkSession 无法找到在哪里寻找蜂巢类。因此,您还需要编辑 bash_profile。

nano ~/.bash_profile

将以下行添加到您的 bash_profile

export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin

保存此文件,然后

source ~/.bash_profile

在此之后尝试运行您的代码。愿这能解决你的问题。

【讨论】:

好吧,问题是我正在尝试远程连接到 hive MetaStore,但我没有 HIVE_HOME env 变量【参考方案2】:

我过去曾这样做过,不幸的是它不是很简单。我使用命令

创建了带有 hive 的自定义 spark 分布
./make-distribution.sh --name my-spark-dist --tgz  -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn 

我使用 Hive hive-site.xml、core-site.xml 和 hdfs-site.xml 的客户端配置指向远程 hive 和 hdfs,并且必须更改防火墙配置以允许连接到 thrift 服务器端口。

Spark 是使用 Hive 1.2.1 编译的,文档说您可以使用较低版本的元存储,但这不起作用。工作的最低版本是 1.2.0,因为在运行时它会获取配置属性中指定的 jar,但在构建时它使用 hive 版本 1.2.1 我为相同的https://issues.apache.org/jira/browse/SPARK-14492 提出了一个火花错误 我必须使用 Hive 提供的升级工具将 Metastore 数据库和服务升级到 1.2.0 版

【讨论】:

以上是关于Spark 2 连接到 Hive MetaStore [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 Apache Spark 2.4.5 以连接到 HIVE 的 MySQL Metastore?

如何将 Spark-Notebook 连接到 Hive 元存储?

将 Spark SQL Hive 服务器连接到 Cassandra?

在 Spark 中使用 jdbc 驱动程序连接到 Hive

从 Apache Spark 连接到 Hive [重复]

通过 squirrel sql 连接到 hive/spark sql 时读取超时