【问题标题】:Hive on Tez doesn't work in Spark 2Tez 上的 Hive 在 Spark 2 中不起作用
【发布时间】:2017-10-01 03:54:10
【问题描述】:

在使用 HDP 2.5 和 spark 1.6.2 时,我们使用带有 Tez 的 Hive 作为其执行引擎并且它工作正常。

但是当我们使用 spark 2.1.0 迁移到 HDP 2.6 时,Hive 无法使用 Tez 作为其执行引擎,并且在调用 DataFrame.saveAsTable API 时引发了以下异常:

java.lang.NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:529) at org.apache.spark.sql.hive.client.HiveClientImpl.<init> HiveClientImpl.scala:188)

在查看this 问题的答案后,我们将 hive 执行引擎切换到 MR (MapReduce) 而不是 Tez 并且它起作用了。

不过,我们希望在 Tez 上与 Hive 合作。为了使 Tez 上的 Hive 正常工作,解决上述异常需要什么?

【问题讨论】:

  • 我的两分钱:检查 Spark 使用的 hive-site.xml 是否已从所有 TEZ 配置属性中清除。
  • 但我们想使用 TEZ。我的问题是我们是否可以在带有 HDP 2.6 的 TEZ 上使用 Hive(在 HDP 2.5 中有效,但在 HDP 2.6 中无效)。
  • Spark 使用 TEZ。 Spark 确实使用 MR。 Spark 有自己的执行引擎。因此,您看到的错误必须来自连接到 Hive Metastore 时的(无用的)init 参数。

标签: apache-spark hive tez


【解决方案1】:

当 spark 作业在 YARN CLUSTER 模式下运行时,我遇到了同样的问题,并且在将正确的 hive-site.xml 添加到(添加到 spark-default 配置)“ spark.yarn.dist.files”时解决了这个问题“

基本上有两个不同的 hive-site.xml 文件, 一个用于配置单元配置:/usr/hdp/current/hive-client/conf/hive-site.xml 另一个是更轻的 spark 版本(只有 spark 与 hive 一起使用的详细信息):/etc/spark//0/hive-site.xml(请检查一次路径以进行设置)

我们需要为 spark.yarn.dist.files 使用第二个文件。

【讨论】:

  • 看来 spark 依赖于 Hive 而 hive 依赖于 tez。在集群模式下,Hive 经常找不到 tez 依赖项。
猜你喜欢
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多