如何与其他用户一起使用 hive

Posted

技术标签:

【中文标题】如何与其他用户一起使用 hive【英文标题】:How to use hive with other user 【发布时间】:2012-03-15 04:00:45 【问题描述】:

我在 3 个集群上安装了 Hadoop 和 Hive。 通常我可以使用 hive 和 Hadoop,但是当我使用其他用户登录时,我不能使用 Hive。 错误是:

hive> 显示表格;

FAILED:元数据错误:javax.jdo.JDOFatalDataStoreException:无法获取连接,池错误无法创建已验证的对象,原因:只读用户或只读数据库中的用户不允许禁用连接上的只读模式。

NestedThrowables:

org.apache.commons.dbcp.SQLNestedException:无法获取连接,池错误无法创建已验证的对象,原因:只读用户或只读数据库中的用户不允许禁用读取-连接上的唯一模式。

FAILED:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1

我用其他用户登录,并为我安装hadoop和hive的文件夹设置权限chmod 777,我可以使用hive。但是当我登录其他用户时,这是错误的。我的意思是,我必须在登录时设置权限才能在 hadoop 上使用 hive。一次性配置权限如何在hadoop上使用hive???

【问题讨论】:

【参考方案1】:

我遇到了同样的问题并通过以下方式解决了它。这个问题有两个可能的原因。

或者,您登录的用户 (do 'whoami' ) 没有 对 Hive 使用的 derby Metastore 数据库目录的写访问权。 所以,去 /var/lib/hive/metastore/metastore_db (这是默认的 在大多数情况下)并通过执行验证您的用户 ID 是否具有权限 ls。如果您的用户 ID 没有权限,您应该要求目录的所有者授予您写入权限。所以, 以所有者/超级用户身份登录并执行

cd /var/lib/hive/metastore/metastore_db

chmod a+rwx 。 --递归

请注意,这将授予所有用户权限。不过相应地调整 r-w-x 位。

另一个可能的原因是 derby 是单用户数据库。因此,请前往清除锁定文件

cd /var/lib/hive/metastore/metastore_db

rm *.lck

【讨论】:

【参考方案2】:

我无法告诉你为什么这有效,但它为我解决了问题。

cd ../hive/metatstore_db/
rm *.lck

我的 hadoop 帐户和 root 帐户有单独的锁定问题。

【讨论】:

我尝试了上述两种方法,但仍然出现相同的错误。如果你们有任何想法,请告诉我 在您的服务器上搜索任何 .lck 文件,并尝试查看它们是否位于看起来相关的位置?就像我说的那样,我做了很多研究,但从未弄清楚为什么会这样。 我遇到了同样的问题。更改权限和删除锁定文件确实有帮助。【参考方案3】:

尽量避免使用嵌入式 derby 服务器,因为它依赖于目录并且有很多限制。

使用 mysql 服务器配置 hive 总是更好。您只需要在 hive-site.xml

中进行以下配置
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hivedb?createDatabaseIfNotExist=true</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>user</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
</property>

但请记住通过以下命令向所有想要使用 hive 的用户授予权限。

授予权限

mysql> GRANT ALL ON hivedb.* TO hive_user@'00.00.00.00';

FLUSH PRIVILEGES,告诉服务器重新加载 GRANT TABLES

mysql> FLUSH PRIVILEGES;

【讨论】:

【参考方案4】:

1) 移除锁是一种选择,但有时可能会突然终止其他用户正在使用的作业。 2)您可以在小团队的不同文件夹中使用 hive。 3)如果你想分享然后使用德比服务器并设置xml如上。

【讨论】:

【参考方案5】:

在我的情况下,我使用 sqoop 将 mysql 表导入配置单元。 Hive 配置了一个 mysql 元存储。但不知何故,sqoop 不知道这一点,因为它无法访问 hive 的配置文件。 一旦我设置了 HIVE_CONF_DIR 环境变量,它就起作用了。

【讨论】:

【参考方案6】:

检查当前登录的用户是否对metastore_db 文件具有写权限。 请按照以下步骤操作:

    检查当前登录的用户 $whoami

    导航到 /var/lib/hive/metastore/metastore_db

    检查文件权限 %ls -l 如果用户没有写权限,使用 chmod 命令授予权限

希望这能解决问题

【讨论】:

【参考方案7】:

我在新集群上遇到了同样的问题,尝试了上述所有解决方案,但似乎都没有奏效。经过大量的实验,解决方案是一个三步过程:

(一)。验证正在使用哪个 hive_site.xml。在我的情况下,生产 hive 作业也使用了默认的 hive_site.xml,所以我想不要碰它,而是提供一个新的 hive_site.xml 来激发配置。如果您没有任何此类依赖项,请不要执行 (b) 点,只需根据 (c) 点更改 hive_site.xml。

(b)。将 hive_site.xml 复制到您的 spark 配置目录。就像我的情况一样: cp hive_site.xml /etc/spark2/conf/.

如果您仍在使用 spark1.x 版本或仍在使用其配置,那么您需要将 hive_site.xml cp 到 /etc/spark/conf/。

(b)。最后一步 - 将以下 xml 属性添加到新复制的 hive_site.xml

<property>
    <name>mapred.job.tracker</name>
    <value>xx.xx.x.xxx:8032,yy.yy.y.yyy:8032</value>
</property>
<property>
    <name>mapreduce.job.max.split.locations</name>
    <value>25</value>
</property>
<property>
  <name>hive.stats.dbclass</name>
  <value>jdbc:mysql</value>
</property>
<property>
  <name>hive.stats.jdbcdriver</name>
  <value>com.mysql.jdbc.Driver</value>
</property>
<property>
  <name>hive.stats.dbconnectionstring</name>
  <value>jdbc:mysql://xx.xx.x.xxx:3306/metastore_db?useUnicode=true&amp;characterEncoding=UTF-8&amp;user=<your hive user name>;password=<your hive password></value>
</property>
<property>
  <name>hive.aux.jars.path</name>
  <value>file:///usr/share/java/mysql-connector-java.jar</value>
</property>

您需要将 xx.xx.x.xxx:8032,yy.yy.y.yyy:8032 替换为您自己的一组主节点 ip。同样,您需要更换 ;在 xml 中。

【讨论】:

以上是关于如何与其他用户一起使用 hive的主要内容,如果未能解决你的问题,请参考以下文章

是否可以与其他用户共享计算实例?

当与其他用户登录时,它仍然会从无处选择以前的用户 uuid

Fabric for AndroidStudio/Eclipse - 无法与其他用户登录

查找与其他用户 Sql Server 2005 的距离的问题 - Haversine

Ubuntu 12.04 LTS 超级用户,可以使用 FTP 完全访问其他用户目录

Ejabberd:禁用请求接受/取消与其他用户聊天