Я создал внешнюю таблицу улья, которая читает пользовательский формат ввода файла. Это прекрасно работает, когда файл небольшой. Но когда файлы большие, работа разбивает файлы, и моя работа завершается с ошибкой.Hive MapReduce job splitting up files
Я возвращаю false в свой собственный класс входного формата для метода IsSplittable. Я также попытался установить mapreduce.input.fileinputformat.split.minsize и mapred.min.split.size для больших значений. Я создал пользовательский InputFormat, OutputFormat и класс SerDe и использовал их при создании этой таблицы.
В моих журналах работы я все еще вижу разрывы.
Processing split: Paths:/user/test/testfile1:0+134217728,/user/test/testfile1:134217728+95198924,/user/test/testfile2:0+134217728,/user/test/testfile2:134217728+96092244...
134217728 - 128 МБ, который должен быть моим размером блока HDFS. Есть ли способ предотвратить этот раскол? Связано ли это с этим вопросом https://issues.apache.org/jira/browse/HIVE-8630?
Моя Создать таблицу заявление является:
CREATE EXTERNAL TABLE test_data(
key STRING,
body map<string, string>
)
PARTITIONED BY (year int, month int, day int)
ROW FORMAT SERDE 'com.hiveio.io.CustomHiveSerde'
STORED AS INPUTFORMAT 'com.hiveio.io.CustomHiveInputFormat'
OUTPUTFORMAT 'com.hiveio.io.CustomHiveOutputFormat'
LOCATION '/user/test/';
Не могли бы вы уточнить, что «моя работа не сработала» - это потому, что ваш разделитель записей не является обычным LF? И, кстати, вы пытались GZip файлы, чтобы сделать их неразделимыми? –
Работа завершается с ошибкой, так как мой входной файл не является разделяемым, а работа по сокращению карты заканчивается неудачей, так как мой входной формат начинает неправильно читать файлы и получает недопустимые данные для значений таблицы hive. Gzipping файлы работают, потому что файлы сжимаются до ~ 20 МБ. Меньшие файлы также распаковываются. Его когда размер файла большой, что работа терпит неудачу. Я не пробовал с файлом gzip> 128 мб. –
- это работа с картой/сокращением заданий на улей? Если это так, таблица также должна иметь объявленный формат ввода, или улей будет использоваться по умолчанию. Нам нужно больше деталей, чтобы ответить на ваш вопрос, в частности, какую работу вы выполняете и как. –