【问题标题】:hive broke after dropping a table丢桌子后蜂巢坏了
【发布时间】:2017-01-20 13:36:54
【问题描述】:

我使用 mysql 作为 MetaStore 在我的 hadoop 集群上安装了 hive 2.0.0。 Hive 工作正常,直到昨天我尝试删除 HDFS 中的实际 .orc 文件已被删除的表。

在那之后,蜂巢突然破裂。首先,在给出 hive> 提示之前,hive 命令行会挂起几分钟。其次,如果我在 hive 命令行上键入 show databases; ,它会再次挂起很长时间并返回所有关于 的错误。Caused by: java.sql.SQLException: Access denied for user 'hive'@'namenode01-bi-dev'(使用密码:YES) 我尝试了在其他问题上发布的以下命令并遇到了同样的问题。

hive --service metastore

我已经通过 stackoverflow 搜索了有关此错误的信息。大多数帖子都是关于设置 mysql 权限的。但是我不认为这是我的问题的情况。我在 hive-site.xml 和 mysql 上检查了几次用户是否具有正确的权限。如果是权限问题,hive 怎么能在丢弃表之前正常工作。以防万一,下面是相关的 hive-site.xml 字段:

<property>
 <name>javax.jdo.option.ConnectionPassword</name>
 <value>hive</value>
 <description>password to use against metastore database</description>   
</property>

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://10.104.90.40:3306/hive?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>
<description>Username to use against metastore database</description>
</property>

在 mysql 中:

mysql> select user,host,password from mysql.user;
+------+-------------------+-------------------------------------------+
| user | host              | password                                  |
+------+-------------------+-------------------------------------------+
| root | localhost         | *CFBF6F2FB240D9B28DC5D0A313B6BAA047368AAF |
| root | namenode01-bi-dev |                                           |
| root | 127.0.0.1         |                                           |
|      | localhost         |                                           |
|      | namenode01-bi-dev |                                           |
| hive | localhost         | *4DF1D66463C18D44E3B001A8FB1BBFBEA13E27FC |
| hive | namenode01-bi-dev | *4DF1D66463C18D44E3B001A8FB1BBFBEA13E27FC |
| hive | datanode02-bi-dev | *4DF1D66463C18D44E3B001A8FB1BBFBEA13E27FC |
+------+-------------------+-------------------------------------------+
8 rows in set (0.00 sec)
mysql> show grants for hive@'namenode01-bi-dev'
-> ;
+---------------------------------------------------------------------------------------------------------------------+
| Grants for hive@namenode01-bi-dev                                                                                   |
+---------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'hive'@'namenode01-bi-dev' IDENTIFIED BY     PASSWORD '*4DF1D66463C18D44E3B001A8FB1BBFBEA13E27FC' |
| GRANT ALL PRIVILEGES ON `hive`.* TO 'hive'@'namenode01-bi-dev'                                                      |
+---------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

我曾尝试在 namenode 上重新安装 mysql 和 hive 并重新启动机器,但遇到了同样的问题。目前,我正在使用datanode运行mysql服务器和hive。使用完全相同的设置和配置,datanode上的hive可以工作。但我仍然无法弄清楚名称节点上的 hive 出了什么问题。这个错误没有任何意义。有没有人遇到过同样的问题或知道出了什么问题?

【问题讨论】:

  • 你查过MySQL服务、Metastore服务、HiveServer2服务的日志吗?这种身份验证错误可能由任何类型的故障导致,从网络超时到僵尸进程到损坏的文件......
  • 我检查了 mysql 日志,它都是关于 innodb 启动等常见信息。虽然我尝试设置 log-warnings =2 但 mysql 日志仍然不包含有关访问尝试的信息。 hiveserver2 日志具有与问题中提到的相同的错误消息。
  • 那么 Metastore 服务呢,它位于数据库本身和应用程序之间(即 HS2 服务、传统 Hive CLI、Pig CLI、Sqoop CLI、Spark 驱动程序、Impala守护进程、Presto 守护进程等)?
  • 感谢提醒,问题确实与Metastore有关。正如我在答案中所写,这是由 hive-site.xml 上的设置之一引起的。
  • 原来hive-site.xml并不是根本原因。根本原因是mysql拒绝metastore连接,尽管在mysql中设置了权限。

标签: mysql hive


【解决方案1】:

原来这个问题是由mysql引起的。 将以下行添加到 /etc/my.cnf 后,hive 工作正常

skip-name-resolve

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多