小编DDW*_*DDW的帖子

Mapreduce shuffle阶段的内存不足错误

我在运行类似wordcount的 mapreduce程序时遇到了奇怪的错误.我有一个带有20个从站的hadoop集群,每个都有4 GB RAM.我将我的map任务配置为具有300MB的堆,并且我的reduce任务槽获得1GB.我有2个映射插槽和每个节点1个减少插槽.一切顺利,直到第一轮地图任务完成.然后进展仍然是100%.我想那时复制阶段正在进行.每个地图任务生成如下内容:

Map output bytes    4,164,335,564
Map output materialized bytes   608,800,675
Run Code Online (Sandbox Code Playgroud)

(我使用SnappyCodec进行压缩)

停止大约一个小时之后,reduce任务会出现以下异常:

    Error: java.lang.OutOfMemoryError: Java heap space at  
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.shuffleInMemory(ReduceTask.java:1703) at
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getMapOutput(ReduceTask.java:1563) at
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.copyOutput(ReduceTask.java:1401) at
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.run(ReduceTask.java:1333
Run Code Online (Sandbox Code Playgroud)

我在Google上搜索并发现了这个链接,但我真的不知道该怎么做: hadoop常用链接

我不明白为什么hadoop在复制和合并时会遇到任何问题,如果它能够执行terasort基准测试.不能将所有地图输出都放入reducer线程的RAM中.那么这里发生了什么?

在上面提供的链接中,他们讨论了调整以下参数:

mapreduce.reduce.shuffle.input.buffer.percent = 0.7
mapreduce.reduce.shuffle.memory.limit.percent = 0.25
mapreduce.reduce.shuffle.parallelcopies = 5
Run Code Online (Sandbox Code Playgroud)

他们声称参数的乘积> 1的事实允许堆积错误.编辑:请注意,5*1.25*0.7仍然<1,所以关注我的第二个解决方案帖子!)在重新开始这个密集模拟之前,我会很高兴听到有人对我所面临的问题的看法,因为它几乎困扰着一周了.我似乎也不完全理解在这个复制阶段发生了什么,我希望磁盘上的合并排序不需要很多堆大小?

非常感谢您提供任何有用的评论和答案!

hadoop mapreduce

16
推荐指数
2
解决办法
2万
查看次数

在jupyter笔记本中添加自定义jar到pyspark

我正在使用带有PysparkJupyter笔记本以及以下码头图片:Jupyter all-spark-notebook

现在我想编写一个使用Kafka消息pyspark流应用程序.在Spark-Kafka集成指南中,他们描述了如何使用spark-submit部署这样的应用程序(它需要链接外部jar - 解释在3.部署中).但是因为我正在使用Jupyter笔记本,所以我从未真正运行过spark-submit命令,我认为如果按下执行,它会在后面运行.

spark-submit命令中你可以指定一些参数,其中一个是-jars,但我不清楚如何从笔记本中设置这个参数(或通过环境变量外部?).我假设我可以通过SparkConfSparkContext对象动态链接这个外部jar .有没有人体验如何从笔记本电脑正确执行链接?

python-3.x apache-kafka spark-streaming pyspark jupyter-notebook

12
推荐指数
2
解决办法
8478
查看次数

用于巨大列表的Spark FlatMap函数

我有一个非常基本的问题.Spark的flatMap功能允许您为每个输入发出0,1或更多输出.因此,您提供给flatMap的(lambda)函数应该返回一个列表.

我的问题是:如果这个列表太大而你的记忆无法处理,会发生什么

我目前还没有实现这个,在我重写MapReduce软件之前应该解决这个问题,这个软件可以通过context.write()在我想要的算法中放置任何地方来轻松解决这个问题.(单个映射器的输出可能很容易大量的千兆字节.

如果您感兴趣:映射器会进行某种字数统计,但事实上它会生成所有可能的子字符串,以及与文本匹配的各种正则表达式.(生物信息学用例)

mapreduce apache-spark

2
推荐指数
1
解决办法
1546
查看次数