Hadoop Hive:如何允许普通用户连续写入数据并在仓库目录中创建表?

时间:2014-03-11 09:11:46

标签: hadoop permissions hive data-warehouse

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

org.apache.hadoop.security.AccessControlException: Permission denied: user=dev, access=WRITE, inode="/apps/hive/warehouse/testids":hdfs:hdfs:drwxr-xr-x

这是因为普通用户对仓库目录没有写入权限,只有hdfs用户执行:

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

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

[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程序现在可以作为普通用户写入仓库目录,但只能编写一次。当我第二次尝试将数据写入同一个表时:

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中重新创建它,我再次获得默认权限,不允许普通用户将数据写入此表:

[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表中读取/写入数据?

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以配置hdfs-site.xml,例如:

<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>

此配置将禁用HDFS的权限。因此,普通用户可以在HDFS上进行操作。

我希望这个解决方案可以帮到你。

答案 1 :(得分:0)

如果您从Hive外部维护该表,则将该表声明为external

  

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

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

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

您的申请也不正确,与授权问题无关。您试图在同一个表中写“两次”,这意味着您的应用程序无法正确处理分区。从An Introduction to Hive’s Partitioning开始。