Hive 与 MySQL 的连接:用户 'hive'@'localhost' 配置单元的访问被拒绝
Posted
技术标签:
【中文标题】Hive 与 MySQL 的连接:用户 \'hive\'@\'localhost\' 配置单元的访问被拒绝【英文标题】:Hive connectivity to MySQL: Access denied for user 'hive'@'localhost' hiveHive 与 MySQL 的连接:用户 'hive'@'localhost' 配置单元的访问被拒绝 【发布时间】:2014-04-13 07:37:10 【问题描述】:我在 CentOS 上设置 Hive,并且在同一台服务器上安装了 hadoop、hive 和 mysql。我还在 mySQL 和用户 ID 上设置了 Metastore DB - hive 可以访问数据库。
我有以下问题 - 下面给出了错误消息。有人可以帮助解决这个问题吗?
显示数据库; 失败:元数据错误:MetaException(消息:得到异常:org.apache.hadoop.hive.metastore.api.MetaException javax.jdo.JDODataStoreException:拒绝用户访问 'hive'@'localhost'(使用密码:YES) 嵌套的Throwables: java.sql.SQLException:用户'hive'@'localhost'的访问被拒绝(使用密码:YES)) FAILED:执行错误,从 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>
我能够使用 hive 和密码登录 MySQL,并能够在 Metastore 数据库中创建表。不确定问题出在哪里?有什么建议吗?
【问题讨论】:
你是否将 mysql-connector jar 保存在 $HIVE_HOME/lib 目录中? 谢谢.. 萨钦的回答解决了这个问题。我已授予权限,但我没有在查询中包含“IDENTIFIED BY 'password'”。我根据 Sachin 的建议加入了相同的内容,并且效果很好。 @user3528338 你需要接受答案。 【参考方案1】:上述错误是因为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;
【讨论】:
【参考方案2】: 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
【讨论】:
【参考方案3】:刚遇到这个问题,把我的故事分享给任何可能遇到相同情况的人。
如果您遵循大多数教程,首先,您会将javax.jdo.option.ConnectionURL
的主机设置为localhost
或127.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'
【讨论】:
以上是关于Hive 与 MySQL 的连接:用户 'hive'@'localhost' 配置单元的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章