我有一个从ftp服务器读取文件并将其写入 HDFS
. 我实施了一个定制的 InputFormatReader
这就决定了 isSplitable
输入的属性为 false
。但是这给了我以下错误。
INFO mapred.MapTask: Record too large for in-memory buffer
我用来读取数据的代码是
Path file = fileSplit.getPath();
FileSystem fs = file.getFileSystem(conf);
FSDataInputStream in = null;
try {
in = fs.open(file);
IOUtils.readFully(in, contents, 0, contents.length);
value.set(contents, 0, contents.length);
}
有什么办法避免吗 java heap space error
不拆分输入文件?或者万一我
isSplitable true
我该怎么读文件呢?
2条答案
按热度按时间iq3niunx1#
如果我没记错的话-你把整个文件都放到内存里。与hadoop无关-你不能在java上这样做,并且要确保你有足够的内存。
我建议定义一些合理的块并使其成为“记录”
wfypjpf42#
当map函数运行时,hadoop会在一个名为mapoutputbuffer的内存缓冲区中收集输出记录。
此内存缓冲区的总大小由io.sort.mb属性设置,默认为100 mb。
请尝试在mapred-site.xml中增加此属性值