我在3个集群上安装了Hadoop和Hive。 通常我可以使用hive和Hadoop但是当我与其他用户登录时,我无法使用Hive。 错误是:
蜂房> show tables;
失败:元数据错误:javax.jdo.JDOFatalDataStoreException:无法获取连接,池错误无法创建经过验证的对象,原因:不允许只读用户或只读数据库中的用户禁用连接上的只读模式。
NestedThrowables:
org.apache.commons.dbcp.SQLNestedException:无法获取连接,池错误无法创建经过验证的对象,原因:不允许只读用户或只读数据库中的用户禁用读取仅连接上的模式。
失败:执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1
我与其他用户登录,并为我安装hadoop和hive的文件夹设置权限chmod 777,我可以使用配置单元。但是当我登录其他用户时,这是错误的。我的意思是,当我登录在hadoop上使用配置单元时,我必须设置权限。如何在hadoop上使用hive一次配置权限????
答案 0 :(得分:13)
我遇到了同样的问题并通过以下方式解决了这个问题。问题是由于两个可能的原因。
cd / var / lib / hive / metastore / metastore_db
chmod a + rwx。 --recursive
请注意,这会为所有用户授予权限。相应地调整r-w-x位。
cd / var / lib / hive / metastore / metastore_db
rm * .lck
答案 1 :(得分:6)
我不能告诉你为什么这样有效,但它为我修好了。
cd ../hive/metatstore_db/
rm *.lck
我的hadoop帐户存在问题,root帐户有单独锁定。
答案 2 :(得分:1)
尽量避免使用嵌入式德比服务器,因为它依赖于目录并且有很多限制。
使用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>
但请记住,允许所有想要通过以下命令使用配置单元的用户。
授予权利
mysql> GRANT ALL ON hivedb.* TO hive_user@'00.00.00.00';
FLUSH PRIVILEGES,告诉服务器重新加载GRANT TABLES
mysql> FLUSH PRIVILEGES;
答案 3 :(得分:0)
1)删除锁是一种选择,但有时可能会突然杀死其他用户正在使用的作业。 2)您可以在不同的文件夹中为小团队使用配置单元。 3)如果你想共享然后使用derby服务器并按上面的方式设置xml。
答案 4 :(得分:0)
在我的情况下,我使用sqoop将mysql表导入hive。 Hive配置了mysql Metastore。但不知何故,sqoop不知道因为它无法访问配置文件的配置文件。 一旦我设置了HIVE_CONF_DIR环境变量,就可以了。
答案 5 :(得分:0)
检查您当前登录的用户是否具有metastore_db
文件的写入权限。
按照以下步骤:
检查当前登录的用户$ whoami
导航到/ var / lib / hive / metastore / metastore_db
希望这能解决问题
答案 6 :(得分:0)
我在新集群上遇到了相同的问题,尝试了上述所有解决方案,但似乎都没有用。经过大量的实验,解决方案分为三个步骤:
(a)。验证使用了哪个hive_site.xml。就我而言,生产配置单元作业也使用了默认的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>
您需要用自己的一组主节点ip替换xx.xx.x.xxx:8032,yy.yy.y.yyy:8032。同样,您需要更换;在xml中。