Наблюдение дубликатов с использованием sqoop с Oozie

Я построил sqoop pogram для импорта данных из MySQL в HDFS с помощью предварительно созданного задания sqoop:

                sqoop job -fs $driver_path -D mapreduce.map.java.opts=" -Duser.timezone=Europe/Paris"\
            --create job_parquet_table -- import -m $nodes_number\
            --connect jdbc:mysql://$server:$port/$database --username $username --password-file $pass_file\
            --target-dir $destination_dir --table $table --as-parquetfile --append\
            --incremental append --check-column $id_column_names --last-value 1\
            --fields-terminated-by , --escaped-by \\ --enclosed-by '\"'

Я также создал искровую программу, которая позволяет контролировать импорт sqoop. В этом я измерил max_id (SELECT Max (ID) импортируемой таблицы, sqoop incremental.last.value, количество записей (количество SELECT ()), количество отдельных записей (количество SELECT (отличный идентификатор)) и процент дубликатов (определяется как количество SELECT () - количество (отличный идентификатор) / количество (*) * 100).

Когда я импортирую данные вручную, выполняя задание sqoop:

sqoop-job --exec job_parquet_$table -- --username edastatnew --password edastatnew

Все правильно, у меня нет дубликатов и данные отлично импортируются

Однако, когда я использую Oozie для планирования задания sqoop, я заметил, что sqoopincremental.last.value неправильно обновлен, что приводит к дублированию в моих данных. Вот мой мониторинг:

Как видите, max_ID не совпадает с sqoop_last_value в разное время эксперимента. Я пришел к выводу, что при использовании Oozie sqoop incremenatal.last.value ошибочно обновляется после выполнения задания sqoop. Кто-нибудь сталкивался с такой же проблемой? если да, вы нашли какое-нибудь решение?

Спасибо,

Ответы на вопрос(1)

Решение Вопроса

где Sqoop хранит эту информацию о «последнем значении»?

Ответ: для Sqoop1 по умолчанию в файле налокальная файловая система, Но Oozie работает на Sqoopслучайные машины поэтому казни не скоординированы.
И Sqoop2 (который имеет надлежащую базу данных Metastore) более или менее находится в подвешенном состоянии; по крайней мере это не поддерживается Oozie.

Решение состоит в том, чтобы начатьслужба общих баз данных HSQLDB хранить информацию о «последнем значении» для всех заданий Sqoop1, независимо от того, на какой машине они работают.

Пожалуйста, прочитайте документацию Sqoop1 о его хромотеMetastore и о том, как его использовать, изтам втам.
И для более профессиональной обработки этой устаревшей базы данных HSQLDB, посмотрите наэтот пост мой.

Ваш ответ на вопрос