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

Hadoop put性能-大文件(20gb),hadoop,hdfs,large-files,Hadoop,Hdfs,Large Files,我使用hdfs-put将一个20GB的大文件加载到hdfs中。当前进程运行@4分钟。我正在努力提高将数据加载到hdfs的写入时间。我尝试使用不同的块大小来提高写入速度,但得到了以下结果: 512M blocksize = 4mins; 256M blocksize = 4mins; 128M blocksize = 4mins; 64M blocksize = 4mins; 有人知道瓶颈是什么吗?我可以探索其他选项来提高-put cmd的性能吗?20GB/4分钟到大约85MB/s。考虑到HDF

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

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

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

20GB/4分钟到大约85MB/s。考虑到HDFS协议和网络的所有开销,单驱动器的吞吐量是相当合理的。我打赌这是你的瓶颈。如果不改变你的摄取过程,你就无法神奇地加快速度

核心问题是20GB是相当可观的数据量,数据作为单个流被推送到HDFS中。由于Hadoop集群中有大量磁盘,因此磁盘I/O非常有限。。您还有一段时间来饱和10GigE网络(可能还有1GigE)

正如您所看到的,更改块大小不应更改此行为。从磁盘到HDFS的数据量仍然相同


我建议您将该文件拆分为1GB文件,并将其分布在多个磁盘上,然后使用
-put
并行地将其推送。如果网络成为瓶颈,你甚至可能想考虑在多个节点上分割这些文件。您能否更改接收数据的方式以加快速度?显然,分割文件并四处移动也需要时间。

这在很大程度上取决于您的设置细节。首先,要知道4分钟内的20GB就是80MBps

瓶颈很可能是本地计算机的硬件或其以太网连接。我怀疑使用块大小将大大提高吞吐量

如果您的本地计算机有一个典型的7200rpm硬盘驱动器,其磁盘到缓冲区的传输速率约为128MBps,这意味着它可以在大约2:35的时间内将20BG文件加载到内存中,前提是您有20GB的空闲空间。然而,您不仅仅是将其复制到内存,而是将其从内存流式传输到网络数据包,因此处理这些任务会产生额外的开销是可以理解的

另请参阅上的wikipedia条目,该条目将快速以太网设置为100Mbit/s(~12MB/s)。注意,在这种情况下,快速以太网是一组特定以太网标准的术语。你显然得到了比这更快的速度。导线速度是一个很好的测量方法,因为它考虑了本地机器上的所有因素

因此,让我们在您的本地计算机上分解流式处理过程中的不同步骤:

  • 从文件中读取块并将其加载到内存中。组件:硬盘驱动器、内存
  • 将该块分割并转换为数据包。上次我听说Hadoop没有使用现成的功能,所以这些操作将由您的CPU而不是NIC执行。组件:内存、CPU
  • 将数据包传输到hadoop文件服务器。组件:网卡、网络

如果不了解本地计算机的更多信息,就很难指定这些组件中的哪一个是瓶颈。然而,这些是开始研究比特率的地方

您可能需要使用distcp hadoop distcp-Ddfs.block.size=$[256*1024*1024]/path/to/inputdata/path/to/outputdata
执行并行复制

,因此当前速度为80 MB/s。调查磁盘和网络I/O。您的磁盘/网络是否可以改善?你的确切设置是什么?一台机器还是一个集群?