Spark的Hive查询无法解析

时间:2015-02-25 23:20:33

标签: scala hadoop hive apache-spark hiveql

我试图在spark-shell中执行此操作:

val hiveCtx = new org.apache.spark.sql.hive.HiveContext(sc)
val listTables = hiveCtx.hql("show tables")

第二行无法执行此消息:

  

警告:有1个弃用警告;使用-deprecation重新运行以获取详细信息   org.apache.spark.sql.hive.HiveQl $ ParseException:无法解析:show tables       在org.apache.spark.sql.hive.HiveQl $ .createPlan(HiveQl.scala:239)       在org.apache.spark.sql.hive.ExtendedHiveQlParser $$ anonfun $ hiveQl $ 1.apply(ExtendedHiveQlParser.scala:50)       在org.apache.spark.sql.hive.ExtendedHiveQlParser $$ anonfun $ hiveQl $ 1.apply(ExtendedHiveQlParser.scala:49)       在scala.util.parsing.combinator.Parsers $ Success.map(Parsers.scala:136)       在scala.util.parsing.combinator.Parsers $ Success.map(Parsers.scala:135)       在scala.util.parsing.combinator.Parsers $ Parser $$ anonfun $ map $ 1.apply(Parsers.scala:242)

     

...   在org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)   引发者:java.lang.NullPointerException:Conf非本地会话路径,期望为非null       在com.google.common.base.Preconditions.checkNotNull(Preconditions.java:204)       在org.apache.hadoop.hive.ql.session.SessionState.getHDFSSessionPath(SessionState.java:586)       在org.apache.hadoop.hive.ql.Context。(Context.java:129)       在org.apache.hadoop.hive.ql.Context。(Context.java:116)       在org.apache.spark.sql.hive.HiveQl $ .getAst(HiveQl.scala:227)       在org.apache.spark.sql.hive.HiveQl $ .createPlan(HiveQl.scala:240)       ......还有87个

任何帮助将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:1)

我在Spark应用程序中遇到了同样的错误。样本:

trait EventStreamEnrichmentData {

    protected def streamingContext: StreamingContext

    def makeHiveContext() = Try { new HiveContext(streamingContext.sparkContext) }

    /**
    * context needed to talk to the Hive metastore
    */
    @transient private val hiveContext = makeHiveContext()

    private def currentContext: HiveContext = ???  

    private def makeAnagrafica(): Try[AnagraficaTable] = currentContext flatMap ( makeAnagrafica(_) )
    @transient protected var anagrafica = makeAnagrafica()

}

现在,如果你有:

private def currentContext: HiveContext = hiveContext

如果我的理解是正确的,那么你正在使用在驱动程序上初始化的上下文,而使用:

private def currentContext: HiveContext = makeHiveContext()

它取决于调用者,也可能在执行者中创建。

在我们的特定情况下,我们在前一个场景中使用驱动程序初始化的上下文获取异常,但除了上面提到的细节外,还要注意上下文的位置。

我没有进一步调查,但例外实际上来自here