通过 Oozie sqoop 访问 Vertica 数据库
Accessing Vertica Database through Oozie sqoop
我编写了一个 Oozie 工作流来通过 Sqoop 访问 HP Vertica 数据库。这是在 Cloudera VM 上。 运行ning 后,我在 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 外部执行相同的工作流时,它 运行 没有连接管理器参数?
如错误所述:
Could not load db driver class: dbDriver
可能有两个问题:
- JDBCURL可能不正确
- 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 作业中。
我编写了一个 Oozie 工作流来通过 Sqoop 访问 HP Vertica 数据库。这是在 Cloudera VM 上。 运行ning 后,我在 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 外部执行相同的工作流时,它 运行 没有连接管理器参数?
如错误所述:
Could not load db driver class: dbDriver
可能有两个问题:
- JDBCURL可能不正确
- 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 作业中。