hadoop put性能-大文件(20gb)

jgwigjjp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(766)

我使用hdfs-put将一个20gb的大文件加载到hdfs中。当前进程在4分钟内运行。我正在努力提高将数据加载到hdfs的写入时间。我尝试使用不同的块大小来提高写入速度,但得到了以下结果:

512M blocksize = 4mins;
256M blocksize = 4mins;
128M blocksize = 4mins;
64M blocksize = 4mins;

有人知道瓶颈是什么吗?还有其他我可以探索的方法来提高-put cmd的性能吗?

xuo3flqw

xuo3flqw1#

这在很大程度上取决于你的设置细节。首先,要知道4分钟内20gb是80mbps。
瓶颈很可能是本地机器的硬件或以太网连接。我怀疑玩块大小将提高你的吞吐量很多。
如果您的本地计算机有一个典型的7200rpm硬盘驱动器,其磁盘到缓冲区的传输速率约为128mbps,这意味着它可以在2:35左右将20bg文件加载到内存中,前提是您有20gb的空闲空间。然而,您不只是将其复制到内存,而是将其从内存流式传输到网络数据包,因此处理这些任务会产生额外的开销是可以理解的。
另请参阅wikipedia的wire speed条目,该条目将快速以太网设置为100mbit/s(~12mb/s)。请注意,在本例中,快速以太网是一组特定以太网标准的术语。很明显你得到的速度比这个快。网速是一个很好的测量方法,因为它考虑了本地机器上的所有因素。
因此,让我们在本地计算机上分解流处理过程中的不同步骤:
从文件中读取块并将其加载到内存中。组件:硬盘、内存
分割并将该块转换为数据包。上次我听说hadoop没有使用现成的dma特性,所以这些操作将由cpu而不是nic执行。组件:内存、cpu
将数据包传输到hadoop文件服务器。组件:nic、网络
如果不了解本地计算机的更多信息,就很难指定这些组件中的哪一个是瓶颈。然而,这些是开始研究比特率的地方。

jhiyze9q

jhiyze9q2#

20gb/4minute可达到85mb/sec。这是相当合理的吞吐量期望从一个单一的驱动器与所有的hdfs协议和网络开销。我打赌那是你的瓶颈。如果不改变你的摄取过程,你将无法使这个神奇的更快。
核心问题是20gb是一个相当可观的数据量,而且数据作为一个流被推送到hdfs中。由于hadoop集群中有大量磁盘,因此磁盘i/o非常有限。。您还有一段时间来饱和10gige网络(也可能是1GGe)。
如您所见,更改块大小不应更改此行为。从磁盘到hdfs的数据量还是一样的。
我建议您将文件拆分为1gb文件,并将它们分布在多个磁盘上,然后使用 -put 同时进行。如果网络成为瓶颈,您甚至可以考虑在多个节点上拆分这些文件。你能改变你接收数据的方式使之更快吗?显然,拆分文件并移动它也需要时间。

lymnna71

lymnna713#

您可能需要使用distcp hadoop distcp-ddfs.block.size=$[25610241024]/path/to/inputdata/path/to/outputdata来执行并行复制

相关问题