HDFS read/write 进程可以是 suspended/resumed 吗?

Could an HDFS read/write process be suspended/resumed?

我有一个关于 HDFS read/write 进程的问题:

假设我们有一个客户端(为了举例,假设客户端是一个 HADOOP 映射进程)请求从 HDFS 读取文件和/或将文件写入 HDFS,哪个是实际执行 read/write from/to HDFS 的进程?

我知道Namenode有一个进程,每个Datanode都有一个进程,它们对系统的一般职责是什么,但我对这种情况感到困惑。

是客户端进程本身还是在 HDFS 中创建并专用于此特定客户端的另一个进程,以便访问和 read/write from/to HDFS?

最后,如果第二个答案为真,这个过程有没有可能暂停一段时间?

我做了一些研究,发现的最重要的解决方案是 Oozie and JobControl class 来自 hadoop API。

但是,因为我不确定上面的工作流程,所以我不确定我正在使用这些工具暂停和恢复什么流程。

是客户端的进程还是为了服务客户端的请求而运行在HDFS中的进程?

查看这些 SE 帖子以了解 HDFS 写入的工作原理:

Hadoop file write

Hadoop: HDFS File Writes & Reads

除了 file/block 写道,上面的问题解释了有关数据节点故障的情况。

The current block on the good datanodes is given a new identity, which is communicated to the namenode, so that the partial block on the failed datanode will be deleted if the failed datanode recovers later on. The failed datanode is removed from the pipeline, and a new pipeline is constructed from the two good datanodes.

datanode 中的一个故障会触发框架的纠正措施。

关于您的第二个查询:

您有两种类型的调度程序:

FairScheduler

CapacityScheduler

看看这个article关于挂起和恢复

In a multi-application cluster environment, jobs running inside Hadoop YARN may be of lower-priority than jobs running outside Hadoop YARN like HBase. To give way to other higher-priority jobs inside Hadoop, a user or some cluster-level resource scheduling service should be able to suspend and/or resume some particular jobs within Hadoop YARN.

When target jobs inside Hadoop are suspended, those already allocated and running task containers will continue to run until their completion or active preemption by other ways. But no more new containers would be allocated to the target jobs.

In contrast, when suspended jobs are put into resume mode, they will continue to run from the previous job progress and have new task containers allocated to complete the rest of the jobs.

据我了解,Datanode 的进程从客户端进程(请求在 HDFS 中存储一些数据)接收数据并存储它。然后这个Datanode将完全相同的数据转发给另一个Datanode(实现复制)等等。当复制完成时,确认将返回到 Namenode,Namenode 最终通知客户端他的写请求已完成。

基于以上流程,为了服务第二个客户端的写请求(假设第二个客户端具有更高的优先级)而暂停 HDFS 写操作是不可能的,因为如果我们自己暂停 Datanode 它对于任何想在上面写的人来说,它都将保持暂停状态,因此 HDFS 的这一部分将保持阻塞状态。最后,如果我从 JobController class 函数中暂停一个作业,我实际上是暂停了客户端的进程(如果我真的设法在他的请求完成之前捕获它)。如有不妥请指正