【问题标题】:How to persist a DataFrame to a Hive table?如何将 DataFrame 持久化到 Hive 表?
【发布时间】:2017-05-10 11:28:21
【问题描述】:

我在 Cloudera QuickStart VM 上使用 CentOS。我在另一个问题 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"); 

我注意到我收到了错误:

根暂存目录:/tmp/hive 应该是可写的。当前权限为:rwx------

我关注了其他问题,并为 HDFS 中的/tmp/hive 设置了chmod 777

我突然想到 spark 使用本地文件系统 /tmp/hive。

我为本地文件系统做了一个 chmod。

现在我收到错误

org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:file:/user/hive/warehouse/productstore 不是 目录或无法创建)

我想在 HDFS hive 仓库中存储一个 DataFrame。

【问题讨论】:

    标签: apache-spark hive hdfs apache-spark-2.0


    【解决方案1】:

    这里有两个问题。

    问题 #1 - 权限

    在 CentOS(或其他 Unix 版本)上,例如Linux 或 macOS,只需执行以下操作:

    chmod -R 777 /tmp/hive
    

    (应该对操作系统上的任何人都可写,因为它是一个临时目录)。

    问题 #2 - Hive Metastore 目录

    由于您使用 Cloudera QuickStart VM,因此您使用的是 Spark 2.0 之前的版本(也许是 1.6.3?)。

    问题是由于在将 DataFrame 持久化到 Hive 表时未指定 path

    默认使用目录/user/hive/warehouse,为避免写入目录,请在使用option 方法或save 与路径选项保存到Hive 表时定义path 选项。

    df.write.option("path", "[path-here]").saveAsTable("tableName")
    

    从 Spark 2.0 开始,上述行将写入当前目录中的本地 Hive 元存储(使用 Derby),地址为 spark-warehouse,由 spark.sql.warehouse.dir Spark 属性指定。

    要升级,请使用 2.0.2(不是 1.5.2)定义您的 Spark 依赖项:

    libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.0.2"
    

    (只需一行就可以让 Spark SQL 支持 Hive)。

    然后您可以使用hive.metastore.warehouse.dirspark.sql.warehouse.dir 设置Spark 仓库并指向其他Hive 表所在的HDFS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 2018-06-22
      • 2016-06-12
      • 2015-08-20
      • 2014-04-25
      相关资源
      最近更新 更多