Как использовать потоковую передачу Hadoop с LZO-сжатыми файлами последовательностей? - PullRequest
5 голосов
/ 21 февраля 2011

Я пытаюсь поиграть с набором данных Google Ngrams, используя Amazon Elastic Map Reduce.Есть общедоступный набор данных по http://aws.amazon.com/datasets/8172056142375670,, и я хочу использовать потоковую передачу Hadoop.

Для входных файлов он говорит: «Мы храним наборы данных в одном объекте в Amazon S3. Файл находится в последовательностиФормат файла со сжатием LZO на уровне блоков. Ключ файла последовательности - это номер строки набора данных, сохраненного как LongWritable, а значение - необработанные данные, сохраненные как TextWritable. "

Что мне нужно сделать, чтобыобрабатывать эти входные файлы с помощью потоковой передачи Hadoop?

Я попытался добавить дополнительный аргумент "-inputformat SequenceFileAsTextInputFormat" к моим аргументам, но, похоже, это не работает - мои задания продолжают работать по какой-то неуказанной причине.Есть ли другие аргументы, которые я пропускаю?

Я пытался использовать очень простую идентификацию в качестве и моего картографа, и редуктора

#!/usr/bin/env ruby

STDIN.each do |line|
  puts line
end

, но это не работает.

Ответы [ 4 ]

6 голосов
/ 16 июня 2011

lzo упакован как часть упругой карты, поэтому нет необходимости устанавливать что-либо.

Я только что попробовал это, и это работает ...

 hadoop jar ~hadoop/contrib/streaming/hadoop-streaming.jar \
  -D mapred.reduce.tasks=0 \
  -input s3n://datasets.elasticmapreduce/ngrams/books/20090715/eng-all/1gram/ \
  -inputformat SequenceFileAsTextInputFormat \
  -output test_output \
  -mapper org.apache.hadoop.mapred.lib.IdentityMapper
3 голосов
/ 24 февраля 2011

Сжатие Lzo было удалено из Hadoop 0.20.x из-за проблем с лицензированием.Если вы хотите обрабатывать файлы lzo-сжатых последовательностей, необходимо установить и настроить собственные библиотеки lzo в кластере hadoop.

Проект Кевина Hadoop-lzo является текущим рабочим решением, о котором я знаю.Я попробовал это.Это работает.

Установите (если это еще не сделано) пакеты lzo-devel на ОС.Эти пакеты включают сжатие lzo на уровне операционной системы, без которого не будет работать сжатие lzo hadoop.

Следуйте инструкциям, указанным в readme-файле hadoop-lzo, и скомпилируйте его.После сборки вы получите нативные библиотеки hadoop-lzo-lib jar и hadoop lzo.Убедитесь, что вы скомпилировали его с компьютера (или компьютера с той же аркой), на котором сконфигурирован ваш кластер.

Требуются также стандартные нативные библиотеки Hadoop, которые были предоставлены в дистрибутиве по умолчанию для linux.Если вы используете Solaris, вам также потребуется собрать hadoop из исходного порядка, чтобы получить стандартные нативные библиотеки hadoop.

Перезапустите кластер после внесения всех изменений.

1 голос
/ 21 февраля 2011

Вы можете посмотреть на это https://github.com/kevinweil/hadoop-lzo

0 голосов
/ 04 декабря 2012

У меня странные результаты с использованием lzo, и моя проблема решается с помощью другого кодека

-D mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec
-D mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec

Тогда все просто работает.Вам не нужно (а может и не нужно) менять -inputformat.

Version: 0.20.2-cdh3u4, 214dd731e3bdb687cb55988d3f47dd9e248c5690
...