Spark SQL不允许我创建一个表,抱怨默认的Metastore目录

时间:2015-09-23 05:35:29

标签: hive apache-spark-sql

在我的本地计算机上安装了Spark 1.5 spark-1.5.0-bin-hadoop2.6。 Ran $ ./bin/spark-shell 尝试在the doc之后创建一个表,得到这个:

> SQL context available as sqlContext.
> 
> scala> sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value
> STRING)"); 15/09/22 22:18:13 ERROR DDLTask:
> org.apache.hadoop.hive.ql.metadata.HiveException:
> MetaException(message:file:/user/hive/warehouse/src is not a directory
> or unable to create one)  at
> org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:720)

尝试传递hive参数,但没有工作:

> $  ./bin/spark-shell --conf hive.metastore.warehouse.dir=./ Warning:
> Ignoring non-spark config property: hive.metastore.warehouse.dir=./

最后尝试了CLI本身,但遇到了同样的问题。 我在哪里更改配置单元仓库参数位置?我目前没有安装Hadoop,也没有安装。

感谢, 马特

3 个答案:

答案 0 :(得分:0)

hive表的元数据在Metastore中进行了分析,hive上下文增加了对在MetaStore中查找表的支持。

import org.apache.spark.sql.hive.HiveContext
val hiveContext = new HiveContext(sc)
val myDF = sql("select * from mytable")

您将获得dataFrame作为结果

myDF: org.apache.spark.sql.DataFrame = [.....]

答案 1 :(得分:0)

当spark-shell没有写入/ user / hive / warehouse的访问权限时,我遇到了这个问题

  1. sudo spark-shell再试一次。如果有效,请执行第二步。
  2. 更改目录的访问权限,并使其与spark-shell命令相同。

答案 2 :(得分:0)

实际上你并不需要安装Hive(也不需要安装Hadoop,但你需要在你的spark类路径中找到一个hive-site.xml(最简单的方法是将hive-site.xml添加到你的spark conf目录中)

这是一个简单的默认hive-site.xml

<configuration>
<property>
   <name>javax.jdo.option.ConnectionURL</name>
   <value>jdbc:derby:;databaseName=/PATH/TO/YOUR/METASTORE/DIR/metastore_db;create=true</value>
   <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
   <name>javax.jdo.option.ConnectionDriverName</name>
   <value>org.apache.derby.jdbc.EmbeddedDriver</value>
   <description>Driver class name for a JDBC metastore</description>
</property>

<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>PATH/TO/YOUR/WAREHOSUE/DIR/</value>
    <description>location of default database for the warehouse</description>
</property>
</configuration>

有时,当Metastore是本地derby数据库时,它可能有尚未删除的锁,如果你遇到有关metstore锁的问题,你可以删除锁(确保它只是你正在使用的Metastore first;)):

$ rm  /PATH/TO/YOUR/METASTORE/DIR/metastore_db/*.lck