安装Spark 1.5 Spark -1.5.0-bin-hadoop2.6运行$ ./bin/spark-shell试过了,按照文档创建一个表,得到如下:
> 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本身,但得到相同的问题。我在哪里改变hive仓库参数的位置?我现在没有安装Hadoop,也没有安装hive.
谢谢,马特
hive表的元数据存储在metastore中,hive context增加了在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 = [.....]
spark-shell没有权限写/user/hive/warehouse
- sudo spark-shell再试一次。如果成功,执行第二步。
- 修改dir的访问权限,使其与spark-shell命令相同。
实际上你不需要安装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;):
$ rm /PATH/TO/YOUR/METASTORE/DIR/metastore_db/*.lck