sqoop从mysql导入到hive,用户名变更(用户拒绝访问)

时间:2015-08-18 21:16:08

标签: mysql hadoop hive sqoop

我试图通过sqoop将一些数据从mysql导入到hive。当sqoop和mysql db都在同一主机上时,它可以工作,否则会失败。这是我正在执行的查询。

[user@xyz ~]$ sqoop import --connect "jdbc:mysql://abc.something.com/test" --username user --password pass --table dataSql --hive-import --hive-table test.dataHive --target-dir /tmp/sqoop$RANDOM

请注意我目前在主持人xyz上,我正在尝试连接到主机abc上的mysql数据库。以下是我看到的错误。

ERROR: org.apache.sqoop.manager.SqlManager - Error executing statement: java.sql.SQLException: Access denied for user 'user'@'xyz.something.com' (using password: YES)
.
.
.
ERROR: org.apache.sqoop.manager.CatalogQueryManager - Failed to list columns java.sql.SQLException: Access denied for user 'user'@'xyz.something.com' (using password: YES)
.
.
.

等等。我的问题是,为什么我的机器将其主机名附加到用户名('user'@'xyz.something.com')?我该如何解决?

5 个答案:

答案 0 :(得分:1)

Sqoop将数据从mysql导入hive,它将使用jdbc接口将mysql与mysql-connect-j连接起来。

当我使用mysql-connector-java-5.1.9.jar时,它也有这个问题。我用mysql-connector-java-5.1.38.jar替换它,然后sqoop工作正常。

答案 1 :(得分:1)

当sqoop和mysql在同一主机上时,很可能ip源是localhost,在远程主机上,这不再是真的,并且你被拒绝访问。

登录mysql并执行以下查询:

mysql> select user, host from user;
+------------+---------------------+
| user       | host                |
+------------+---------------------+
| amon       | %                   |
| cm         | %                   |
| hive       | %                   |
| hue        | %                   |
| nav        | %                   |
| navms      | %                   |
| oozie      | %                   |
| retail_dba | %                   |
| rman       | %                   |
| sentry     | %                   |
| root       | 127.0.0.1           |
| root       | localhost           |
| root       | quickstart.cloudera |
+------------+---------------------+

检查您的用户名user是否在此表中,并且%(任意)作为主机名或xyz.something.com。您的用户不在此表中,您需要添加它:

mysql> create user 'test'@'%' identified by 'password'; 
mysql> grant select privileges on *.* to 'test'@'%';
mysql> flush privileges;

答案 2 :(得分:0)

MySQL连接可以限制为特定用户连接特定主机

在这种情况下,我怀疑GRANT命令已应用于'some_user@localhost',因此远程连接被阻止......

查看that post的答案以获得想法。

答案 3 :(得分:0)

'用户' @' xyz.something.com'这实际上是访问数据库的用户。

由于你的sqoop主机是xyz,"用户"来自机器" xyz"正在访问机器" abc",但密码错误(或者可能没有'用户"来自机器" xyz"被允许访问& #34; abc"),所以来自" abc"抛出这个错误" xyz" sqoop打印此消息。

希望这会有所帮助。

答案 4 :(得分:0)

--username user --password pass此处指定了用户凭据,授予访问权限使用测试数据库,它不适用于整个mysql。所以相应地修改它。