我正在尝试编写一个(wordcount)程序来模拟一个用例,因为spark的shuffle过程会导致网络流量非常高。我有一个3节点的apache spark集群(每个2核,每个8GB RAM)配置1个主服务器和2个工作服务器。我为wordcount处理了一个5GB的文件,并且能够看到2个工作节点之间的网络流量在10-15分钟内增加到1GB。我正在寻找一种方法,我可以增加节点之间的流量,在30s-60s内增加至少1GB。在我目前的用例中,程序或最佳实践的低效率无关紧要,因为我只是想模拟流量。
这是我写的程序
val sc = new SparkContext(new SparkConf().setAppName("LetterCount-GroupBy-Map"))
val x = sc.textFile(args(0)).flatMap(t => t.split(" "))
val y = x.map(w => (w.charAt(0),w))
val z = y.groupByKey().mapValues(n => n.size)
z.collect().foreach(println)
答案 0 :(得分:1)
通过执行不能在每个节点上很好地组合数据的操作,可以生成更多的混洗数据。例如:在您编写的代码中,groupby将组合公共密钥(或在本地进行组合)。而是选择一个高基数的键(在上面的例子中它只有26)。另外,可以增加映射操作之后的值的大小。在您的情况下,它的文本行。您可能希望为每个键放置一长串值。
除此之外,如果您使用2个不同的文件/表并对某些参数应用连接,它也会导致混乱。
注意:假设内容无关紧要。您只对生成高度混乱的数据感兴趣。