java在hadoop中使用mapreduce读取大文件

axkjgtzd  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(532)

我有一个从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 我该怎么读文件呢?

iq3niunx

iq3niunx1#

如果我没记错的话-你把整个文件都放到内存里。与hadoop无关-你不能在java上这样做,并且要确保你有足够的内存。
我建议定义一些合理的块并使其成为“记录”

wfypjpf4

wfypjpf42#

当map函数运行时,hadoop会在一个名为mapoutputbuffer的内存缓冲区中收集输出记录。
此内存缓冲区的总大小由io.sort.mb属性设置,默认为100 mb。
请尝试在mapred-site.xml中增加此属性值

相关问题