无法从Hive / JDBC查询Spark表

时间:2015-05-27 15:18:02

标签: jdbc hive apache-spark

我使用AWS EMR的Spark 1.3.1。我使用HiveContext创建了一个火花表,可以从Hive中看到这个(使用"show tables").但是当我尝试查询table(Select..),时会抛出以下错误:

  

hdfs:// IP:9000 / user / hive / warehouse / tablename / part-r-00001.parquet not not   一个SequenceFile

当我使用"描述tablename"时,它显示:

col                     array<string>           from deserializer

&#34;显示表格&#34;正确返回表名。

知道为什么镶木地板文件不是Spark正在生成的有序文件以及如何解决这个问题?我需要从Hive查询Spark表并使用来自RStudio或其他工具的JDBC连接。

1 个答案:

答案 0 :(得分:0)

(发表评论作为答案)问题是让Spark和Hive都使用相同版本的Parquet,并了解如何访问相同的数据。

可以在https://github.com/awslabs/emr-bootstrap-actions/blob/master/spark/examples/parquet-sparksql-hive-compatibility.md

看到一个例子

Spark中一个有用的属性是:

array_view<double>

对于通过JDBC访问Spark,基于HiveServer2的Spark的Thrift服务器需要在与Hive附带的现有HiveServer2不同的端口上启动和运行。见https://spark.apache.org/docs/latest/sql-programming-guide.html#running-the-thrift-jdbcodbc-server

在端口10001上启动JDBC的Thrift服务的示例命令:

set spark.sql.hive.convertMetastoreParquet=false;

请务必注意,start-thriftserver.sh采用与资源分配(执行程序,核心,内存等)的spark-submit相同的熟悉选项,因此进行相应设置。