Доступ к базе данных Vertica через Oozie sqoop

Я написал рабочий процесс Oozie для доступа к базе данных HP Vertica через Sqoop. Это на виртуальной машине Cloudera. Я получаю следующую ошибку в журналах 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? Когда я запускаю тот же рабочий процесс за пределами виртуальной машины, он запускается без аргумента диспетчера соединений?


person user3898179    schedule 23.02.2015    source источник
comment
Является ли 123@abc вашим настоящим паролем?   -  person Kermit    schedule 24.02.2015


Ответы (1)


Как говорится в ошибке:

Could not load db driver class: dbDriver

Скорее всего две проблемы:

  1. URL-адрес JDBC, вероятно, неверен
  2. JDBC Jar должен быть включен в рабочий процесс.

Для URL-адреса JDBC убедитесь, что он выглядит следующим образом:

jdbc:vertica://VerticaHost:portNumber/databaseName

Для jar JDBC его необходимо включить в рабочий процесс. Ознакомьтесь с этой статьей, где приведен краткий пример того, как это сделать с HBase. TLDR: когда вы запускаете Sqoop через oozie, вы должны включить драйвер в рабочий процесс:

<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.

person generalpiston    schedule 24.02.2015
comment
Привет, спасибо за ответ. Согласно сообщению, я добавил свою банку jdbc в папку HDFS /user/oozie/share/lib/sqoop. Однако, несмотря на добавленный URL-адрес и файлы, я все еще получаю сообщение об ошибке. Нужно ли добавлять аргумент --connection-manager? - person user3898179; 24.02.2015
comment
Нет, sqoop должен автоматически выбирать правильный диспетчер соединений из URL-адреса jdbc. Возможно, вам потребуется добавить --driver com.vertica.jdbc.Driver. - person generalpiston; 24.02.2015
comment
Привет, да. Я добавил это. Почему-то не подхватывается. - person user3898179; 24.02.2015
comment
Тогда я бы задал ваш вопрос в списке рассылки Sqoop: [email protected]. - person generalpiston; 24.02.2015