Я пытаюсь прочитать байты из файла последовательности с определенным ключом в списке.Когда я вызываю метод getCurrentValue, я получаю OutOfMemoryError: размер запрашиваемого массива превышает ограничение виртуальной машины.Что мне нужно, чтобы прочитать все байты этого ключа.
Я пытался изменить емкость BytesWritable buf до 1 ГБ, но это не помогло.
public List<byte[]> read(String path, String key) {
Path hdfsPath = new Path(path);
List<byte[]> fileBytes = new ArrayList<>(1);
Text keyBuf = new Text();
try (SequenceFile.Reader in = new SequenceFile.Reader(connectionConfig, SequenceFile.Reader.file(hdfsPath))) {
while (in.next(keyBuf)) {
if (keyBuf.toString().equals(key)) {
BytesWritable buf = new BytesWritable();
in.getCurrentValue(buf); //here throw exception
fileBytes.add(buf.getBytes());
}
}
} catch (IOException e) {
throw new HdfsException("When read file, path=" + path + " key=" + keyBuf, e);
}
return fileBytes;
}
Исключение:
java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at org.apache.hadoop.io.BytesWritable.setCapacity(BytesWritable.java:146)
at org.apache.hadoop.io.BytesWritable.setSize(BytesWritable.java:125)
at org.apache.hadoop.io.BytesWritable.readFields(BytesWritable.java:181)
at org.apache.hadoop.io.SequenceFile$Reader.getCurrentValue(SequenceFile.java:2308)
at ...