У меня есть большой файл gz размером около 120 ГБ. Я хочу запустить mapreduce на этом, но поскольку файл gz не является разделяемым, только один обработчик может обрабатывать этот файл сразу. Файл присутствует в hdf и локальном. Возможный вариант, о котором я думаю:Mapreduce on large gz file
1) Декомпрессируйте этот gz-файл и сохраните его в hdfs: во-первых, потребуется много времени для распаковки файла и для декомпрессии данных в hdf. Также я не могу распаковать файл непосредственно в hdfs, так как hdfs не имеет команды zcat или gunzip. Поэтому я должен сделать zcat a.gz | hdfs dfs put - /path/in/hdfs
. Также это займет столько места в hdfs (примерно в 4 раза больше, чем в gz)
2) разделить файл в небольшом файле (около 1 ГБ каждый) и обработать на них: лучший вариант, но, к сожалению, не работает. Я разделив большой файл на небольшие файлы с помощью разделения команды (также попытался кошки a.gz | голова -n), но когда я бегу картографа на них я получаю ошибку
Error: java.io.EOFException: Unexpected end of input stream
at org.apache.hadoop.io.compress.DecompressorStream.decompress(DecompressorStream.java:145)
at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:85)
at java.io.InputStream.read(InputStream.java:101)
at org.apache.hadoop.util.LineReader.fillBuffer(LineReader.java:180)
at org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:216)
at org.apache.hadoop.util.LineReader.readLine(LineReader.java:174)
at org.apache.hadoop.mapreduce.lib.input.LineRecordReader.nextKeyValue(LineRecordReader.java:185)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:553)
at org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80)
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.java:91)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:784)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1642)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)
3) разархивировать файл и затем снова сжимайте в bzip2: это займет много времени.
Пожалуйста, предложите мне любую другую идею для достижения этой цели или изменить любой из этих трех методов, чтобы получить успех (я предпочитаю 2-й способ: P)