Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在hadoop中使用mapreduce读取大文件_Java_Hadoop_Mapreduce_Elastic Map Reduce_Amazon Emr - Fatal编程技术网

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

Java 在hadoop中使用mapreduce读取大文件,java,hadoop,mapreduce,elastic-map-reduce,amazon-emr,Java,Hadoop,Mapreduce,Elastic Map Reduce,Amazon Emr,我有一个从FTP服务器读取文件并将其写入HDFS的代码。我实现了一个定制的InputFormatReader,它将输入的isSplitable属性设置为false。但是,这会导致以下错误 INFO mapred.MapTask: Record too large for in-memory buffer 我用来读取数据的代码是 Path file = fileSplit.getPath(); FileSystem fs = file.getFileSystem(

我有一个从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堆空间错误
而不拆分输入文件?或者,如果我使
isSplitable
为true
如何读取文件?

当Map函数运行时,hadoop会在名为MapOutputBuffer的内存缓冲区中收集输出记录。

此内存缓冲区的总大小由io.sort.mb属性设置,默认为100 mb


如果我没有弄错,请尝试在mapred site.xml中增加此属性值-将整个文件加载到内存中。与hadoop无关-您不能在Java上这样做,并且必须确保您有足够的内存

我建议定义一些合理的块并使其成为“记录”

不起作用。。我尝试通过我的代码使用'conf.set'设置它。。它确实将该值设置为我指定的值,但仍会遇到堆空间错误。不起作用。。我尝试通过我的代码使用'conf.set'设置它。。它确实将该值设置为我指定的值,但是它仍然会运行到堆空间错误中,我知道您在说什么。我甚至试着编码它。但我开始在关闭从源读取的输入流时遇到问题。每次将一个输入块作为记录读写到映射器中时,都不可能返回读取剩余的。我将读取1024个数据块,并将其设置为记录的值<代码>while(totalBytesOk。。在某种程度上把事情弄得一团糟。然而,我遇到了一个新问题。。请在这里找到: