我在Cloudera QuickStart VM上使用QuickStart。我按照另一个问题How to save DataFrame directly to Hive?创建了一个sbt管理的Spark应用程序。
build.sbt
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.5.2"
libraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "1.5.2"
libraryDependencies += "org.apache.spark" % "spark-mllib_2.10" % "1.5.2"
libraryDependencies += "org.apache.spark" % "spark-streaming_2.10" % "1.5.2"
libraryDependencies += "org.apache.spark" %% "spark-hive" % "1.5.2"我想使用一个DataFrame作为一个Hive表,如下所示:
recordDF.registerTempTable("mytempTable")
hiveContext.sql("create table productstore as select * from mytempTable"); 我注意到我收到了错误:
根划痕dir: /tmp/hive应该是可写的。当前的权限是:rwx
我跟踪了其他问题,并在HDFS中为/tmp/hive设置了/tmp/hive。
据我所知,这种火花是使用本地文件系统/tmp/hive的。
我为本地文件系统做了一个chmod。
现在我搞错了
org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:file:/user/hive/warehouse/productstore不是目录,也不能创建目录)
我想在HDFS蜂巢仓库中存储一个DataFrame。
发布于 2016-12-25 19:37:36
这里有两个问题。
问题1-权限
在CentOS (或其他Unix口味)上,例如Linux或macOS,只需执行以下操作:
chmod -R 777 /tmp/hive(这应该是操作系统上任何人都可以写的,因为它是一个临时目录)。
第2期-蜂巢元数据目录
由于您使用Cloudera QuickStart VM,所以使用了预Spark2.0(可能是1.6.3?)。
此问题是由于在将path持久化到Hive表时未指定DataFrame造成的。
默认情况下使用目录/user/hive/warehouse,为了避免写入目录,在使用option方法或带有path选项的save保存到Hive表时定义path选项。
df.write.option("path", "[path-here]").saveAsTable("tableName")从Spark2.0开始,上面的行将写入本地Hive亚稳态(使用Derby),它位于当前目录中,为spark-warehouse,这是由spark.sql.warehouse.dir Spark属性指定的。
要升级,请使用2.0.2 (而不是1.5.2)定义您的火花依赖关系:
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.0.2"(只需一行就可以获得支持Hive的Spark )。
然后,您可以使用hive.metastore.warehouse.dir或spark.sql.warehouse.dir来设置火花仓库,并指向其他Hive表所在的HDFS。
https://stackoverflow.com/questions/41323783
复制相似问题