我试图通过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'
)?我该如何解决?
答案 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。所以相应地修改它。