Sqoop работа через oozie

Я создал задание sqoop под названием TeamMemsImportJob, которое в основном извлекает данные с сервера sql в куст. Я могу выполнить задание sqoop через командную строку unix, выполнив следующую команду:

sqoop job –exec TeamMemsImportJob

Если я создаю задание oozie с фактической командой импорта scoop, оно выполняется нормально. Однако, если я создаю задание oozie и запускаю через него задание sqoop, я получаю следующую ошибку:

oozie job -config TeamMemsImportJob.properties -run

>>> Invoking Sqoop command line now >>>

4273 [main] WARN org.apache.sqoop.tool.SqoopTool – $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration.
4329 [main] INFO org.apache.sqoop.Sqoop – Running Sqoop version: 1.4.4.2.1.1.0-385
5172 [main] ERROR org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage – Cannot restore job: TeamMemsImportJob
5172 [main] ERROR org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage – (No such job)
5172 [main] ERROR org.apache.sqoop.tool.JobTool – I/O error performing job operation: java.io.IOException: Cannot restore missing job TeamMemsImportJob
at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.read(HsqldbJobStorage.java:256)
at org.apache.sqoop.tool.JobTool.execJob(JobTool.java:198)

похоже, что он не может найти работу. Однако я вижу работу, как показано ниже

[root@sandbox ~]# sqoop job –list
Warning: /usr/lib/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
14/06/25 08:12:08 INFO sqoop.Sqoop: Running Sqoop version: 1.4.4.2.1.1.0-385
Available jobs:
TeamMemsImportJob

Как решить эту проблему?


person Colman    schedule 25.06.2014    source источник
comment
Привет @Colman, проблема решена?   -  person jintocvg    schedule 06.04.2018


Ответы (2)


Вы должны использовать флаг --meta-connect при создании задания для создания пользовательской базы данных хранилища метаданных Sqoop, чтобы у Oozie был доступ.

sqoop \
job \
--meta-connect \
"jdbc:hsqldb:file:/on/server/not/hdfs/sqoop-metastore/sqoop-meta.db;shutdown=true" \
--create \
jobName \
-- \
import \
--connect jdbc:oracle:thin:@server:port:sid \
--username username \
--password-file /path/on/hdfs/server.password \
--table TABLE \
--incremental append \
--check-column ID \
--last-value "0" \
--target-dir /path/on/hdfs/TABLE

Когда вам нужно выполнить задание, вы можете сделать это из Oozie обычным способом, но обязательно включите --meta-connect, чтобы указать, где хранится задание.

person kfkhalili    schedule 19.04.2016

Если мы посмотрим журнал, мы увидим, что он не может найти сохраненное задание.

Поскольку вы используете собственный hsql db.

Чтобы задания Sqoop были доступны в других системах, вы должны настроить другую базу данных, например mysql, к которой могут обращаться все системы.

Из документации

Запуск sqoop-metastore запускает общий экземпляр базы данных HSQLDB на текущем компьютере. Клиенты могут подключаться к этому хранилищу метаданных и создавать задания, которые могут быть разделены между пользователями для выполнения.

Расположение файлов хранилища метаданных на диске определяется свойством sqoop.metastore.server.location в файле conf/sqoop-site.xml. Это должно указывать на каталог в локальной файловой системе.

Хранилище метаданных доступно через TCP/IP. Порт управляется параметром конфигурации sqoop.metastore.server.port и по умолчанию равен 16000.

Клиенты должны подключаться к хранилищу метаданных, указав sqoop.metastore.client.autoconnect.url или --meta-connect со значением jdbc:hsqldb:hsql://:/sqoop. Например, jdbc:hsqldb:hsql://metaserver.example.com:16000/sqoop.

Это хранилище метаданных может быть размещено на компьютере в кластере Hadoop или в другом месте в сети.

Можете ли вы проверить, доступна ли эта база данных из других систем.

person user2230605    schedule 15.07.2014