2016-03-21 5 views
1

У меня есть один вопрос, касающийся HDFS процесса чтения/записи:Может ли процесс чтения/записи HDFS быть приостановлен/возобновлен?

Если предположить, что у нас есть клиент (для примера скажем, что клиент является процессом карты Hadoop), который просит, чтобы прочитать файл из HDFS и или записать файл в HDFS, , который является процессом, который фактически выполняет чтение/запись с/на HDFS?

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

Это сам процесс клиента или есть другой процесс в HDFS, созданный и выделенный для этого конкретного клиента, для доступа и чтения/записи с/на HDFS?

И наконец, , если второй ответ верен, существует ли вероятность того, что этот процесс может быть приостановлен на некоторое время?

Я провел некоторое исследование, и самые важные решения, которые я нашел, были Oozie и JobControl класс от hadoop API.

Но, поскольку я не уверен в описанном выше рабочем процессе, я не уверен, какой процесс я приостанавливаю и возобновляю с помощью этих инструментов.

Это процесс или процесс клиента, который работает в HDFS для обслуживания запроса клиента?

ответ

1

Посмотрите на эти посты SE, чтобы понять, как HDFS пишет работу:

Hadoop 2.0 data write operation acknowledgement

Hadoop file write

Hadoop: HDFS File Writes & Reads

Помимо файла/блок пишет, выше вопрос объяснить о DataNode сценарии отказа.

Текущий блок на хорошей DataNodes дается новое удостоверение, которое передается в NameNode, так что частичный блок на несостоявшемся DataNode будет удален, если не удалось DataNode восстанавливает позже. Неисправный datanode удаляется из конвейера, и новый конвейер построен из двух хороших данных.

Один отказ в datanode вызывает корректирующие действия по структуре.

Что касается вашего второго запроса:

У вас есть два типа планировщиков:

FairScheduler

CapacityScheduler

Посмотрите на это article о приостановлении и возобновлении

В мульти-аппликации среда катионного кластера, задания, выполняемые внутри Hadoop YARN может иметь более низкий приоритет, чем задания, выполняемые за пределами Hadoop YARN, как HBase. Чтобы уступить другим высокоприоритетным заданиям внутри Hadoop, пользователь или планирование ресурсов на уровне кластера сервис должен иметь возможность приостанавливать и/или возобновлять некоторые конкретные задания в Hadoop YARN.

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

В отличие от этого, когда приостановленные задания помещаются в режим возобновления, они будут продолжать работать с предыдущего выполнения задания и назначать новые контейнеры задач для завершения остальных заданий.

+0

Спасибо за ваш ответ! Я не понимаю последнюю часть. Как насчет примера со вторым клиентом с более высоким приоритетом? – dinosaur

+0

Теперь, когда я пытаюсь пересмотреть мой предыдущий ответ, может ли он работать с использованием очередей данных на основе этих двух сообщений? http://stackoverflow.com/questions/34464187/hadoop-file-write/34464676#34464676 http://stackoverflow.com/questions/32038000/hadoop-2-0-data-write-operation-acknowledgement – dinosaur

+0

и озабоченность мой первоначальный пост: класс [JobControl] (https://hadoop.apache.org/docs/r2.5.2/api/org/apache/hadoop/mapreduce/lib/jobcontrol/JobControl.html) приостанавливает процесс клиента, а не право чтения/записи HDFS? Есть ли способ приостановить процесс чтения/записи HDFS? – dinosaur

0

Насколько я понимаю, процесс Datanode получает данные из процесса клиента (который просит хранить некоторые данные в HDFS) и сохраняет его. Затем этот Datanode пересылает точные данные в другой Datanode (для достижения репликации) и так далее. Когда репликация закончится, подтверждение вернется к Namenode, который, наконец, проинформирует клиента о завершении его запроса на запись.

Основываясь на вышеуказанном потоке, невозможно приостановить операцию записи HDFS, чтобы обслуживать запрос на запись второго клиента (предположим, что второй клиент имеет более высокий приоритет), поскольку, если мы приостановим сам Datanode, он будет остаются приостановленными для всех, кто хочет писать на нем, и в результате эта часть HDFS останется заблокированной. Наконец, если я приостановил работу из функций класса JobController, я фактически приостановил процесс клиента (если мне действительно удастся его поймать, прежде чем его запрос будет выполнен). Пожалуйста, поправьте меня, если я ошибаюсь.

 Смежные вопросы

  • Нет связанных вопросов^_^