2017-10-06 52 views
1

我创建了3节点Hadoop群集,其中包含1个namenode和2个datanode。使用直线外壳匿名用户匿名权限

我可以从Hive shell执行读取/写入查询,但不是直线。

我发现了很多与此问题相关的建议和解答。
在每个建议中都提到要为每个表提供userX的许可。
但我不知道如何为匿名用户一劳永逸地设置权限。

为什么我在从直线或Java程序访问数据时获取用户匿名?

我能够从两个beeline shell中读取数据并使用Java JDBC连接。
但我不能在表中插入数据。

这是我的jdbc连接:jdbc:hive2:// hadoop01:10000。

下面是我同时插入请求获得我的错误:

权限被拒绝:用户=匿名,访问=写,索引节点=“/用户/蜂巢/仓储/ test_log/.hive-staging_hive_2017-10- 07_06-54-36_347_6034469031019245441-1" :Hadoop的:超群的。drwxr-XR-X

+1

什么是你的JDBC连接URL?您也可以在上述问题中添加实际错误。 – Shubhangi

+0

@Shubhangi我编辑了我的帖子。我已经包含连接网址和错误消息。 – sachin

回答

3

直线语法

beeline -n username -u "url" 

我认为你缺少的用户名。此外,没有之一,但Hadoop的用户有写访问到该表反正

如果你没有在表的权限完全控制,你可以尝试用设置hive.exec.stagingdir

+0

我试图改变暂存目录,但是然后配置单元开始给出错误'插入覆盖查询失败,执行错误,从org.apache.hadoop.hive.ql.exec.MoveTask'返回代码1' – sachin

+0

可能再次,用户=匿名'没有权限到目标表 –

0

如果没有数据库搬迁临时目录在连接URL连接指定,像

的jdbc:hive2:// hadoop01:10000 /默认

然后直线连接到数据库DEFA ULT,并将数据插入表中 - 首先将数据加载到默认数据库中的临时表,然后加载到实际表中。

因此,您还需要授予用户对DEFAULT数据库的访问权限,或者您可以连接到您有权访问的数据库。

的jdbc:hive2:// hadoop01:10000/your_db