Как получить количество обработанных записей из импорта Sqoop? - PullRequest
0 голосов
/ 24 мая 2018

Для репликации данных из моей БД на S3 я использую приведенную ниже команду.

sqoop import -D mapreduce.job.name= xxx-D mapred.job.queue.name=user -Dhadoop.security.credential.provider.path=<path> -Dfs.s3a.server-side-encryption-algorithm=<xx>--options-file <path> --query "select col1,ID,UPDATETIME from db.table where UPDATETIME between to_date('2015-09-11 00:00:00','yyyy/mm/dd hh24:mi:ss') and to_date('2018-05-24 04:28:16','yyyy/mm/dd hh24:mi:ss') and \$CONDITIONS" --hive-delims-replacement ' ' --direct --m 1 --split-by ID  --target-dir <s3//path>

Я могу реплицировать данные, но мне нужно получить количество обработанных данных из той же команды без использования других команд, таких как eval.Потому что в то же время другие записи могут попадать в источник.

Что мне нужно, так это захватить количество записей:

18/05/21 22:55:55 INFO mapreduce.ImportJobBase: Transferred 0 bytes in 47.9229 seconds (0 bytes/sec)
18/05/21 22:55:55 INFO mapreduce.ImportJobBase: Retrieved 33372 records.

1 Ответ

0 голосов
/ 25 мая 2018

Я нашел способ для вышеупомянутого запроса.когда вы передаете команду sqoop в программе ниже subprocess и используете .communicate для хранения всего вывода вместе с предупреждениями и информационными сообщениями.

sqoop_command ='sqoop import........'

process = subprocess.Popen(sqoop_command , stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

rec_str = process.communicate()

rec_str содержит выходные данные.

...