2

我有一个关于 HDFS 读/写过程的问题:

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

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

是客户端的进程本身还是 HDFS 中有另一个进程,创建并专用于这个特定的客户端,以便访问和读/写 HDFS

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

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

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

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

4

2 回答 2

1

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

Hadoop 2.0 数据写入操作确认

Hadoop文件写入

Hadoop:HDFS 文件写入和读取

除了文件/块写入之外,上述问题还解释了有关数据节点故障的情况。

好的数据节点上的当前块被赋予一个新的身份,该身份被传达给名称节点,这样如果失败的数据节点稍后恢复,失败的数据节点上的部分块将被删除。失败的数据节点从管道中移除,并从两个好的数据节点构建一个新的管道。

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

关于您的第二个查询:

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

公平调度器

容量调度器

看看这篇关于暂停和恢复的文章

在多应用集群环境中,在Hadoop YARN内运行的作业的优先级可能低于在Hadoop YARN之外运行的作业(如 HBase)。为了让位于 Hadoop 中其他更高优先级的作业,用户或某些集群级资源调度服务应该能够暂停和/或恢复 Hadoop YARN 中的某些特定作业

当 Hadoop 内部的目标作业被挂起时,那些已经分配并正在运行的任务容器将继续运行,直到它们完成或通过其他方式主动抢占。但是不会再为目标作业分配新的容器。

相反,当暂停的作业进入恢复模式时,它们将继续从先前的作业进度运行,并分配新的任务容器来完成其余的作业。

于 2016-03-21T16:09:59.140 回答
0

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

根据上述流程,为了服务第二个客户端的写请求而暂停 HDFS 写操作是不可能的(假设第二个客户端具有更高的优先级),因为如果我们自己暂停 Datanode,它将对所有人保持暂停状态谁想在上面写,结果这部分 HDFS 将被阻止。最后,如果我暂停 JobController 类函数的作业,我实际上暂停了客户端的进程(如果我真的设法在他的请求完成之前捕获它)。如果我错了,请纠正我。

于 2016-03-21T16:10:48.563 回答