【问题标题】:Create hive table through spark job通过 Spark 作业创建 Hive 表
【发布时间】:2018-04-08 05:43:27
【问题描述】:

我正在尝试在 hadoop 集群(BigInsight 4.1 发行版)上创建 hive 表作为我的 spark(1.5.1 版本)作业的输出,并且面临权限问题。我的猜测是 spark 使用默认用户(在本例中为“yarn”而不是作业提交者的用户名)来创建表,因此无法这样做。

我尝试自定义 hive-site.xml 文件以设置一个经过身份验证的用户,该用户有权创建 hive 表,但这不起作用。

我也尝试将 Hadoop 用户变量设置为经过身份验证的用户,但它也不起作用。

我想避免保存 txt 文件,然后创建 hive 表来优化性能并通过 orc 压缩减小输出的大小。

我的问题是:

  • 有没有办法调用spark dataframe api的write函数 与指定用户?
  • 是否可以使用 oozie 的工作流文件选择用户名?
  • 有没有人有其他想法或曾经遇到过这个问题?

谢谢。 哈塔克!

【问题讨论】:

  • 是的,oozie 允许您设置用户名,但是,hive-site 应设置为支持用户模拟。
  • 非常感谢。根据您的回答,我发现必须在 hive-site.xml 中将属性“hive.server2.enable.doAs”设置为 true。但我认为这必须在位于集群上的 xml 上完成,而不是嵌入在我的 java 类路径中的那个,对吧?
  • 据我所知,两个地方都需要设置。一个告诉服务器将用户信息传递给磁盘。另一个告诉客户端将其传递给服务器。顺便说一句,默认值为true

标签: hadoop apache-spark hive hivecontext


【解决方案1】:

考虑df持有你的数据,你可以写

在 Java 中:

df.write().saveAsTable("tableName");

您可以使用不同的 SaveMode,例如 Overwrite、Append

df.write().mode(SaveMode.Append).saveAsTable("tableName");

在 Scala 中:

df.write.mode(SaveMode.Append).saveAsTable(tableName)

根据您要保存的类型,可以指定许多其他选项。 Txt、ORC(带桶)、JSON。

【讨论】:

  • 感谢您的回复。我已经知道如何将数据框保存为配置单元表,但我的问题与权限有关。我的工作无权在 hive 元存储上写入,我正在尝试找到解决方案。
猜你喜欢
  • 2014-12-25
  • 2018-06-02
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多