Hadoop Datanode、namenode、secondary-namenode、job-tracker 和 task-tracker

Posted

技术标签:

【中文标题】Hadoop Datanode、namenode、secondary-namenode、job-tracker 和 task-tracker【英文标题】:Hadoop Datanode, namenode, secondary-namenode, job-tracker and task-tracker 【发布时间】:2011-10-19 06:31:32 【问题描述】:

我是 hadoop 新手,所以我有一些疑问。如果主节点发生故障,hadoop 集群会发生什么?我们可以在没有任何损失的情况下恢复该节点吗?当当前主节点发生故障时,是否可以保留辅助主节点自动切换到主节点?

我们有namenode(Secondary namenode)的备份,所以我们可以在Secondary namenode失败的时候恢复namenode。像这样,当datanode发生故障时,我们如何恢复datanode中的数据?二级namenode只是namenode的备份,不是datenode的备份,对吧?如果一个节点在作业完成之前发生故障,因此作业跟踪器中有作业挂起,该作业是继续还是从空闲节点中的第一个重新开始?

如果发生任何事情,我们如何恢复整个集群数据?

最后一个问题,我们可以在 Mapreduce 中使用 C 程序吗(例如,mapreduce 中的冒泡排序)?

提前致谢

【问题讨论】:

【参考方案1】:

虽然,现在回答你的问题为时已晚,但它可以帮助其他人..

首先让我向您介绍二级名称节点:

它包含名称空间图像,编辑过去的日志文件备份 小时(可配置)。它的工作是合并最新的Name Node NameSpaceImage 和编辑日志文件以上传回名称节点 更换旧的。在集群中拥有辅助 NN 不是 强制性的。

现在解决您的问题..

如果主节点发生故障,hadoop 集群会发生什么情况?

支持 Frail 的回答,是的 hadoop 有单点故障,所以 您当前正在运行的整个任务,例如 Map-Reduce 或任何其他 正在使用失败的主节点将停止。整个集群包括 客户端将停止工作。

我们能否恢复该节点而不会造成任何损失?

这是假设的,没有损失,这是最不可能的,因为所有的 数据节点发送到名称的数据(块报告)将丢失 上次备份后的节点由辅助名称节点执行。为什么我提到 至少,因为如果名称节点在成功备份运行后失败 通过二级名称节点,则处于安全状态。

是否可以保留辅助主节点在当前主节点发生故障时自动切换到主节点?

管理员(用户)可以轻松完成。并切换它 自动你必须在集群之外编写本机代码,代码 监控将配置辅助名称节点的集群 巧妙地使用新的名称节点地址重新启动集群。

我们有namenode(Secondary namenode)的备份,所以我们可以在Secondary namenode出现故障的时候恢复namenode。像这样,datanode出现故障时如何恢复datanode中的数据?

大约是replication factor,我们有 3 个(默认为最佳实践, 可配置的)每个文件块的副本都在不同的数据节点中。 因此,如果暂时出现故障,我们有 2 个备份数据节点。 稍后的名称节点将再创建一个失败数据的副本 包含的数据节点。

二级namenode只是namenode的备份,不是datenode的备份,对吧?

没错。它只包含数据节点的所有元数据,如数据节点 地址,属性包括每个数据节点的块报告。

如果某个节点在作业完成之前出现故障,因此作业跟踪器中有作业挂起,该作业是继续执行还是从空闲节点中的第一个重新开始?

HDFS 将强制尝试继续工作。但这又取决于 复制因子,rack awareness 和 other configuration 由 行政。但是如果遵循 Hadoop 关于 HDFS 的最佳实践,那么它 不会失败。 JobTracker 将获得复制的节点地址到 继续。

如果发生任何情况,我们如何恢复整个集群数据?

通过重新启动它。

最后一个问题,我们可以在 Mapreduce 中使用 C 程序吗(例如,mapreduce 中的冒泡排序)?

是的,您可以使用任何支持标准文件的编程语言 读写操作。

我刚刚试了一下。希望它可以帮助您和其他人。

*欢迎提出建议/改进。*

【讨论】:

非常好的和清晰的解释。看来您是 Hadoop 架构师,并且从事 hadoop 工作已经有很长时间了。【参考方案2】:

目前hadoop集群有一个单点故障,即namenode。

关于二级节点问题(来自apache wiki):

术语“辅助名称节点”有些误导。它不是一个 在数据节点无法连接到辅助节点的意义上,名称节点 名称节点,并且在任何情况下它都不能替换主名称节点 失败的案例。

辅助名称节点的唯一目的是定期执行 检查站。辅助名称节点定期下载当前 名称节点图像并编辑日志文件,将它们加入新图像并 将新图像上传回(主要和唯一的)名称节点。 请参阅用户指南。

因此,如果名称节点发生故障,您可以在同一物理上重新启动它 节点,则无需关闭数据节点,只需关闭名称节点 需要重新启动。如果您不能再使用旧节点,您将 需要将最新的图像复制到其他地方。最新图可以 在失败前曾经是主节点的节点上找到,如果 可用的;或在辅助名称节点上。后者将是 没有后续编辑日志的最新检查点,这是最 那里可能缺少最近的名称空间修改。你也会 这种情况下需要重启整个集群。

有一些棘手的方法可以克服这种单点故障。如果您使用的是 cloudera 发行版,其中一种解释了here 的方法。 Mapr 发行版有一个different way 来处理这个spof。

最后,您可以使用每一种编程语言在 hadoop streaming 上编写 map reduce。

【讨论】:

现在很多人都称二级namenode为“检查点节点”,这是件好事。 任何可以读取/写入 STDIN/STDOUT 的编程语言都可以与 Hadoop Streaming 一起使用。有几个 frameworks 让 Hadoop Streaming 更容易。【参考方案3】:

虽然,现在回答您的问题为时已晚,但它可能对其他人有所帮助..首先我们将讨论 Hadoop 1.X 守护程序的角色,然后是您的问题..

1.二级名称节点的作用是什么 它不完全是备份节点。它会定期读取编辑日志并为名称节点创建更新的 fsimage 文件。它定期从名称节点获取元数据并保留它并在名称节点失败时使用。 2。名称节点的作用是什么 它是所有守护进程的管理者。它在主节点上运行的主 jvm 进程。它与数据节点交互。

3.工作跟踪器的作用是什么 它接受作业并分发给任务跟踪器以在数据节点处进行处理。它被称为映射过程

4.任务跟踪器的作用是什么 它将执行为处理数据节点上的现有数据而提供的程序。该过程称为映射。

hadoop 1.X 的限制

    单点故障 这是名称节点,因此我们可以为名称节点维护高质量的硬件。如果名称节点失败,一切都将无法访问

解决方案 单点故障的解决方案是 hadoop 2.X,它提供了高可用性。

high availability with hadoop 2.X

现在你的主题......

如果发生任何情况,我们如何恢复整个集群数据? 如果集群失败,我们可以重新启动它..

如果一个节点在作业完成之前出现故障,因此作业跟踪器中有作业待处理,该作业是继续还是从空闲节点中的第一个重新开始? 我们有默认的 3 个数据副本(我的意思是块)来获得高可用性,这取决于管理员他设置了多少副本......所以作业跟踪器将继续处理其他数据节点上的其他数据副本

我们可以在 Mapreduce 中使用 C 程序吗(例如,mapreduce 中的冒泡排序)? 基本上 mapreduce 是执行引擎,它将以(存储加处理)分布式方式解决或处理大数据问题。我们正在使用 mapreduce 编程进行文件处理和所有其他基本操作,因此我们可以根据要求使用任何可以处理文件的语言。

hadoop 1.X 架构 hadoop 1.x has 4 basic daemons

我刚刚试了一下。希望它能帮助你和其他人。

欢迎提出建议/改进。

【讨论】:

以上是关于Hadoop Datanode、namenode、secondary-namenode、job-tracker 和 task-tracker的主要内容,如果未能解决你的问题,请参考以下文章

hadoop datanode 不能连接 namenode

hadoop中的namenode和datanode都启动了,输入jps为啥只有一个4018Jps

hadoop安装完成jps怎么没有datanode

Hadoop重新格式namenode后无法启动datanode的问题

hadoop namenode datanode hdfs工作机制

在hadoop集群中重新格式化namenode后重新启动datanode