与 Sqoop 不一致的结果
Posted
技术标签:
【中文标题】与 Sqoop 不一致的结果【英文标题】:Inconsistent result with Sqoop 【发布时间】:2019-04-25 20:53:08 【问题描述】:使用 Sqoop 从 mysql 数据库获取数据,无论是从 shell 运行还是从 python 子进程运行,结果都不一致。但是,即使在同一个 python 会话中访问 Oracle 数据库时,我也不会遇到这个问题。
以下从 shell 中按预期运行:
export username="user1"
URI="jdbc:mysql://$host/dbname"
URI="$URI?verifyServerCertificate=false"
URI="$URI&useSSL=true"
URI="$URI&requireSSL=false"
## List Tables
sqoop list-tables \
--connect $URI \
--username $username \
--password-file password.file
然而,完全相同的事情不会从 python 子进程中运行:
import subprocess
## List Tables
subprocess.Popen(
'sqoop list-tables --connect jdbc:mysql://$host/dbname?verifyServerCertificate=false&useSSL=true&requireSSL=false --username user1 --password-file password.file',
shell=True)
给出以下错误:
ERROR [main] manager.CatalogQueryManager (LoggingUtils.java:logAll(43)) - Failed to list tables
java.sql.SQLException: Access denied for user ''@'100.100.100.100' (using password: NO)
我还需要做些什么才能通过 python 子进程使用 Sqoop 连接到 MySQL 数据库吗?
【问题讨论】:
【参考方案1】:发布后立即解决了这个问题。也许它可以帮助别人。
我需要将连接字符串包装在""
中。
以下是更简洁的python表示。
import subprocess
with open('lbaDevUsername.file', 'r') as f:
username = f.read()
URI = "jdbc:mysql://$host/dbname"
URI = "?verifyServerCertificate=false".format(URI)
URI = "&useSSL=true".format(URI)
URI = "&requireSSL=false".format(URI)
## List Tables
subprocess.Popen("""
sqoop list-tables \
--connect "" \
--username \
--password-file password.file
""".format(URI, username), shell=True)
【讨论】:
以上是关于与 Sqoop 不一致的结果的主要内容,如果未能解决你的问题,请参考以下文章