Duplikate mit sqoop mit Oozie @ überwach
Ich habe ein sqoop-Pogramm erstellt, um Daten von MySQL nach HDFS mithilfe eines vorgefertigten sqoop-Jobs zu importieren:
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 '\"'
Ich habe auch ein Spark-Programm erstellt, mit dem der Import von sqoop überwacht werden kann. Dabei habe ich die max_id (SELECT Max (ID) der zu importierenden Tabelle, den sqoop incremental.last.value, die Anzahl der Datensätze (SELECT count )), die Anzahl der unterschiedlichen Datensätze (SELECT-Anzahl (distinct ID)) und der Prozentsatz der Duplikate (definiert als SELECT-Anzahl ) - Anzahl (eindeutige ID) / Anzahl (*) * 100).
Wenn ich die Daten manuell importiere, führe ich den sqoop-Job aus:
sqoop-job --exec job_parquet_$table -- --username edastatnew --password edastatnew
Alles stimmt, ich habe keine Duplikate und die Daten werden perfekt importiert
Wenn ich jedoch Oozie zum Planen des sqoop-Jobs verwende, habe ich festgestellt, dass sqoopincremental.last.value falsch aktualisiert wird, was zu Duplikaten in meinen Daten führt. Hier ist meine Überwachung:
Wie Sie sehen, stimmt die max_ID nicht mit dem sqoop_last_value zu einem anderen Zeitpunkt des Experiments überein. Ich bin zu dem Schluss gekommen, dass bei Verwendung von Oozie der sqoop incremenatal.last.value nach der Ausführung eines sqoop-Jobs falsch aktualisiert wird. Hat jemand dasselbe Problem? Wenn ja, haben Sie eine Lösung gefunden?
Vielen Dank