Я попытался скопировать 400+ ГБ и еще одно задание distcp с размером данных 35,6 ГБ, но на завершение их работы ушло около 2-3 часов.
У нас достаточно ресурсовкластер.
Но когда я изучил журналы контейнеров, я обнаружил, что копирование небольших файлов занимает так много времени. Файл, о котором идет речь, является небольшим файлом.
2019-10-23 14: 49: 09 546 INFO [main] org.apache.hadoop.tools.mapred.CopyMapper: копирование hdfs: // service-namemode-prod-ab / abc / xyz / ava / abc / hello / GRP_part-00001-.snappy.parquet to s3a: // имя-корзины / Данные / abc / xyz / ava / abc / hello / GRP_part-00001-.snappy.parquet 2019-10-23 14: 49: 09,940 INFO [main] org.apache.hadoop.tools.mapred.RetriableFileCopyCommand: создание временного файла: s3a: //bucket-name/Data/.distcp.tmp.attempt_1571566366604_0000_0
Итак, что можно сделать, чтобы улучшить это с помощью distcp, чтобы ускорить копирование?
Примечание: одна и та же копия данных в том же кластере в ObjectХранение (внутреннее хранилище) не AWS S3, но аналогично S3 заняло 4 минуты для 98,6 ГБ.
Команда:
hadoop distcp -Dmapreduce.task. timeout = 0 -Dfs.s3a.fast.upload = true -Dfs.s3a.fast.buffer.size = 157286400 -Dfs.s3a.multipart.size = 314572800 -Dfs.s3a.multipart.threshold = 1073741824 -Dmapreduce.map. Memory.mb = 8192 -Dmapreduce.map.java.opts = -Xmx7290m -Dfs.s3a.max.total.tasks = 1 -Dfs.s3a.threads.max = 10 -пропускная способность 1024 / abc / xyz / ava / s3a:// bucket-name / Data /
Что можно оптимизировать с точки зрения стоимости здесь?
Мои спецификации кластера следующие,
Выделить память (накопительную) - 1.2T
Доступная память - 5.9T
Выделенные VCores (накопительные) - 119T
Доступные VCores - 521T
Сконфигурированная емкость- 997T
Используется HDFS - 813T
Используется без HDFS - 2.7T
Может кто-нибудь предложить решение для преодоления этой проблемы и предложить оптимальный distcp conf для передачи 800 ГБ - 1 ТБ *Обычно 1076 * файлов из HDFS в хранилище объектов.