我在运行类似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,所以关注我的第二个解决方案帖子!)在重新开始这个密集模拟之前,我会很高兴听到有人对我所面临的问题的看法,因为它几乎困扰着一周了.我似乎也不完全理解在这个复制阶段发生了什么,我希望磁盘上的合并排序不需要很多堆大小?
非常感谢您提供任何有用的评论和答案!
我正在使用带有Pyspark的Jupyter笔记本以及以下码头图片:Jupyter all-spark-notebook
现在我想编写一个使用Kafka消息的pyspark流应用程序.在Spark-Kafka集成指南中,他们描述了如何使用spark-submit部署这样的应用程序(它需要链接外部jar - 解释在3.部署中).但是因为我正在使用Jupyter笔记本,所以我从未真正运行过spark-submit命令,我认为如果按下执行,它会在后面运行.
在spark-submit命令中你可以指定一些参数,其中一个是-jars,但我不清楚如何从笔记本中设置这个参数(或通过环境变量外部?).我假设我可以通过SparkConf或SparkContext对象动态链接这个外部jar .有没有人体验如何从笔记本电脑正确执行链接?
python-3.x apache-kafka spark-streaming pyspark jupyter-notebook
我有一个非常基本的问题.Spark的flatMap功能允许您为每个输入发出0,1或更多输出.因此,您提供给flatMap的(lambda)函数应该返回一个列表.
我的问题是:如果这个列表太大而你的记忆无法处理,会发生什么?
我目前还没有实现这个,在我重写MapReduce软件之前应该解决这个问题,这个软件可以通过context.write()在我想要的算法中放置任何地方来轻松解决这个问题.(单个映射器的输出可能很容易大量的千兆字节.
如果您感兴趣:映射器会进行某种字数统计,但事实上它会生成所有可能的子字符串,以及与文本匹配的各种正则表达式.(生物信息学用例)