首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hadoop :如何允许常规用户在仓库目录中连续地写入数据和创建表?

Hadoop :如何允许常规用户在仓库目录中连续地写入数据和创建表?
EN

Stack Overflow用户
提问于 2014-03-11 09:11:46
回答 2查看 7.7K关注 0票数 4

我在单个节点上运行Hadoop 2.2.0.2.0.6.0-101。我正在尝试运行Java程序,该程序通过常规用户将数据从Eclipse中写入到现有的Hive表中。我有例外:

代码语言:javascript
运行
复制
org.apache.hadoop.security.AccessControlException: Permission denied: user=dev, access=WRITE, inode="/apps/hive/warehouse/testids":hdfs:hdfs:drwxr-xr-x

之所以会发生这种情况,是因为普通用户对仓库目录没有写权限,只有hdfs用户有:

代码语言:javascript
运行
复制
drwxr-xr-x   - hdfs hdfs          0 2014-03-06 16:08 /apps/hive/warehouse/testids
drwxr-xr-x   - hdfs hdfs          0 2014-03-05 12:07 /apps/hive/warehouse/test

为了避免这种情况,我更改了仓库目录的权限,所以现在每个人都有写权限:

代码语言:javascript
运行
复制
[hdfs@localhost wks]$ hadoop fs -chmod -R a+w /apps/hive/warehouse
[hdfs@localhost wks]$ hadoop fs -ls /apps/hive/warehouse
drwxrwxrwx   - hdfs hdfs          0 2014-03-06 16:08 /apps/hive/warehouse/testids
drwxrwxrwx   - hdfs hdfs          0 2014-03-05 12:07 /apps/hive/warehouse/test

这在某种程度上是有帮助的,MRD程序现在可以作为常规用户写入仓库目录,但只能编写一次。当我第二次尝试将数据写入同一个表时:

代码语言:javascript
运行
复制
ERROR security.UserGroupInformation: PriviledgedActionException as:dev (auth:SIMPLE) cause:org.apache.hcatalog.common.HCatException : 2003 : Non-partitioned table already contains data : default.testids

现在,如果删除输出表并在hive shell中重新创建它,则再次获得不允许常规用户将数据写入该表的默认权限:

代码语言:javascript
运行
复制
[hdfs@localhost wks]$ hadoop fs -ls /apps/hive/warehouse
drwxr-xr-x   - hdfs hdfs          0 2014-03-11 12:19 /apps/hive/warehouse/testids
drwxrwxrwx   - hdfs hdfs          0 2014-03-05 12:07 /apps/hive/warehouse/test

请提供有关Hive正确配置步骤的建议,这些步骤将允许程序以常规用户的身份运行,在Hive仓库中执行以下操作:

  • 以编程方式创建/删除/重命名Hive表?
  • 以编程方式从Hive表读取/写入数据?

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2014-10-27 09:40:55

您可以为hdfs-site.xml配置如下:

代码语言:javascript
运行
复制
<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>

此配置将禁用对HDFS的权限。因此,常规用户可以在HDFS上执行操作。

我希望这个解决办法能帮到你。

票数 0
EN

Stack Overflow用户

发布于 2014-10-27 10:04:45

如果您从Hive外部维护表,那么将表声明为外部

外部表指向其存储的任何HDFS位置,而不是存储在配置属性hive.metastore.warehouse.dir指定的文件夹中。

Hive管理员可以创建表,它可以指向您自己的用户拥有的HDFS存储位置,您可以授予Hive从那里读取的权限。

作为一般性评论,无特权用户无法执行未经授权的特权操作。任何这样的方式在技术上都是一种利用,你永远不应该依赖它:即使今天是可能的,它可能很快就会关闭。蜂巢授权 (和HCatalog授权)与HDFS授权是正交的。

您的应用程序也不正确,与授权问题无关。您试图在同一个表中写入“两次”,这意味着应用程序无法正确处理分区。从蜂巢分区简介开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22321084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档