如何与其他用户一起使用 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&characterEncoding=UTF-8&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的主要内容,如果未能解决你的问题,请参考以下文章
Fabric for AndroidStudio/Eclipse - 无法与其他用户登录
查找与其他用户 Sql Server 2005 的距离的问题 - Haversine