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

时间:2012-03-15 04:00:46

标签: hive

我在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一次配置权限????

7 个答案:

答案 0 :(得分:13)

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

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

cd / var / lib / hive / metastore / metastore_db

     

chmod a + rwx。 --recursive

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

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

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文件的写入权限。 按照以下步骤:

  1. 检查当前登录的用户$ whoami

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

  3. 检查文件权限%ls -l <​​/ li>
  4. 如果用户没有写入权限,请使用chmod命令授予权限
  5. 希望这能解决问题

答案 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&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>

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