通过SQOOP Action在OOZIE中列出MS SQL Server表

时间:2017-05-02 08:02:54

标签: shell hadoop cloudera sqoop oozie

我能够在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] ERROR org.apache.sqoop.manager.CatalogQueryManager -   无法列出表java.sql.SQLException:找不到合适的驱动程序   对于'jdbc:sqlserver://xx.xx.xx.xx \ MSSQLSERVER2012:1433; username = usr; password = xxx; database = db'

-

  

2057 [main] ERROR 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发布)

1 个答案:

答案 0 :(得分:0)

这对我使用CDH 5.11和Hue工作流编辑器创建了一个Oozie> Sqoop1工作流程......但它需要您对UserName和Password参数进行硬编码...屏幕截图包含在下面。

以下是循序渐进:

  1. 打开Hue>工作流编辑器
  2. 创建新工作流程
  3. 将Sqoop 1操作拖到"将您的操作放到此处"灰盒子。
  4. 忽略默认的Sqoop命令框,而是点击Sqoop命令框下面的ARGUMENTS右侧的+,添加一个新参数。
  5. 添加"导入"没有双引号作为第一个参数。
  6. 删除Sqoop命令框的全部内容,它必须为空。
  7. 添加一个值为&#34的新参数; - connect"没有双引号。
  8. 添加一个值为" jdbc的新参数:sqlserver:// YourServerNameHere; database = YourDatabaseNameHere"
  9. 添加一个值为" - username"
  10. 的新参数
  11. 添加一个值为" YourSQLServerNamedUserNameHere"
  12. 的新参数
  13. 添加一个值为" - password"
  14. 的新参数
  15. 添加一个值为" - query"
  16. 的新参数
  17. 添加一个值为&#34的新参数;从OptionalDBNameHere.SchemaNameHere.TableNameHere中选择*其中$ CONDITIONS"
  18. 添加一个值为&#34的新参数; - delete-target-dir"
  19. 添加一个值为" - target-dir"
  20. 的新参数
  21. 添加一个值为" hdfs:// FDQServerName:PortNumber8020IsDefault / User / full / path / to / where / you / want / / csv / file / placement / in / hdfs / NewFolderForThisTableHere& #34; - 每次运行sqoop作业时,将删除并重新创建最后一个文件夹。
  22. 添加一个值为" num-mappers"
  23. 的新参数
  24. 添加一个值为" 1"
  25. 的新参数

    重要提示:

    一个。 " Where $ CONDITIONS"在第13项中的SQL Select语句结束时至关重要。如果没有它,它将无法运行。

    B中。这使用一个SQL Server命名用户帐户,可以访问您想要Sqoop的DBServer数据库和表。

    B中。如果您的命名用户没有将默认架构设置为" dbo"则需要输入这样的参数。或者如果表的模式不是数据库和用户的默认模式。

    ℃。 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