Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop Hive:如何允许普通用户在仓库目录中连续写入数据和创建表?_Hadoop_Permissions_Hive_Data Warehouse - Fatal编程技术网

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

Hadoop Hive:如何允许普通用户在仓库目录中连续写入数据和创建表?,hadoop,permissions,hive,data-warehouse,Hadoop,Permissions,Hive,Data Warehouse,我在单个节点上运行Hadoop 2.2.0.2.0.6.0-101。 我正在尝试运行JavaMRD程序,该程序在常规用户模式下从Eclipse向现有配置单元表写入数据。我得到一个例外: org.apache.hadoop.security.AccessControlException: Permission denied: user=dev, access=WRITE, inode="/apps/hive/warehouse/testids":hdfs:hdfs:drwxr-xr-x 这是因为

我在单个节点上运行Hadoop 2.2.0.2.0.6.0-101。 我正在尝试运行JavaMRD程序,该程序在常规用户模式下从Eclipse向现有配置单元表写入数据。我得到一个例外:

org.apache.hadoop.security.AccessControlException: Permission denied: user=dev, access=WRITE, inode="/apps/hive/warehouse/testids":hdfs:hdfs:drwxr-xr-x
这是因为普通用户没有对仓库目录的写入权限,只有
hdfs
user有:

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
为了避免这种情况,我更改了warehouse目录的权限,这样每个人现在都有写权限:

[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
请告知配置单元正确的配置步骤,以允许程序以普通用户身份运行,并在配置单元仓库中执行以下操作:

  • 以编程方式创建/删除/重命名配置单元表
  • 从配置单元表以编程方式读/写数据

非常感谢

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

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

dfs.0权限
假的
此配置将禁用对HDFS的权限。因此,普通用户可以在HDFS上执行这些操作


我希望此解决方案将对您有所帮助。

如果您从配置单元外部维护该表,请将该表声明为:

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

配置单元管理员可以创建表,并将其指向您自己的用户拥有的HDFS存储位置,您可以授予配置单元从该位置读取的权限

一般来说,没有特权的用户无法执行未经授权的特权操作。从技术上讲,任何这样的方式都是一种利用,你永远不应该依赖它:即使今天有可能,它也可能很快就会被关闭。(和)与HDFS授权正交

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