HDFS шифрует или сжимает данные во время хранения? - PullRequest
7 голосов
/ 19 сентября 2011

Когда я помещаю файл в HDFS, например

$ ./bin/hadoop/dfs -put /source/file input
  • Является ли файл сжатым во время хранения?
  • Зашифрован ли файл при хранении? Есть ли параметр конфигурации, который мы можем указать, чтобы изменить, зашифрован он или нет?

Ответы [ 2 ]

8 голосов
/ 19 сентября 2011

Там нет неявного сжатия в HDFS.Другими словами, если вы хотите, чтобы ваши данные были сжаты, вы должны записать их таким образом.Если вы планируете написание карты сокращений заданий для обработки сжатых данных, вам нужно использовать формат сжатия с разделением.

Hadoop может обрабатывать сжатые файлы, и вот хорошая статья об этом,Кроме того, промежуточный и окончательный выходные данные MR могут быть сжатыми .

. Имеется JIRA для 'Прозрачное сжатие в HDFS', но я не вижу многопрогресс в этом.

Я не думаю, что есть отдельный API для шифрования, хотя вы также можете использовать кодек сжатия для шифрования / дешифрования. Здесь - более подробная информация о шифровании и HDFS.

0 голосов
/ 19 сентября 2011

Я недавно установил сжатие в кластере. Другие посты имеют полезные ссылки, но фактический код, который вы хотите получить для работы LZO-сжатия, находится здесь: https://github.com/kevinweil/hadoop-lzo.

Вы можете прямо из коробки использовать сжатие GZIP, сжатие BZIP2 и сжатие Unix. Просто загрузите файл в одном из этих форматов. При использовании файла в качестве входных данных для задания вам нужно будет указать, что файл сжат, а также соответствующий кодек. Вот пример для сжатия LZO.

  -jobconf mapred.output.compress=true
  -jobconf mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec

Почему я продолжаю использовать сжатие LZO? Ссылка cloudera на статью от Praveen включает в себя это. Сжатие LZO является разделяемым сжатием (в отличие, например, от GZIP). Это означает, что один файл может быть разбит на куски для передачи картографу. Без разделяемого сжатого файла один маппер получит весь файл. Это может привести к тому, что у вас будет слишком мало картографов и слишком много данных будет передаваться по вашей сети.

BZIP2 также можно разделить. Он также имеет более высокую степень сжатия, чем LZO. Тем не менее, это очень медленно. У LZO степень сжатия хуже, чем у GZIP. Однако он оптимизирован, чтобы быть чрезвычайно быстрым Фактически это может даже повысить производительность вашей работы за счет минимизации дискового ввода-вывода.

Требуется немного усилий для настройки, и это немного трудновато, но оно того стоит (прозрачное шифрование было бы здорово). Еще раз, шаги:

  1. Установить LZO и LZOP (утилита командной строки)
  2. Установка hadoop-lzo
  3. Загрузить файл, сжатый с помощью LZOP.
  4. Индексируйте файл, как описано вики-хадом-lzo (индекс позволяет его разбивать).
  5. Запустите свою работу (с правильными параметрами mapred.output.compress и mapred.output.compression.code)
...