首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hadoop put性能-大文件(20 Put)

Hadoop put性能-大文件(20 Put)
EN

Stack Overflow用户
提问于 2013-10-24 23:49:19
回答 3查看 14.5K关注 0票数 12

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

代码语言:javascript
复制
512M blocksize = 4mins;
256M blocksize = 4mins;
128M blocksize = 4mins;
64M blocksize = 4mins;

有没有人知道瓶颈是什么,以及我可以探索的其他方法来提高-put命令的性能?

EN

回答 3

Stack Overflow用户

发布于 2013-10-25 01:34:35

20 to /4分钟大约是85MB/秒。考虑到HDFS协议和网络的所有开销,从单个驱动器获得的吞吐量是相当合理的。我打赌那就是你的瓶颈。如果不改变你的摄取过程,你将无法神奇地让这一切变得更快。

核心问题是20 as是一个相当大的数据量,并且数据作为单个数据流被推送到HDFS中。您受到磁盘I/O的限制,考虑到Hadoop集群中有大量磁盘,这是非常糟糕的。您需要一段时间来饱和10GigE网络(也可能是1GigE网络)。

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

我建议您将文件拆分为1 1GB的文件,并将它们分散到多个磁盘上,然后使用-put并行推送它们。如果网络成为瓶颈,您甚至可能希望考虑将这些文件拆分到多个节点上。您是否可以更改接收数据的方式以使其速度更快?显然,拆分文件和移动文件也需要时间。

票数 14
EN

Stack Overflow用户

发布于 2013-10-25 03:27:56

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

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

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

另请参阅wire speed上的维基百科条目,该条目将快速以太网设置为100Mbit/s (~12MB/s)。注意,在这种情况下,快速以太网是用于特定以太网标准组的术语。很明显,你得到了比这个更快的速度。网速是一个很好的衡量标准,因为它考虑了本地计算机上的所有因素。

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

  • 从文件中读取数据块并将其加载到内存中。组件:硬盘、内存和
  • 拆分并将数据块转换为数据包。最后我听说Hadoop没有使用DMA的开箱即用特性,所以这些操作将由您的CPU而不是NIC执行。组件:内存,CPU
  • 传输数据包到hadoop文件服务器。组件: NIC、网络

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

票数 10
EN

Stack Overflow用户

发布于 2013-10-30 19:29:34

您可能希望使用distcp hadoop distcp -Ddfs.block.size=$256*1024*1024 /path/ to /inputdata /path/ to /outputdata来执行并行拷贝

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19570660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档