>Hadoop предоставляет набор командной строки для управления Hadoop. Эти команды включают форматирование файловой системы, загрузку и выгрузку файлов, запуск узлов Datanode, просмотр использования файловой системы, запуск JAR-файлов и многое другое.
### 1. Параллельное копирование с помощью distcp
Модели доступа к HDFS через Java API и другие интерфейсы сосредоточены на однопоточной работе. Если требуется выполнить операции с набором файлов, необходимо написать программу для параллельной работы. HDFS предоставляет очень полезное приложение — distcp, которое позволяет параллельно копировать большие объемы данных между Hadoop файловыми системами. Обычно distcp используется для передачи данных между двумя HDFS кластерами. Если оба кластера используют одинаковую версию Hadoop, можно использовать режим HDFS:
hadoop distcp hdfs://NameNode1/foo hdfs://NameNode2/bar
Эта команда копирует все файлы и подкаталоги из каталога /foo первого кластера в каталог /bar второго кластера, создавая структуру каталога /bar/foo. Если каталог /bar не существует, система его создаст. Можно указать несколько источников данных, и все они будут скопированы в целевой путь. Важно отметить, что исходные пути должны быть абсолютными.
# Помощь по distcp
usage: distcp OPTIONS [source_path ...] <target_path>
OPTIONS -append Использовать существующие данные в целевых файлах и добавлять новые данные к ним, если возможно
-async Должна ли выполнение distcp блокировать выполнение
-atomic Применять все изменения или не применять их вовсе
-bandwidth <arg> Указывать пропускную способность на карту в МБ
-delete Удалять из целевого каталога файлы, отсутствующие в исходном каталоге
-diff <arg> Использовать отчет о разнице снимков для определения различий между исходным и целевым каталогами
-f <arg> Список файлов, которые нужно скопировать
-filelimit <arg> (Устарело!) Ограничить количество файлов, которые будут скопированы, до n
-i Игнорировать ошибки во время копирования
-log <arg> Каталог на DFS, где сохраняются логи выполнения distcp
-m <arg> Максимальное количество параллельных карт для копирования
-mapredSslConf <arg> Конфигурация для файла конфигурации SSL, для использования с hftps://. Должен быть в classpath.
-overwrite Выбрать перезаписать целевые файлы безусловно, даже если они существуют.
-p <аргумент> Сохранить состояние (rbugpcaxt)(репликация, размер блока, пользователь, группа, разрешение, тип контрольной суммы, ACL, XATTR, метки времени).Если -p указан без <аргумент>, то сохраняет репликацию, размер блока, пользователя, группу, разрешение, тип контрольной суммы и метки времени. raw. * xattrs сохраняются, когда как исходный, так и целевой пути находятся в /. reserved/raw иерархии (только HDFS). raw. * сохранение xattrs независимо от флага -p. См. документацию DistCp для получения дополнительной информации.
-sizelimit <аргумент> (Устарело!) Ограничить количество копируемых файлов до <= n байт
-skipcrccheck Пропустить проверку CRC между исходными и целевыми путями.
-strategy <аргумент> Использовать стратегию копирования. По умолчанию используется стратегия, основанная на размерах файлов
-tmp <аргумент> Временный путь для промежуточной работы, используемый для атомарного коммита
-update Обновить целевое, копируя только отсутствующие файлы или директории. По умолчанию, хотя `distcp` пропускает файлы, которые уже существуют в целевом пути, можно выбрать перезапись этих файлов с помощью опции `-overwrite`. Также можно использовать опцию `-update` для перезаписи только обновленных файлов.`distcp` имеет множество опций для настройки, таких как игнорирование ошибок, ограничение файлов или копирования данных. Ввод команды без дополнительных опций выводит справку по использованию. В реальности `distcp` выполняется как задача MapReduce, и когда нет задачи Reduce, копирование выполняется как задача Map параллельно на узлах кластера. Поэтому каждый файл может быть обработан как отдельная задача Map для копирования.```markdown
usage: distcp OPTIONS [source_path . . . ] <target_path> OPTIONS -append Использовать существующие данные в целевых файлах и добавлять новые данные к ним, если возможно -async Должна ли выполнение distcp быть асинхронной -atomic Подтвердить все изменения или не подтверждать их -bandwidth Указать пропускную способность на карту в МБ -delete Удалить из целевого пути файлы, отсутствующие в исходном пути -diff Использовать отчет о разнице снимков для определения различий между исходным и целевым путями -f Список файлов, которые нужно скопировать -filelimit (Устарело! ) Ограничить количество копируемых файлов до <= n -i Игнорировать ошибки во время копирования -log Папка на DFS, где сохраняются логи выполнения distcp -m Максимальное количество параллельных карт для копирования -mapredSslConf Конфигурация для файла конфигурации SSL, для использования с hftps://. Должна быть в classpath. -overwrite Выбрать перезапись целевых файлов безусловно, даже если они существуют. -p Сохранить статус (rbugpcaxt)(репликация, размер блока, пользователь, группа, разрешение, тип контрольной суммы, ACL, XATTR, метки времени). Если -p указан без , то сохраняются репликация, размер блока, пользователь, группа, разрешение.
-sizelimit <arg> (Устарело!) Ограничение на количество копируемых файлов до <= n байт
-skipcrccheck Пропускать ли проверку CRC между исходными и целевыми путями.
-strategy <arg> Стратегия копирования. По умолчанию используется разделение работы на основе размеров файлов
-tmp <arg> Временный путь для промежуточной работы, используемый для атомарного коммита
-update Обновлять целевой объект, копируя только отсутствующие файлы или директории ### 2. Балансировка HDFS
``` При копировании больших объемов данных в HDFS одним из ключевых факторов является балансировка файловой системы. Когда блоки файлов распределены равномерно по узлам кластера, Hadoop работает эффективно, поэтому важно, чтобы операция distcp не нарушала этот баланс. Например, если требуется скопировать 1000 ГБ данных, и при этом задан параметр -m равным 1, это означает, что одна операция Map будет выполняться для 1000 ГБ данных. Это не только замедлит процесс копирования, но и не позволит использовать полную производительность кластера. Более того, первая часть скопированного файла будет храниться на узле, где выполняется операция Map, до тех пор, пока диск этого узла не заполнится. Это явно не является балансировкой. Обычно мы задаем больше операций Map, чем узлов в кластере, чтобы избежать подобной ситуации. Лучшим выбором является использование по умолчанию 20 операций Map на каждый узел.
Конечно, мы не можем гарантировать, что кластер всегда будет находиться в состоянии баланса. Иногда может потребоваться ограничить количество операций Map, чтобы узлы могли использоваться для других задач. Для этого HDFS предоставляет инструмент balancer для изменения баланса хранения блоков файлов в кластере.
### 3. Архивные файлы > HDFS хранит файлы в виде блоков, а метаданные блоков файлов хранятся в памяти namenode. Поэтому для HDFS хранение большого количества маленьких файлов является крайне неэффективным, так как множество маленьких файлов может исчерпать большую часть памяти namenode. Файлы Hadoop Archive (HAR) позволяют эффективно помещать файлы в архивные устройства, используемые для хранения блоков HDFS, что снижает использование памяти namenode, при этом позволяя прозрачный доступ к файлам. Конкретно, файлы Hadoop Archive могут использоваться в качестве входных данных для MapReduce.
Файлы Hadoop Archive создаются с помощью команды archive на основе набора файлов. Поскольку этот инструмент требует выполнения MapReduce для параллельной обработки файлов, ему требуется кластер для выполнения MapReduce. В HDFS есть файлы, которые требуют архивации, например: hadoop fs -ls /usr/weiwei
Найдено 1 элемент
-rw-r--r-- 2 root supergroup 119 2017-02-05 12:06 /usr/weiwei/quangle.txt
Запуск команды archive выполняется следующим образом:
```shell
hadoop archive -archiveName files.har -p /usr weiwei /usr/weiwei17/02/13 15:05:48 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
17/02/13 15:05:48 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
17/02/13 15:05:48 INFO jvm.JvmMetrics: Cannot initialize JVM Metrics with processName=JobTracker, sessionId= - already initialized
17/02/13 15:05:48 INFO jvm.JvmMetrics: Cannot initialize JVM Metrics with processName=JobTracker, sessionId= - already initialized
17/02/13 15:05:48 INFO mapreduce.JobSubmitter: number of splits:1
17/02/13 15:05:49 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_local2110672751_0001
17/02/13 15:05:49 INFO mapreduce.Job: The url to track the job: http://localhost:8080/
17/02/13 15:05:49 INFO mapred.LocalJobRunner: OutputCommitter set in config null
17/02/13 15:05:49 INFO mapred.LocalJobRunner: OutputCommitter is org.apache.hadoop.mapred.FileOutputCommitter
17/02/13 15:05:49 INFO mapreduce.Job: Running job: job_local2110672751_0001
17/02/13 15:05:49 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
17/02/13 15:05:49 INFO mapred.LocalJobRunner: Waiting for map tasks
17/02/13 15:05:49 INFO mapred.LocalJobRunner: Starting task: attempt_local2110672751_0001_m_000000_0
17/02/13 15:05:49 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
17/02/13 15:05:49 INFO mapred.Task: Using ResourceCalculatorProcessTree : [ ]
17/02/13 15:05:49 INFO mapred.MapTask: Processing split: file:/usr/lib/apache/hadoop-2.7.3/tmp/mapred/staging/root137600685/.staging/har_tbn3m9/_har_src_files:0+276
17/02/13 15:05:49 INFO mapred.MapTask: numReduceTasks: 1
17/02/13 15:05:49 INFO mapred.MapTask: (EQUATOR) 0 kvi 26214396(104857584)
17/02/13 15:05:49 INFO mapred.MapTask: mapreduce.task.io.sort.mb: 100
17/02/13 15:05:49 INFO mapred.MapTask: soft limit at 83886080
17/02/13 15:05:49 INFO mapred.MapTask: bufstart = 0; bufvoid = 104857600
17/02/13 15:05:49 INFO mapred.MapTask: kvstart = 26214396; length = 6553600
17/02/13 15:05:49 INFO mapred.MapTask: Map output collector class = org.apache.hadoop. mapred. MapTask$MapOutputBuffer
```
17/02/13 15:05:50 INFO mapreduce. Задача: Задача job_local2110672751_0001 выполняется в режиме uber: false
17/02/13 15:05:50 INFO mapreduce. Задача: карта 0% уменьшение 0%
17/02/13 15:05:50 INFO mapred. LocalJobRunner:
17/02/13 15:05:50 INFO mapred. MapTask: Начало очистки выходных данных карты
17/02/13 15:05:50 INFO mapred. MapTask: Очистка выходных данных карты
17/02/13 15:05:50 INFO mapred. MapTask: bufstart = 0; bufend = 208; bufvoid = 104857600
17/02/13 15:05:50 INFO mapred. MapTask: kvstart = 26214396(104857584); kvend = 26214388(104857552); length = 9/6553600
17/02/13 15:05:50 INFO mapred. MapTask: Завершение очистки 0
17/02/13 15:05:50 INFO mapred. Задача: Задача:attempt_local2110672751_0001_m_000000_0 завершена. И процесс коммита уже начался
17/02/13 15:05:50 INFO mapred. LocalJobRunner:
17/02/13 15:05:50 INFO mapred. Задача: Задача attempt_local2110672751_0001_m_000000_0 теперь может быть завершена
17/02/13 15:05:50 INFO output. FileOutputCommitter: Сохранены выходные данные задачи 'attempt_local2110672751_0001_m_000000_0' в hdfs://master:9000/usr/weiwei/files.har/_temporary/0/task_local2110672751_0001_m_000000
17/02/13 15:05:50 INFO mapred. LocalJobRunner: Копирование файла hdfs://master:9000/usr/weiwei/quangle.txt в архив.
17/02/13 15:05:50 INFO mapred. Задача: Задача 'attempt_local2110672751_0001_m_000000_0' завершена.
17/02/13 15:05:50 INFO mapred. LocalJobRunner: Завершение задачи: attempt_local2110672751_0001_m_000000_0
17/02/13 15:05:50 INFO mapred. LocalJobRunner: Завершение задачи карты
17/02/13 15:05:50 INFO mapred. LocalJobRunner: Ожидание задач уменьшения
17/02/13 15:05:50 INFO mapred. LocalJobRunner: Начало задачи: attempt_local2110672751_0001_r_000000_0
17/02/13 15:05:50 INFO output. FileOutputCommitter: Алгоритм File Output Committer Algorithm версии 1
17/02/13 15:05:50 INFO mapred.
```Задача: Использование ResourceCalculatorProcessTree: [ ]
17/02/13 15:05:50 INFO mapred. Задача уменьшения: Использование ShuffleConsumerPlugin: org.apache.hadoop.mapreduce.task.reduce.Shuffle@3fd82180
17/02/13 15:05:50 INFO reduce. MergeManagerImpl: MergerManager: memoryLimit=334338464, maxSingleShuffleLimit=83584616, mergeThreshold=220663392, ioSortFactor=10, memToMemMergeOutputsThreshold=10
17/02/13 15:05:50 INFO reduce. EventFetcher: попытка локального выполнения attempt_local2110672751_0001_r_000000_0 Поток запущен: EventFetcher для получения событий завершения Map
17/02/13 15:05:50 INFO reduce. LocalFetcher: localfetcher#1 готов к перемешиванию выходных данных map attempt_local2110672751_0001_m_000000_0 разложение: 216 длина: 220 в память
17/02/13 15:05:50 INFO reduce. InMemoryMapOutput: прочитано 216 байт из выходных данных map для попытки attempt_local2110672751_0001_m_000000_0
17/02/13 15:05:50 INFO reduce. MergeManagerImpl: closeInMemoryFile -> выходные данные map размером: 216, inMemoryMapOutputs. size() -> 1, commitMemory -> 0, usedMemory -> 216
17/02/13 15:05:50 INFO reduce. EventFetcher: EventFetcher прерван. Возвращение
17/02/13 15:05:50 INFO mapred. LocalJobRunner: 1 / 1 скопировано.
17/02/13 15:05:50 INFO reduce. MergeManagerImpl: finalMerge вызван с 1 выходными данными map в памяти и 0 выходными данными map на диске
17/02/13 15:05:50 INFO mapred. Merger: Объединение 1 отсортированных сегментов
17/02/13 15:05:50 INFO mapred. Merger: До последнего этапа объединения, осталось 1 сегментов общим размером: 210 байт
17/02/13 15:05:50 INFO reduce. MergeManagerImpl: Объединено 1 сегментов, 216 байт на диск для удовлетворения ограничений памяти reduce
17/02/13 15:05:50 INFO reduce. MergeManagerImpl: Объединение 1 файлов, 220 байт с диска
17/02/13 15:05:50 INFO reduce.MergeManagerImpl: Объединение 0 сегментов, 0 байт из памяти в reduce
17/02/13 15:05:50 INFO mapred.Merger: Объединение 1 отсортированных сегментов
17/02/13 15:05:50 INFO mapred.Merger: До последнего этапа объединения, осталось 1 сегментов общим размером: 210 байт
17/02/13 15:05:50 INFO mapred.LocalJobRunner: 1 / 1 скопировано.
17/02/13 15:05:50 INFO mapred.Task: Задача:attempt_local2110672751_0001_r_000000_0 завершена. И процесс коммита начался
17/02/13 15:05:50 INFO mapred.LocalJobRunner: 1 / 1 скопировано.
17/02/13 15:05:50 INFO mapred.Task: Задача attempt_local2110672751_0001_r_000000_0 разрешена к коммиту
17/02/13 15:05:50 INFO output.FileOutputCommitter: Сохранены выходные данные задачи 'attempt_local2110672751_0001_r_000000_0' в hdfs://master:9000/usr/weiwei/files.har/_temporary/0/task_local2110672751_0001_r_000000
17/02/13 15:05:50 INFO mapred.LocalJobRunner: reduce > reduce
17/02/13 15:05:50 INFO mapred.Task: Задача 'attempt_local2110672751_0001_r_000000_0' завершена.
17/02/13 15:05:50 INFO mapred.LocalJobRunner: Завершение задачи: попытка_local2110672751_0001_r_000000_0
17/02/13 15:05:50 INFO mapred.LocalJobRunner: reduce task executor complete.
17/02/13 15:05:51 INFO mapreduce.Job: map 100% reduce 100%
17/02/13 15:05:51 INFO mapreduce.Job: Задача job_local2110672751_0001 завершена успешно
17/02/13 15:05:51 INFO mapreduce.Job: Счетчики: 35
Счетчики файловой системы
FILE: Количество прочитанных байт=92680
FILE: Количество записанных байт=686796
FILE: Количество операций чтения=0
FILE: Количество операций чтения большими блоками=0
FILE: Количество операций записи=0
HDFS: Количество прочитанных байт=238
HDFS: Количество записанных байт=457 HDFS: Количество операций чтения=33
HDFS: Количество операций чтения большими блоками=0
HDFS: Количество операций записи=11
Система MapReduce
Количество входных записей map=3
Количество выходных записей map=3
Количество выходных байт map=208
Количество материализованных выходных байт map=220
Количество байт входных разделов=153
Количество входных записей combine=0
Количество выходных записей combine=0
Количество групп reduce=3
Количество байт перемещения reduce=220
Количество входных записей reduce=3
Количество выходных записей reduce=0
Количество перемещенных записей=6
Количество перемещенных карт=1
Количество неудачных перемещений=0
Количество объединенных выходных записей карт=1
Время работы сборки мусора (мс)=13
Общее использование выделенной памяти (байты)=526385152
Счетчики ошибок перемещения
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
Счетчики входного формата файла
Количество прочитанных байт=288
Счетчики выходного формата файла
Количество записанных байт=0
В командной строке, первый параметр — это имя архивного файла, здесь это файл file.har, второй параметр — родительский путь исходного файла, третий параметр — путь к исходному файлу для архивации; последний параметр — путь вывода архивного файла.Следующая команда рекурсивно выводит файлы из архивного файла:
```bash
root@master:/# hadoop fs -lsr har:///usr/weiwei/files.har
lsr: УСТАРЕВШАЯ: Пожалуйста, используйте 'ls -R' вместо.
drwxr-xr-x - root supergroup 0 2017-02-13 15:05 har:///usr/weiwei/files.har/weiwei
-rw-r--r-- 2 root supergroup 119 2017-02-05 12:06 har:///usr/weiwei/files.har/weiwei/quangle.txt
```
Если файл HAR находится в стандартной файловой системе, то его содержимое будет понятным. Однако, если требуется использовать файл HAR в другой файловой системе, необходимо использовать разные URI-пути.
Для удаления файла HAR требуется использовать рекурсивный формат удаления, так как файл HAR в нижележащей файловой системе является директорией. Команда удаления выглядит следующим образом:
```
hadoop fs -rm -r /usr/weiwei/files.har
```
Файлы HAR также имеют ряд недостатков. Например, при создании архива создаются копии исходных файлов, что увеличивает потребление дискового пространства (исходные файлы удаляются после завершения архивации). К тому же, на данный момент нет алгоритма сжатия для архивов, поэтому сжатие возможно только для исходных файлов, добавляемых в архив. Архивные файлы не могут быть изменены после создания, поэтому для добавления или удаления файлов необходимо создавать новый архив.Файлы HAR могут использоваться как входные данные для MapReduce, однако нет InputFormat, который мог бы упаковывать несколько файлов в одну задачу MapReduce. Поэтому даже при использовании файлов HAR эффективность обработки малых файлов остаётся низкой.### 4. Другие команды
Другие команды включают следующие:
* `NameNode -format`: форматирование файловой системы DFS
* `secondaryNameNode`: запуск вторичного узла NameNode в файловой системе DFS
* `NameNode`: запуск узла NameNode в файловой системе DFS
* `DataNode`: запуск узла DataNode в файловой системе DFS
* `dfsadmin`: запуск управляющего клиента для файловой системы DFS
* `mradmin`: запуск управляющего клиента для MapReduce
* `fsck`: запуск процесса проверки файловой системы HDFS
* `fs`: запуск утилиты файловой системы
* `balancer`: запуск процесса балансировки файловой системы
* `jobtracker`: запуск процесса TaskTracker
* `pipes`: запуск задачи pipes
* `tasktracker`: запуск процесса TaskTracker
* `job`: управление запущенными задачами MapReduce
* `queue`: получение сообщений о запущенных очередях MapReduce
* `version`: вывод версии
* `daemonlog`: чтение/установка уровня логирования для демонов
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )