Может ли процесс чтения / записи HDFS быть приостановлен / возобновлен?
У меня есть один вопрос, касающийся процесса чтения / записи HDFS:
Предполагая, что у нас есть клиент (в качестве примера, скажем, что клиент является процессом отображения HADOOP), который запрашивает чтение файла из HDFS и / или запись файла в HDFS, который является процессом, который фактически выполняет чтение / запись из / в HDFS?
Я знаю, что есть процесс для Наменоды и процесс для каждой Датододы, каковы их обязанности перед системой в целом, но я запутался в этом сценарии.
Это процесс клиента сам по себе или есть другой процесс в HDFS, созданный и выделенный для этого конкретного клиента, для доступа и чтения / записи из / в HDFS?
Наконец, если второй ответ верен, есть ли вероятность, что этот процесс может быть приостановлен на некоторое время?
Я провел некоторые исследования, и наиболее важными решениями, которые я нашел, были класс Oozie и JobControl из API hadoop.
Но, поскольку я не уверен в вышеупомянутом рабочем процессе, я не уверен, какой процесс я приостановил и возобновил с этими инструментами.
Это процесс клиента или процесс, который выполняется в HDFS, чтобы обслуживать запрос клиента?
2 ответа
Посмотрите на эти сообщения SE, чтобы понять, как работает запись HDFS:
Подтверждение операции записи данных Hadoop 2.0
Hadoop: файл HDFS пишет и читает
Помимо записи в файл / блок, приведенный выше вопрос объясняет сценарии сбоев в датоде.
Текущему блоку на хороших датодах присваивается новый идентификатор, который передается наменоду, так что частичный блок на неисправном датоделе будет удален, если неисправный датодат восстанавливается позже. Неисправная датодода удаляется из конвейера, и из двух хороших датододов создается новый конвейер.
Один сбой в датоде вызывает корректирующие действия по структуре.
По поводу вашего второго запроса:
У вас есть два типа планировщиков:
Посмотрите на эту статью о приостановке и резюме
В кластерной среде с несколькими приложениями задания, выполняемые внутри Hadoop YARN, могут иметь более низкий приоритет, чем задания, выполняемые вне Hadoop YARN, такие как HBase. Чтобы уступить место другим высокоприоритетным заданиям внутри Hadoop, пользователь или некоторая служба планирования ресурсов на уровне кластера должны иметь возможность приостанавливать и / или возобновлять некоторые конкретные задания в Hadoop YARN.
Когда целевые задания внутри Hadoop приостановлены, те уже распределенные и работающие контейнеры задач будут продолжать выполняться до их завершения или активного прерывания другими способами. Но больше не будет новых контейнеров для целевых заданий.
Напротив, когда приостановленные задания переводятся в режим возобновления, они будут продолжать выполняться с предыдущим ходом выполнения задания, и для завершения остальных заданий будут выделены новые контейнеры задач.
Так что, насколько я понимаю, процесс Datanode получает данные от процесса клиента (который запрашивает сохранение некоторых данных в HDFS) и сохраняет их. Затем эта Datanode передает те же самые данные в другую Datanode (для достижения репликации) и так далее. Когда репликация завершится, подтверждение вернется к Namenode, который, наконец, проинформирует клиента о завершении его запроса на запись.
Исходя из вышеописанного потока, невозможно приостановить операцию записи HDFS для обслуживания запроса записи второго клиента (предположим, что второй клиент имеет более высокий приоритет), потому что если мы приостановим Datanode самостоятельно, он останется приостановленным для всех кто хочет написать на нем, и в результате эта часть HDFS останется заблокированной. Наконец, если я приостанавливаю работу из функций класса JobController, я фактически приостанавливаю процесс клиента (если мне действительно удается перехватить его до того, как его запрос будет выполнен). Пожалуйста, поправьте меня, если я ошибаюсь.