【问题标题】:Accessing Vertica Database through Oozie sqoop通过 Oozie sqoop 访问 Vertica 数据库
【发布时间】:2015-02-24 14:58:18
【问题描述】:

我编写了一个 Oozie 工作流来通过 Sqoop 访问 HP Vertica 数据库。这是在 Cloudera VM 上。运行后 Yarn 日志中出现以下错误:

     RROR sqoop.Sqoop: Got exception running Sqoop:    java.lang.RuntimeException:        Could not load db driver class: dbDriver
     java.lang.RuntimeException: Could not load db driver class: dbDriver
     at org.apache.sqoop.manager.SqlManager.makeConnection(SqlManager.java:848)
     at org.apache.sqoop.manager.GenericJdbcManager.getConnection(GenericJdbcManager.java:52)
     at org.apache.sqoop.tool.EvalSqlTool.run(EvalSqlTool.java:64)
     at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
     at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
     at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
     at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
     at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)"

This is a snippet from the jobprops file:
      "dbDriver=com.vertica.jdbc.Driver
     dbHost=host***.assist.*** 
     dbName=vertica247
     dbPassword=*****
     dbPort=5433
     dbSchema=simod_chat
     dbStagingSchema=simodstg_chat
     dbUser=vertica"

我应该为 --connection-manager 指定什么?当我在 VM 外部运行相同的工作流时,它在没有连接管理器参数的情况下运行?

【问题讨论】:

  • 123@abc 是您的真实密码吗?

标签: sqoop oozie vertica


【解决方案1】:

如错误所述:

Could not load db driver class: dbDriver

可能有两个问题:

  1. JDBC URL 可能不正确
  2. JDBC Jar 需要包含在工作流中

对于 JDBC URL,确保它看起来像这样:

jdbc:vertica://VerticaHost:portNumber/databaseName

对于 JDBC jar,它需要包含在工作流中。查看this article 以获取有关如何使用 HBase 执行此操作的简短示例。 TLDR:当您通过 oozie 运行 Sqoop 时,您必须在工作流中包含驱动程序:

<workflow-app name="sqoop-import" xmlns="uri:oozie:workflow:0.4">
  <start to="sqoop-import"/>
  <action name="sqoop-import">
    <sqoop xmlns="uri:oozie:sqoop-action:0.2">
      <job-tracker>${jobTracker}</job-tracker>
      <name-node>${nameNode}</name-node>
      <command>import --connect jdbc:vertica://VerticaHost:portNumber/databaseName --username test --password test --table test</command>
      <file>/user/admin/vertica-jdbc.jar#vertica-jdbc.jar</file>
    </sqoop>
    <ok to="end"/>
    <error to="kill"/>
  </action>
  <kill name="kill">
    <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  </kill>
  <end name="end"/>
</workflow-app>

注意这一行:

<file>/user/admin/vertica-jdbc.jar#vertica-jdbc.jar</file>

它将自动包含在您的 sqoop 作业中。

【讨论】:

  • 您好,感谢您的回答。根据帖子,我已将我的 jdbc jar 添加到 HDFS 位置 /user/oozie/share/lib/sqoop。但是,尽管添加了 URL 和文件,但我仍然收到错误消息。我需要添加 --connection-manager 参数吗?
  • 不,sqoop 应该自动从 jdbc URL 中选择正确的连接管理器。您可能需要添加--driver com.vertica.jdbc.Driver
  • 嗨,是的。我已经添加了。不知怎的,它没有被捡起。
  • 我会在 Sqoop 邮件列表上问你的问题:user@sqoop.apache.org。
猜你喜欢
  • 2014-08-15
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多