我的问题是这样的:首先,我使用hadoop和一个单节点配置来开发应用程序,我只做了一个map函数,在这个map函数中,我调用了大约10个函数,应用程序从csv中读取数据。 首先,我使用hadoop和单节点配置来开发一个应用程序,我只做了一个map函数,在这个map函数中,我调用了10个函数,应用程序从csv文件中读取并处理某个列。我已经做了jar文件和所有的东西,所以当我在windows(windows 7)(使用cygwin)的4GB内存的机器上运行这个有4000行的csv的应用程序时,这个应用程序工作得很好,但是当我在linux-ubuntu的2GB内存的机器上运行它时,它处理了一些行,然后它抛出了一个 "Java堆空间 "的错误,或者有时线程被杀死。
对于linux:我已经尝试改变hadoop导出HEAP_SIZE和Xmx和Xms参数的应用程序,它有一些区别,但不是太多,错误仍然发生......
你知道为什么会发生这种情况吗?因为机器之间的4GB和2GB内存的差异?
我在mapper中遇到的一个问题是,如果你调用使用函数objects,从内部启动自己的线程,就会出现 map
函数,这可以很容易地创建足够的线程来使用该JVM的所有堆空间。setup
和 cleanup
函数调用一次。在我的情况下,我能够处理并将其放入一个叫做 ArrayList
所有的数据,然后再对我需要的数据进行额外的处理。cleanup
职能。