4

我在 CentOS 上设置 Hive,并且在同一台服务器上安装了 hadoop、hive 和 MySQL。我还在 mySQL 和用户 ID 上设置了 Metastore DB - hive 可以访问数据库。

我有以下问题 - 下面给出了错误消息。有人可以帮助解决这个问题吗?

显示数据库;失败:元数据错误:MetaException(消息:得到异常:org.apache.hadoop.hive.metastore.api.MetaException javax.jdo.JDODataStoreException:用户'hive'@'localhost'的访问被拒绝(使用密码:YES)NestedThrowables :java.sql.SQLException:用户'hive'@'localhost'的访问被拒绝(使用密码:YES))失败:执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1

Hive-site.xml 如下所示。

   <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://127.0.0.1/metastore?createDatabaseIfNotExist=true</value>
    </property>

    <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
      <description>Driver class name for a JDBC metastore</description>
    </property>

    <property>
     <name>javax.jdo.option.ConnectionUserName</name>
     <value>hive</value>
     </property>

     <property>
      <name>javax.jdo.option.ConnectionPassword</name>
     <value>password</value>
     </property>

     <property>
      <name>hive.hwi.war.file</name>
      <value>/usr/lib/hive/lib/hive-hwi-0.10.0-cdh4.2.0.jar</value>
      <description>This is the WAR file with the jsp content for Hive Web Interface     </description>
     </property>

     <property>
      <name>datanucleus.fixedDatastore</name>
      <value>true</value>
      </property>

      <property>
       <name>datanucleus.autoCreateTables</name>
       <value>true</value>
      </property>

      <property>
      <name>hive.metastore.uris</name>
        <value>thrift://127.0.0.1:9083</value>
        <description>IP address </description>
      </property>

       <property>
       <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive2/warehouse</value>
         <description> warehouse </description>
        </property>

我能够使用配置单元和密码登录 MySQL,并能够在 Metastore 数据库中创建表。不确定问题出在哪里?有什么建议么?

4

3 回答 3

9

上述错误是因为 mysql 服务器中 'hive'@'localhost' 的权限不足。以 root 身份启动 mysql shell,然后在那里执行以下授权选项

$ mysql -u root -p -hlocalhost
Enter password: 

mysql> GRANT ALL PRIVILEGES ON *.* TO  'hive'@'%' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
于 2014-04-13T15:41:26.180 回答
4
   The error is while granting the privileges in mySQL configuration. You should give as follows:

授予所有到由 'YourPassword' 标识的 'hive'@127.0.0.1

由于您在 hive-site.xml 中将主机名指定为 127.0.0.1,如下所示: javax.jdo.option.ConnectionURL : jdbc:mysql://127.0.0.1/metastore?createDatabaseIfNotExist=true

于 2015-01-07T10:33:51.593 回答
1

刚刚遇到这个问题,将我的故事分享给任何可能遇到相同情况的人。

如果您遵循大多数教程,首先,您会将javax.jdo.option.ConnectionURL' 主机设置为localhost127.0.0.1

而且您还保证了对 MySQL 的特权,例如grant all on *.* to 'user'@localhost indentified by 'password'

随着时间的推移,您可能需要更改javax.jdo.option.ConnectionURL为远程 MySQL 服务器 IP。确保用户可能没有访问它的权限,除非您保证该特定主机的权限,即

grant all on *.* to 'user'@remote_ip_address indentified by 'password'

于 2019-07-24T06:41:15.200 回答