gpt4 book ai didi

Hadoop 管道写入和并行读取?

转载 作者:可可西里 更新时间:2023-11-01 15:13:27 25 4
gpt4 key购买 nike

我们知道 hadoop 中的客户端并行读取数据,但数据是在管道结构中写入的,其中一个数据节点将数据写入另一个数据节点。我知道并行读取使系统具有更高的容错能力和更快的读取速度。但是管道写入的好处是什么?为什么 HDFS 客户端不自己将数据写入每个节点?

最佳答案

<强>1。客户端带宽消耗效率更高

在管道写入中,客户端只需要向第一个数据节点传输一个副本,每个节点只通过网络获取和发送一个副本(除了最后一个数据节点只接收数据),从而拥有更多与客户端将三个副本写入三个不同的数据节点相比,平衡了网络带宽消耗。

<强>2。更小的发送/确认窗口以维护

客户端维护一个小得多的滑动窗口来记录副本中的哪些 block 正在发送到 DataNodes 以及哪些 block 正在等待 acks 以确认写入已完成。在管道写入中,客户端似乎只将数据写入一个数据节点。

<强>3。加快写入操作以获得更快的写入响应时间

当写入一个64MB的chunk时,client将chunk分成4KB大小的 block ,并行发送数据 block ,使得很多耗时的操作(通过网络传输,flush数据到磁盘)并发运行,如下图所示。

Action (DN=DataNode,DP=Data Piece)

Client -( send DP1 )

DN1 --------( get DP1/send to DN2/flush to disk )----------------( ack DP1 )

DN2 --------------( get DP1/send to DN2/flush to disk )------( ack DP1 )

DN3 ----------------------( get DP1/flush to disk )------( ack DP1 )

——————————————————————————————————————————>时间

上图只是展示了一个写pipeline的并行度,其实不同的pipeline写不同的data piece也可以通过各种pipeline的并行操作来节省很多,比如一个DataNode可以flush data piece 2,get data piece 3来自客户端,并同时确认数据片1。下图显示了不同管道如何并行工作。

Client -( DP1 )---( DP2 )---( DP3 )---

DN1 --------( DP1 )---( DP2 )---( DP3 )-------------------- ( ack DP1 )--------( ack DP2 )---( ack DP3 )

DN2 -------------(DP1)---(DP2)---(DP3)--------(ack DP1)---- -----( ack DP2 )---( ack DP3 )

DN3 ----------------------( DP1 )---( DP2 )---( ack DP1 )---( DP3 )-- -( ack DP2 )---( ack DP3 )

——————————————————————————————————————————>时间

对于这种并行处理可以做很多优化,比如将前一个数据片的ack消息搭载到流水线的返回消息中——写入后一个数据片以节省网络传输。

关于Hadoop 管道写入和并行读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30400249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com