如何将数据写入HDFS?

fxm*_*fxm 5 hadoop hdfs

我试图通过阅读hadoop-2.4.1文档来了解如何在HDFS中管理数据.

根据以下架构:

HDFS架构

每当客户端向HDFS写入内容时,他都不会与namenode联系并负责分块和复制.我假设在这种情况下,客户端是运行HDFS shell(或等效的)的机器.

但是,我不明白这是如何管理的.的确,根据相同的文件:

DataNode还根据NameNode的指令执行块创建,删除和复制.

上面提供的架构是否正确?如果是这样,

  • 是namenode只在收到Blockreport时才通知新文件(我想这可能需要时间)?
  • 为什么客户端写入多个节点?

    如果此架构不正确,文件创建如何与HDF一起使用?

Mou*_*una 2

正如您所说,DataNode 负责服务读/写请求和块创建/删除/复制。

\n\n

然后他们定期发送\xe2\x80\x9cHeartBeats\xe2\x80\x9d(健康状况报告)\xe2\x80\x9cBlockReport\xe2\x80\x9d(DataNode 上的块列表)到 NameNode。

\n\n

根据这篇文章

\n\n
\n

数据节点每3 秒通过 TCP 握手 向名称节点发送一次心跳,...每第十个心跳就是一个块报告,其中数据节点告诉名称节点其拥有的所有块。

\n
\n\n

因此块报告每 30 秒完成一次,我认为这不会影响 Hadoop 作业,因为一般来说它们是独立的作业。

\n\n

对于你的问题:

\n\n
\n

为什么客户端要写入多个节点?

\n
\n\n

我要说的是,实际上,客户端只写入一个数据节点,并告诉他将数据发送到其他数据节点请参阅此链接图片:客户端开始写入数据),但这是透明的。这就是为什么您的架构认为客户端是正在写入多个节点的客户端

\n