我有一个由两个工作节点组成的集群.Worker_Node_1 - 64GB RAM Worker_Node_2 - 32GB RAM
背景摘要: 我正在尝试在纱线簇上执行spark-submit以在Graph上运行Pregel来计算从一个源顶点到所有其他顶点的最短路径距离,并在控制台上打印这些值.实验:
问题: 当我深入了解日志文件时,任务在4分钟和26秒内成功完成,但仍然在终端上它继续显示应用程序状态为运行,大约12分钟后任务执行终止说 -
Application application_1447669815913_0002 failed 2 times due to AM Container for appattempt_1447669815913_0002_000002 exited with exitCode: -104 For more detailed output, check application tracking page:http://myserver.com:8088/proxy/application_1447669815913_0002/
Then, click on links to logs of each attempt.
Diagnostics: Container [pid=47384,containerID=container_1447669815913_0002_02_000001] is running beyond physical memory limits. Current usage: 17.9 GB of 17.5 GB physical memory used; 18.7 GB of 36.8 GB virtual memory used. Killing container. …Run Code Online (Sandbox Code Playgroud) 使用-Xmx 设置mapred.job.map.memory.mb和mapred.child.java.opts来控制Mapper和Reduce任务使用的最大内存有什么区别?哪一个优先?
我在计算集群上运行了许多工作,当它们超过所请求的资源使用时它们被杀死 - 其中一个用途是虚拟内存大小.
在我的java启动命令中,我-Xmx8000m用来表示初始堆栈大小为8GB,我还没有看到我的程序的实际内存使用量超过4GB,但是想要安全起见.
但是,当我使用top命令时,我看到我的java进程的12GB的虚拟内存大小 - 正好在所请求的虚拟内存空间的限制.我不能增加我所请求的VM大小,因为已经提交了作业,我要求他们花费的时间越长.
Java是否一致地请求比指定的更多的VM堆空间?这是一个恒定的数量,或恒定的%或随机?堆空间是否可以增长到a)请求的VM大小(8GB)或b)分配的VM大小(12GB).
编辑:在Linux上使用jre-1.7.0-openjdk
我正在运行Hadoop作业,在我的yarn-site.xml文件中,我有以下配置:
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
Run Code Online (Sandbox Code Playgroud)
但是,我偶尔会遇到以下错误:
Container [pid=63375,containerID=container_1388158490598_0001_01_000003] is running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.8 GB of 4.2 GB virtual memory used. Killing container.
Run Code Online (Sandbox Code Playgroud)
我发现通过增加yarn.scheduler.minimum-allocation-mb,为容器分配的物理内存会增加.但是,我并不总是希望为我的容器分配4GB,并且认为通过明确指定最大大小,我可以解决这个问题.我意识到Hadoop无法确定在映射器运行之前需要为容器分配多少内存,所以如果需要额外内存,我应该如何为容器分配更多内存?
我正在运行一个 Python 脚本,它需要一个文件 (genome.fa) 作为依赖(引用)来执行。当我运行此命令时:
hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/had oop-streaming-2.5.1.jar -file ./methratio.py -file '../Test_BSMAP/genome.fa' - mapper './methratio.py -r -g ' -input /TextLab/sravisha_test/SamFiles/test_sam -output ./outfile
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
15/01/30 10:48:38 INFO mapreduce.Job: map 0% reduce 0%
15/01/30 10:52:01 INFO mapreduce.Job: Task Idattempt_1422600586708_0001_m_000 009_0, Status : FAILED
Container [pid=22533,containerID=container_1422600586708_0001_01_000017] is running beyond physical memory limits. Current usage: 1.1 GB of 1 GB physical memory used; 2.4 GB of 2.1 GB virtual memory used. Killing container.
Run Code Online (Sandbox Code Playgroud)
我正在使用 Cloudera Manager(免费版)。这些是我的配置:
yarn.app.mapreduce.am.resource.cpu-vcores = 1
ApplicationMaster Java Maximum Heap …Run Code Online (Sandbox Code Playgroud) hadoop ×4
mapreduce ×2
memory ×2
apache-spark ×1
cloudera-cdh ×1
hadoop-yarn ×1
java ×1
spark-graphx ×1
task ×1