Hive连接MySQL:用户'hive'@'localhost'被拒绝访问。

4
我正在CentOS上设置Hive,并在同一服务器上安装了Hadoop、Hive和MySQL。我还在MySQL上设置了元数据存储数据库和用户ID-hive可以访问该数据库。
我遇到了以下问题-错误消息如下。有人可以帮助解决这个问题吗?
show databases; FAILED: Error in metadata: MetaException(message:Got exception: org.apache.hadoop.hive.metastore.api.MetaException javax.jdo.JDODataStoreException: Access denied for user 'hive'@'localhost' (using password: YES) NestedThrowables: java.sql.SQLException: Access denied for user 'hive'@'localhost' (using password: YES)) FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
以下是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数据库中创建表。不确定问题出在哪里?有什么建议吗?


你是否将mysql-connector jar包放在$HIVE_HOME/lib目录下了? - Mukesh S
谢谢,这个问题已经得到Sachin的答案解决了。我已经授予权限,但是在查询中没有包括“IDENTIFIED BY 'password'”。根据Sachin的建议,我加入了相同的内容,然后它就起作用了。 - user3528338
@user3528338 你需要接受答案。 - MD Rijwan
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;

4
   The error is while granting the privileges in mySQL configuration. You should give as follows:

将所有权限授予'hive'@127.0.0.1,密码为'YourPassword':

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


1

我刚遇到了这个问题,想和可能会遇到同样情况的人分享我的经历。

如果您按照大多数教程,在最初设置javax.jdo.option.ConnectionURL的主机时,会将其设置为localhost127.0.0.1

您还需要确保MySQL具有特权,例如grant all on *.* to 'user'@localhost identified by 'password';

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接