簡體   English   中英

來自Spark的Hive查詢無法解析

[英]Hive query from Spark- failed to parse

我正在嘗試在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:無法解析:在org.apache.spark.sql.hive.HiveQl $ .createPlan(HiveQl.scala:239)上顯示表在org.apache.spark.sql.hive.ExtendedHiveQlParser $$ anonfun $ hiveQl $ 1.apply(org.apache.spark.sql.hive.ExtendedHiveQlParser $$ anonfun $ hiveQl $ 1.apply(ExtendedHiveQlParser.scala:50) 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非本地會話路徑在com.google.common.base上預期為非空。 org.apache.hadoop.hive.ql.Context。(Context.java處的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個

任何幫助,將不勝感激。 謝謝。

我在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()

它取決於調用方,也可能在執行程序中創建。

在我們的特殊情況下,在前一種情況下,我們使用驅動程序初始化的上下文獲得了例外,但除了細節外,要小心上下文在何處。

我沒有進一步調查,但是例外實際上來自這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM