需要写访问权限的配置单元外部表

Posted

技术标签:

【中文标题】需要写访问权限的配置单元外部表【英文标题】:hive external table needing write access 【发布时间】:2017-01-15 08:04:29 【问题描述】:

我正在尝试将存储在 HDFS(文本文件)上的数据集加载到配置单元中进行分析。 我正在使用如下创建外部表:

CREATE EXTERNAL table myTable(field1 STRING...) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
STORED AS TEXTFILE 
LOCATION '/user/myusername/datasetlocation';

这可以正常工作,但它需要对 hdfs 位置的写入权限。这是为什么?

一般来说,加载我没有写入权限的文本数据的正确方法是什么?是否有“只读”外部表类型?

编辑:我在 hive 上注意到this issue 关于这个问题。好像还没有解决。

【问题讨论】:

相关问题:***.com/questions/37538487/…(但没有答案..) 看起来这是 2009 年的一个已知问题 - issues.apache.org/jira/browse/HIVE-335 看起来没有任何解决办法 【参考方案1】:

部分回答我自己的问题:

目前看来确实没有被hive解决。但这里有一个有趣的事实:hive 不需要对文件本身的写入权限,而只需要对文件夹的写入权限。例如,您可能有一个权限为777 的文件夹,但其中的文件(由 hive 访问)可以保持只读状态,例如644

【讨论】:

【参考方案2】:

我对此没有解决方案,但作为一种解决方法,我发现

CREATE TEMPORARY EXTERNAL TABLE

在没有写入权限的情况下工作,区别在于表(但不是基础数据)将在您的会话后消失。

【讨论】:

临时表不支持太坏的分区列 会话后存储在表中的数据会怎样?因为我认为外部表将数据存储在 HDFS 中,当表被删除时,只会删除元数据。在这种情况下,会有大量的数据持久化在 HDFS 上。 数据未受影响(编辑帖子以说明这一点),事实上,关键是您可以在没有对数据的写访问权限的情况下执行此操作,因此不一定可以对其执行任何操作。跨度> 这在我的环境中不起作用,仍然说我没有操作 CREATETABLE 的权限,尽管我在该目录中有读取权限。【参考方案3】:

如果您需要对 hdfs 文件的写入权限,请提供 hadoop dfs -chmod 777 /文件夹名

这意味着您授予该特定文件的所有访问权限。

【讨论】:

这正是问题所在。我不想(有时不能)获得对文件的写访问权。通常数据是另一个过程的结果,我无法控制。我只有对该数据集的读取权限,因为,我只需要读取它。 好的,我明白了。我已经测试了hdfs文件没有写权限的hive外部查询。它正在为我执行。我所做的是我授予了 hadoop 存储文件夹的权限。首先检查您的 hadoop 文件夹是否具有完全权限。如果没有授予权限并检查查询,那么它应该可以工作。

以上是关于需要写访问权限的配置单元外部表的主要内容,如果未能解决你的问题,请参考以下文章

android系统怎么设置内部存储的访问权限

gpfdist通过外部表创建的文件权限问题

[C]控制外部变量访问权限的extern和static关键字

访问 Redshift External 表所需的最低权限

阿里云服务器怎样配置自定义端口的外部访问权限

外部/局部/内部类的权限修饰符