Java 了解MapReduce性能?

Java 了解MapReduce性能?,java,performance,hadoop,mapreduce,Java,Performance,Hadoop,Mapreduce,嗨,我想更好地理解地图降低性能 在Hadoop中实现的MapReduce算法的主要性能是什么 如果一个节点需要处理大量数据,是计算时间,还是磁盘写入和读取时间 我观察到,当我运行一些map reduce程序时,光盘写入时间比光盘读取时间要长 我想知道磁盘写入的开销是否比计算时间(CPU时间)大得多,计算时间是在一个节点上处理大量数据集合所需的时间。与I/O访问相比,CPU时间是否微不足道 下面的算法是每个reduce节点上发生的情况: 我想知道,与从HDFS读取输入,然后在处理后将输出写入HDF

嗨,我想更好地理解地图降低性能

在Hadoop中实现的MapReduce算法的主要性能是什么

如果一个节点需要处理大量数据,是计算时间,还是磁盘写入和读取时间

我观察到,当我运行一些map reduce程序时,光盘写入时间比光盘读取时间要长

我想知道磁盘写入的开销是否比计算时间(CPU时间)大得多,计算时间是在一个节点上处理大量数据集合所需的时间。与I/O访问相比,CPU时间是否微不足道

下面的算法是每个reduce节点上发生的情况: 我想知道,与从HDFS读取输入,然后在处理后将输出写入HDFS相比,执行此算法的CPU时间是否微不足道

  Input : R is a multiset of records sorted by the increasing order of their sizes; each    record has been canonicalized by a global ordering O; a Jaccard similarity threshold t
  Output : All pairs of records hx, yi, such that sim(x, y) > t

  1 S <- null;
  2 Ii <- null (1 <= i <= |U|);
  3 for each x belongs to R do
  4 p <- |x| - t * |x| + 1;
  5 for i = 1 to p do
  6 w <- x[i];
  7 for each (y, j) belongs to Iw such
  that |y|>= t*|x| do /* size filtering on |y| */
  8 Calculate similarity s = (x intersection y) /* Similarity calculation*/ 
  9 if similarity>t
     S <- S U (x,y);
  10 Iw <- Iw Union {(x, i)}; /* index the current prefix */;

  11 return S
Input:R是按大小递增顺序排序的多组记录;每个记录都已通过全局排序O规范化;Jaccard相似阈值t
输出:所有记录对hx,yi,使sim(x,y)>t

1s这可能有助于你理解这个问题:

L1 cache reference                            0.5 ns
Branch mispredict                             5   ns
L2 cache reference                            7   ns             14x L1 cache
Mutex lock/unlock                            25   ns
Main memory reference                       100   ns             20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy              3,000   ns
Send 1K bytes over 1 Gbps network        10,000   ns    0.01 ms
Read 4K randomly from SSD*              150,000   ns    0.15 ms
Read 1 MB sequentially from memory      250,000   ns    0.25 ms
Round trip within same datacenter       500,000   ns    0.5  ms
Read 1 MB sequentially from SSD*      1,000,000   ns    1    ms  4X memory
Disk seek                            10,000,000   ns   10    ms  20x datacenter roundtrip
Read 1 MB sequentially from disk     20,000,000   ns   20    ms  80x memory, 20X SSD
Send packet CA->Netherlands->CA     150,000,000   ns  150    ms

来源:

一般来说-这取决于您正在进行的处理类型。但可以指出,除了代码之外,什么需要时间和消耗资源
我们将回顾MR作业流程,并指出明显的资源消耗。 1.从HDFS中读取您的拆分。除非进行本地读取优化-数据通过套接字(CPU)和/或网络+磁盘IO传递。MD5也在读取期间计算。 1.输入格式。输入数据应切碎为映射器的键值。考虑到它是java,它总是动态分配内存和取消分配内存。解析输入通常需要CPU时间
2.从记录读取器到映射器-没有严重的开销
3.映射器输出被排序和序列化(大量CPU)+本地磁盘
4.数据由还原器从映射器机器中提取。大量的网络联系
5.数据在减速器侧合并。CPU+磁盘
6.从减速器写入HDFS的输出。由于复制,数据大小为x3的磁盘IO+x2网络流量


简言之,3、4、5通常是最耗费时间和资源的。

谢谢你给出的惊人答案。这非常有帮助。我想根据我的代码了解性能。基本上,我在我的代码中所做的处理是生成相似的对,通过使用反向索引和一些过滤策略前缀过滤器来减少反向索引的长度。我想知道,与您在代码之外提到的传输由代码完成的处理生成的输出的其他因素相比,这个过程在CPU时间上是否微不足道。请帮忙!你有没有在系统级详细解释MapReduce的链接?我认为最好的书是Hadoop权威指南。要了解更多详细信息,源代码通常是唯一/最好的答案。我添加了每个reduce节点中发生的过程的算法。我想知道,与从HDFS读取输入然后将其写回HDFS相比,这个处理时间是否微不足道。提前谢谢!我想你的计算花费了很长时间,所以没问题。在我的上一篇文章中,我建议简单地测试运行相同的作业,而不进行实际的相似性计算并测量时间差。