通过 SQOOP Action 在 OOZIE 中列出 MS SQL Server 表
Posted
技术标签:
【中文标题】通过 SQOOP Action 在 OOZIE 中列出 MS SQL Server 表【英文标题】:Listing MS SQL Server table in OOZIE via SQOOP Action 【发布时间】:2017-05-02 08:02:54 【问题描述】:我可以在 CLI 中完美执行以下 SQOOP 命令。
sqoop list-tables
--connect 'jdbc:sqlserver://xx.xx.xx.xx\MSSQLSERVER2012:1433;username=usr;password=xxx;database=db'
--connection-manager org.apache.sqoop.manager.SQLServerManager
--driver com.microsoft.sqlserver.jdbc.SQLServerDriver
-- --schema schma
但在 OOZIE (HUE) 中尝试相同的方法时出错
2055 [main] 错误 org.apache.sqoop.manager.CatalogQueryManager - 无法列出表 java.sql.SQLException:找不到合适的驱动程序 对于 'jdbc:sqlserver://xx.xx.xx.xx\MSSQLSERVER2012:1433;username=usr;password=xxx;database=db'
-
2057 [main] 错误 org.apache.sqoop.Sqoop - 运行异常 Sqoop: java.lang.RuntimeException: java.sql.SQLException: 没有合适的 为 'jdbc:sqlserver://xx.xx.xx.xx\MSSQLSERVER2012:1433;username=usr;password=xxx;database=db' 找到驱动程序
我们如何让它在 oozie 中工作? (在 Cloudera Hadoop 发行版上工作)
【问题讨论】:
你能提供你的 workflow.xml 吗? 你是不是把jdbc jar 文件放到了oozie 在HDFS 上的共享文件夹中?这篇文章可能与***.com/questions/15978156/… 重复 【参考方案1】:这对我使用 CDH 5.11 和 Hue 工作流编辑器来创建 Oozie>Sqoop1 工作流很有用...但它需要您对用户名和密码参数进行硬编码...下面包含屏幕截图。
这是分步说明:
-
打开 Hue > 工作流编辑器
创建新工作流
将 Sqoop 1 操作拖到“将您的操作放到此处”灰色框中。
忽略默认的 Sqoop 命令框,而是点击 Sqoop 命令框下方 ARGUMENTS 右侧的 + 以添加新参数。
添加不带双引号的“import”作为第一个参数。
删除Sqoop命令框的全部内容,需要为空。
添加一个值为“--connect”的新参数,不带双引号。
添加一个值为“jdbc:sqlserver://YourServerNameHere;database=YourDatabaseNameHere”的新参数
添加一个值为“--username”的新参数
添加一个值为“YourSQLServerNamedUserNameHere”的新参数
添加一个值为“--password”的新参数
添加一个值为“--query”的新参数
添加一个值为“Select * from OptionalDBNameHere.SchemaNameHere.TableNameHere Where $CONDITIONS”的新参数
添加一个值为“--delete-target-dir”的新参数
添加一个值为“--target-dir”的新参数
添加一个值为“hdfs://FDQServerName:PortNumber8020IsDefault/User/full/path/to/where/you/want/the/csv/file/placed/in/hdfs/NewFolderForThisTableHere”的新参数——每次运行 sqoop 作业时,都会删除并重新创建最后一个文件夹。
添加一个值为“num-mappers”的新参数
添加一个值为“1”的新参数
重要:
A. “Where $CONDITIONS”对于第 13 项中 SQL Select 语句的末尾至关重要。没有它,它将无法运行。
B.这使用 SQL Server 指定用户帐户,该帐户可以访问您想要 Sqoop 的 DBServer 数据库和表。
B.如果您的命名用户没有将默认架构设置为“dbo”,或者您的表架构不是数据库和用户的默认架构,则需要输入这样的参数。
C. SQL Server JDBC 驱动程序已正确放置在您的安装中。对于我的特定版本的 Cloudera,位置是:“/opt/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.34/lib/sqoop/lib/sqljdbc41.jar”但您也可以尝试放置它在“/var/lib/oozie”或“/var/lib/sqoop”中...不确定它们中的任何一个都可以自己工作。
D.我没有成功用 job.properties 文件中的值替换我作为参数硬编码的用户名和密码。我相信这是可能的,但我一直找不到能清楚地展示如何做到这一点的人,而且几天的暴力试验和错误都没有成功。
这里是显示完成后的样子的屏幕截图。 SqoopCommandAsArguments SqoopCommandAsArgumentsSuccess
【讨论】:
以上是关于通过 SQOOP Action 在 OOZIE 中列出 MS SQL Server 表的主要内容,如果未能解决你的问题,请参考以下文章
通过 oozie 从 sqoop 作业增量导入不会更新 sqoop 元存储中的 incremental.last.value