5

我创建了一个Hadoop具有 1 个名称节点和 2 个数据节点的 3 节点集群。

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

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

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

我能够从beeline shell 和使用Java JDBC 连接读取数据。
但我无法在表中插入数据。

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

以下是我在插入请求时遇到的错误:

权限被拒绝:user=anonymous,access=WRITE,inode="/user/hive/warehouse/test_log/.hive-staging_hive_2017-10-07_06-54-36_347_6034469031019245441-1":hadoop:supergroup:drwxr-xr-x

4

2 回答 2

9

直线语法是

beeline -n username -u "url"

我假设您缺少用户名。此外,除了 hadoop 用户之外,没有人拥有对该表的 WRITE 访问权限

如果您无法完全控制表权限,可以尝试使用设置重新定位暂存目录hive.exec.stagingdir

于 2017-10-07T14:52:33.297 回答
0

如果连接 URL 中没有指定要连接的数据库,比如

jdbc:hive2://hadoop01:10000/default

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

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

jdbc:hive2://hadoop01:10000/your_db

于 2018-03-03T19:52:51.217 回答