Я пытаюсь запустить задание Sqoop в сценарии Shell с помощью Oozie.Обратите внимание, что я использую cdh5 на моей локальной машине (виртуальная машина с 12G оперативной памяти) и HUE для создания рабочего процесса.
Я создал задание Sqoop, которое извлекает данные из Mysql в HDFS,в сценарии оболочки.И я запускаю его, используя Oozie:
sqoop job --create testmetastore --meta-connect jdbc:hsqldb:hsql://localhost:16000/sqoop -- import --connect jdbc:mysql://localhost:3306/retail_db --table EMPLOYEE --username root --password cloudera --target-dir hdfs://localhost:8020/user/cloudera/EMPLOYEES -m 1
Задание создано (я могу найти его, когда делаю список cmd, см. Ниже):
sqoop job --list --meta-connect jdbc:hsqldb:hsql://localhost:16000/sqoop
задание sqoop --list
Я даже выполнил задание с моего терминала, и оно работает (см. Cmd ниже):
sqoop job --meta-connect jdbc:hsqldb:hsql://localhost:16000/sqoop --exec testmetastore
Я удалил последнюю импортированную папку и снова попытался выполнить задание, но на этот раз в Oozie.Выдает ошибку (см. Ниже):
18/12/23 10:47:06 INFO mapreduce.ImportJobBase: counters are unavailable. To get this information,
18/12/23 10:47:06 INFO mapreduce.ImportJobBase: you will need to enable the completed job store on
18/12/23 10:47:06 INFO mapreduce.ImportJobBase: the jobtracker with:
18/12/23 10:47:06 INFO mapreduce.ImportJobBase: mapreduce.jobtracker.persist.jobstatus.active = true
18/12/23 10:47:06 INFO mapreduce.ImportJobBase: mapreduce.jobtracker.persist.jobstatus.hours = 1
18/12/23 10:47:06 INFO mapreduce.ImportJobBase: A jobtracker restart is required for these settings
18/12/23 10:47:06 INFO mapreduce.ImportJobBase: to take effect.
18/12/23 10:47:06 ERROR tool.ImportTool: Import failed: Import job failed!
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]
Вот sqoop-site.xml:
<property>
<name>sqoop.metastore.client.enable.autoconnect</name>
<value>false</value>
<description>If true, Sqoop will connect to a local metastore
for job management when no other metastore arguments are
provided.
</description>
</property>
<property>
<name>sqoop.metastore.client.autoconnect.url</name>
<value>jdbc:hsqldb:hsql://localhost:16000</value>
<description>The connect string to use when connecting to a
job-management metastore. If unspecified, uses ~/.sqoop/.
You can specify a different path here.
</description>
</property>
<property>
<name>sqoop.metastore.client.autoconnect.username</name>
<value>SA</value>
<description>The username to bind to the metastore.
</description>
</property>
<property>
<name>sqoop.metastore.client.autoconnect.password</name>
<value></value>
<description>The password to bind to the metastore.
</description>
</property>
<property>
<name>sqoop.metastore.client.record.password</name>
<value>true</value>
<description>If true, allow saved passwords in the metastore.
</description>
</property>
<property>
<name>sqoop.metastore.server.location</name>
<value>/tmp/sqoop-metastore/shared.db</value>
<description>Path to the shared metastore database files.
If this is not set, it will be placed in ~/.sqoop/.
</description>
</property>
<property>
<name>sqoop.metastore.server.port</name>
<value>16000</value>
<description>Port that this metastore should listen on.
</description>
</property>
Вотworkflow.xml:
<workflow-app name="MyWorkflow" xmlns="uri:oozie:workflow:0.5">
<start to="shell-7268"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="shell-7268">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<exec>/user/cloudera/sqpexec.sh</exec>
<file>/user/cloudera/sqpexec.sh#sqpexec.sh</file>
<file>/user/cloudera/sqoop-site.xml#sqoop-site.xml</file>
<capture-output/>
</shell>
<ok to="End"/>
<error to="Kill"/>
</action>
<end name="End"/>
Вот вид из HUE: рабочий процесс в HUE
Причина, по которой я пытаюсь запустить задание sqoop в сценарии оболочки из Oozie, заключается в том, что я хочу создать задание sqoop, которое переназначает последнее импортированное значение, чтобы оно могло увеличивать таблицу, а затем планировать его с помощью Oozie.Так что это только первый шаг теста!
Не могли бы вы помочь?Спасибо,