使用4台Linux虚拟机搭建Hadoop HA集群后运行自行编写的轨迹数据处理程序时出现以下错误(原始文件1.3GB),该程序在本机Java环境下可正常运行。控制台提示错误如下,显然每个Task需要使用的虚拟内存值超过了yarn默认Container的最大内存值,导致container被Kill,程序运行中断。
解决方案:
思路一:在Container容量不变的情况下,降低每个Task的数据量,使之不再溢出
Task的数据量必须大于HDFS中数据块的大小,Hadoop 3.x.x版本默认每个Block块的大小为128MB,若需要降低Block的大小,需在hdfs-site.xml配置文件中添加以下内容,其中xxx是每个块的字节数,例如128MB对应的数值为1024*1024*128=134217728,修改至合适的数值后重启HA集群。
<property>
<name>dfs.blocksize</name>
<value>xxx</value>
</property>
思路二:扩大Container虚拟内存的容量,使之不再溢出
具体设置原理可参阅https://blog.csdn.net/u010226454/article/details/80907088