我对亚马逊网络服务上的弹性 mapreduce 有疑问。你们中是否有人能够设置以下环境参数:
mapreduce.map/reduce.java.opts
问题是当我检查映射器和减速器的虚拟机中的堆大小时,最大堆大小不受设置这些影响。我通过在我的 map/reduce 代码中添加以下几行来检查堆大小:
runtime = Runtime.getRuntime();
System.out.println(runtime.maxMemory());
我使用带有以下参数的命令行界面设置它们:
-bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hadoop --args "-m,mapreduce.map.java.opts=-Xmx1000m,-m,mapreduce.reduce.java.opts=-Xmx3000m"
我检查了 Amazon EMR 上的 hadoop 版本如下:1.0.3(我检查了 Tom White 的参考书,它说应该从 hadoop 0.21 开始支持这些。)
虽然可以设置子进程的 VM 设置(=mapper 和 reducer 相同 -> mapred.child.java.opts),但这对于我的算法非常不方便,因为 reducer 必须存储一个大的 hashmap 而映射器没有任何故事。
可能与这个问题有关:如果您设置了不受支持的环境变量,是否有可能收到警告。当我设置上述变量时,它们可以被访问,但它们显然不被使用/支持。(configuration.get(...)
返回我设置的值)