【问题标题】:Vora Modeler View preview fails with com.sap.spark.vora.client.jdbc.VoraJdbcExceptionVora Modeler View 预览失败并出现 com.sap.spark.vora.client.jdbc.VoraJdbcException
【发布时间】:2017-06-15 00:23:57
【问题描述】:

我正在使用 Spark 1.6.2 在 HDP 2.4.3 上运行 Vora 1.3。

我有两张具有相同架构数据的表,一张位于 HANA 数据库中,另一张以 CSV 文件形式存储在 HDFS 中。

我使用 Zeppelin 在 Vora 中创建了两个表:

CREATE TABLE flights_2006 (Year int, Month_ int, DayofMonth int, DayOfWeek int, DepTime int, CRSDepTime int, ArrTime int, CRSArrTime int, UniqueCarrier string, FlightNum int, 
TailNum string, ActualElapsedTime int, CRSElapsedTime int, AirTime int, ArrDelay int, DepDelay int, Origin string, Dest string, Distance int, TaxiIn int, TaxiOut int,
Cancelled int, CancellationCode int, Diverted int, CarrierDelay int, WeatherDelay int, NASDelay int, SecurityDelay int, LateAircraftDelay int)
USING com.sap.spark.vora
OPTIONS (
files "/exch/flights_filtered/part-00000,/exch/flights_filtered/part-00001,/exch/flights_filtered/part-00002,/exch/flights_filtered/part-00003,/exch/flights_filtered/part-00004",
csvdelimiter ","
)

Q1.顺便问一下,当从文件源创建 Vora 表时,什么时候可以只提供目录名称,而不是列出目录中的所有文件?这是非常不切实际的,因为无法预测一个目录中有多少部分文件。

CREATE TABLE flights_2007
USING com.sap.spark.hana
OPTIONS (
tablepath "XXXXXXXXXXXX",
dbschema "XXXXXXXXXX",
host "XXXXXXXXXXX",
instance "00",
user "XXXXXXXXXXX",
passwd "XXXXXXXXXX"
)

并且我能够从这两个的表连接中产生一个结果(这种连接的业务意义放在一边):

select f7.MONTH, f7.DAYOFMONTH, f7.UNIQUECARRIER, f7.FLIGHTNUM, f7.YEAR, f7.DEPTIME, f6.year, f6.DepTime
from flights_2007 as f7 inner join flights_2006 as f6 
on f7.MONTH = f6.Month_ and f7.DAYOFMONTH = f6.DayofMonth and f7.UNIQUECARRIER = f6.UniqueCarrier and f7.FLIGHTNUM = f6.FlightNum
where f7.MONTH = 1 and f7.DAYOFMONTH = 2 and f7.UNIQUECARRIER = 'WN'

然后我尝试在 Vora Modeler 中执行相同的步骤。

Q2.为什么 Zeppelin 中的 REGISTER TABLE 不会导致 Vora Modeler 中的表可用?

所以,我在 Vora Modeler 中执行了相同的两个表创建语句,在表名中使用所有大写字母,因为我记得 Vora 之前有一些问题。然后创建一个 Vora 视图作为具有此条件的两个表的连接:

FLIGHTS_2007.MONTH = FLIGHTS_2006.MONTH_ and 
FLIGHTS_2007.DAYOFMONTH = FLIGHTS_2007.DAYOFMONTH and 
FLIGHTS_2007.UNIQUECARRIER = FLIGHTS_2006.UNIQUECARRIER and 
FLIGHTS_2007.FLIGHTNUM = FLIGHTS_2006.FLIGHTNUM

.. 并使用 where 条件:

FLIGHTS_2007.MONTH = 1 and 
FLIGHTS_2007.DAYOFMONTH = 2 and 
FLIGHTS_2007.UNIQUECARRIER = 'WN'

该视图预览的预期结果将与基于 Zeppelin 的选择相同。实际结果(前几行):

org.apache.spark.SparkException: Job aborted due to stage failure: Task 2 in stage 2165.0 failed 4 times, most recent failure: Lost task 2.3 in stage 2165.0 (TID 78743, eba165.extendtec.com.au): com.sap.spark.vora.client.jdbc.VoraJdbcException: [Vora [eba165.extendtec.com.au:34530.1615085]] Unknown error when executing SELECT "FLIGHTS_2006"."FLIGHTNUM", "FLIGHTS_2006"."DEPTIME", "FLIGHTS_2006"."UNIQUECARRIER", "FLIGHTS_2006"."MONTH_", "FLIGHTS_2006"."YEAR" FROM "FLIGHTS_2006": HL(9): Runtime error. (schema error: could not resolve column "FLIGHTS_2006"."YEAR" (sql parse error)) at com.sap.spark.vora.client.jdbc.VoraJdbcClient.liftedTree1$1(VoraJdbcClient.scala:210) at com.sap.spark.vora.client.jdbc.VoraJdbcClient.generateAutocloseableIteratorFromQuery(VoraJdbcClient.scala:187) at com.sap.spark.vora.client.VoraClient$$anonfun$generateAutocloseableIteratorFromQuery$1.apply(VoraClient.scala:363) at com.sap.spark.vora.client.VoraClient$$anonfun$generateAutocloseableIteratorFromQuery$1.apply(VoraClient.scala:363) at scala.util.Try$.apply(Try.scala:161) at com.sap.spark.vora.client.VoraClient.handleExceptions(VoraClient.scala:775) at com.sap.spark.vora.client.VoraClient.generateAutocloseableIteratorFromQuery(VoraClient.scala:362) at com.sap.spark.vora.VoraRDD.compute(voraRDD.scala:54) at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:313) at org.apache.spark.rdd.RDD.iterator(RDD.scala:277) at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:313) at org.apache.spark.rdd.RDD.iterator(RDD.scala:277) at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:313) at org.apache.spark.rdd.RDD.iterator(RDD.scala:277) at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:313) at org.apache.spark.rdd.RDD.iterator(RDD.scala:277) at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:73) at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41) at 

Q3.我在 Vora Modeler 中做错了吗?或者它实际上是一个错误?

【问题讨论】:

    标签: sap vora


    【解决方案1】:

    您提到您在运行 CREATE 语句时使用了所有大写的表名。根据我使用 1.3 Modeler 的经验,您的列名也必须全部使用大写。

    架构错误:无法解析列“FLIGHTS_2006”。“YEAR”

    例如,如果您使用“CREATE TABLE FLIGHTS_2006 (YEAR int, ...”,请尝试将其更改为“CREATE TABLE FLIGHTS_2006 (YEAR int, ...”)

    【讨论】:

    • 也试过了,没用。
    【解决方案2】:

    关于您的 Q1,是的,这是目前正在审查的功能请求。

    关于您的 Q2,您的 Zeppelin 是否与您的 Vora Modeler(又名 Vora 工具)连接到同一个 Vora Thriftserver?

    关于您的 Q3,Ryan 的其他回复是正确的,列名在 Vora 1.3 中也区分大小写

    【讨论】:

    • 关于 Q2:我按照手册安装了 Zeppelin,但我在解释器中没有看到任何参数告诉它应该连接到哪个 thriftserver——我该如何检查它?在 Q3:显然我已经将 FLIGHTS_2006 的列名创建为全大写,因为我刚刚将整个 create-statement 转换为全大写(文件和类名除外)。我重新创建了 Vora View,但仍然出现同样的错误。
    • 除此之外,我记得 Modeler 将表/列名称显示为大写字母,即使它们被创建为小写 - 这似乎是一个 Modeler 错误,尤其是。你说的表/列名是区分大小写的。
    • 关于 Q2:如果您使用 %spark 解释器,那么您使用的 sqlContext 与 Vora Tools 不同,因此您必须在每个会话中单独注册表。但是 %jdbc 解释器连接到 Vora 工具也使用的 Vora Thriftserver,在这里我希望在每个前端工具上都可以看到相同的表。
    猜你喜欢
    • 2015-05-18
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多