Статьи

HDFS для пакетного слоя

HDFS для пакетного слоя

Натан Марц и Джеймс Уоррен, авторы  Big Data: принципы и лучшие практики масштабируемых систем данных реального времени

Требования высокого уровня для хранения данных в пакетном уровне Lambda Architecture просты. Фактически вы можете сопоставить эти требования с необходимым контрольным списком для решения по хранению. В этой статье авторы больших данных Натан Марц и Джеймс Уоррен проведут вас через решение для хранения на уровне пакетов, основанное на распределенной файловой системе Hadoop (HDFS), и объяснят, как оно соответствует их контрольному списку требований.

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

В этой статье вы узнаете, как хранить основной набор данных с помощью распределенной файловой системы Hadoop (HDFS). Мы начнем со вступительного взгляда на HDFS и завершим контрольным списком, который суммирует, как HDFS отвечает требованиям к хранилищу пакетного уровня.

Представляем HDFS

HDFS и Hadoop MapReduce — это две составляющие проекта Hadoop: инфраструктура Java для распределенного хранения и распределенной обработки больших объемов данных. Hadoop развернут на нескольких серверах, обычно называемых кластером, а HDFS — это распределенная и масштабируемая файловая система, которая управляет хранением данных в кластере. Hadoop — это проект большого размера и глубины, и в этой статье мы дадим только общее описание.

Кластер Hadoop имеет два типа узлов HDFS:

  • Несколько датододов
  • Единственный наменоде

Когда вы загружаете файл в HDFS, он проходит процесс, показанный на рисунке 1.

Рисунок 1 Файлы разбиты на блоки, которые рассредоточены по узлам данных в кластере.

Файл сначала разбивается на части (# 1) на блоки фиксированного размера, обычно от 64 МБ до 256 МБ. Каждый блок затем реплицируется по нескольким (обычно трем) датодам, которые выбираются случайным образом (# 2). Namenode (# 3) отслеживает отображение файла на блок и местоположение каждого блока.

Распределение файла по множеству узлов позволяет легко обрабатывать его параллельно, как показано на рисунке 2.

Рисунок 2 Namenode предоставляет клиентскому приложению расположение блоков распределенного файла, хранящегося в HDFS.

Когда программе требуется доступ к файлу, хранящемуся в HDFS, она связывается с namenode (# 1), чтобы определить, какие датододы содержат содержимое файла. Затем программа обращается к файлу (# 2) для обработки. При репликации каждого блока на несколько узлов ваши данные остаются доступными, даже когда отдельные узлы находятся в автономном режиме.

Начало работы с Hadoop

Настройка Hadoop может быть трудной задачей. Hadoop имеет множество параметров конфигурации, которые должны быть настроены для оптимальной работы вашего оборудования. Чтобы не зацикливаться на деталях, мы рекомендуем загрузить предварительно настроенную виртуальную машину для вашего первого знакомства с Hadoop. Виртуальная машина ускоряет изучение HDFS и MapReduce, и вы лучше разберетесь в настройке своего кластера. На момент написания этой статьи поставщики Hadoop Cloudera, Hortonworks и MapR сделали изображения общедоступными.

Реализация распределенной файловой системы является сложной задачей; эта статья охватывает основы с точки зрения пользователя. Давайте теперь рассмотрим, как хранить основной набор данных с использованием HDFS.

Хранение основного набора данных с HDFS

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

Чтобы добавить новые данные в набор данных, вы создаете и загружаете другой файл, содержащий новую информацию. Например, предположим, что вы хотите сохранить все логины на сервере. Ниже приведены примеры логинов:

$ cat logins-2012-10-25.txt 
alex     192.168.12.125    Thu Oct 25 22:33 - 22:46 (00:12) 
bob      192.168.8.251     Thu Oct 25 21:04 - 21:28 (00:24) 
charlie  192.168.12.82     Thu Oct 25 21:02 - 23:14 (02:12) 
doug     192.168.8.13      Thu Oct 25 20:30 - 21:03 (00:33) 
... 

Чтобы сохранить эти данные в HDFS, вы создаете каталог для набора данных и загружаете файл логинов (logins-2012-10-25.txt):

$ hadoop fs -mkdir /logins 
$ hadoop fs -put logins-2012-10-25.txt /logins

Команды hadoop fs — это команды оболочки Hadoop, которые напрямую взаимодействуют с HDFS. Полный список команд доступен по адресу http://hadoop.apache.org/. Во второй строке загрузка файла автоматически разбивается на части и распределяет блоки по датоделям. Вы можете перечислить содержимое каталога:

$ hadoop fs -ls -R /logins 
-rw-r--r--   3 hdfs hadoop  175802352 2012-10-26 01:38
    /logins/logins-2012-10-25.txt 

Команда ls основана на команде UNIX с тем же именем.

И вы можете проверить содержимое файла:

$ hadoop fs -cat /logins/logins-2012-10-25.txt 
alex     192.168.12.125   Thu Oct 25 22:33 - 22:46 (00:12)
bob      192.168.8.251    Thu Oct 25 21:04 - 21:28 (00:24)
...

Как показано на рисунке 1, файл был автоматически разделен на блоки и распределен по датоданным при его загрузке. Чтобы определить блоки и их расположение, используйте следующую команду, которая запускает утилиту проверки файловой системы HDFS:

$ hadoop fsck /logins/logins-2012-10-25.txt -files -blocks -locations 
/logins/logins-2012-10-25.txt 175802352 bytes, 2 block(s):                         #A
OK 
0. blk_-1821909382043065392_1523 len=134217728                                     #B
   repl=3 [10.100.0.249:50010, 10.100.1.4:50010, 10.100.0.252:50010] 
1. blk_2733341693279525583_1524 len=41584624 
   repl=3 [10.100.0.255:50010, 10.100.1.2:50010, 10.100.1.5:50010] 

#A Файл хранится в двух блоках #B IP-адреса и номера портов узлов данных, на которых размещается каждый блок

Вложенные папки обеспечивают простую реализацию вертикального разбиения. В этом примере файла логина вы можете разделить ваши данные по дате входа. Схема, показанная на рисунке 3, хранит информацию каждого дня в отдельной подпапке, так что функция может передавать данные, не относящиеся к ее вычислению.

Рисунок 3 Вертикальная схема разделения для данных входа в систему. Разделяя информацию для каждой даты в отдельной папке, функция может выбирать только папки, содержащие данные, относящиеся к ее вычислению.

Если вы новичок в HDFS, это платформа, которую стоит изучить по нескольким причинам: это проект с открытым исходным кодом с активным сообществом разработчиков; он тесно связан с Hadoop MapReduce, структурой распределенных вычислений; и он широко применяется и внедряется в производственных системах сотнями компаний.

Соответствие требованиям хранилища пакетного уровня с HDFS

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

Таблица 1 HDFS контрольный список требований к хранилищу

операции критерии обсуждение
пишет Эффективное добавление новых данных Добавление новых данных так же просто, как добавление нового файла в папку, содержащую основной набор данных.
Масштабируемое хранилище HDFS равномерно распределяет хранилище по кластеру машин. Вы увеличиваете объем памяти и пропускную способность ввода / вывода, добавляя больше машин.
читает Поддержка параллельной обработки HDFS интегрируется с Hadoop MapReduce, средой параллельных вычислений, которая может вычислять почти произвольные функции для данных, хранящихся в HDFS.
Возможность вертикального разделения данных Вертикальное разбиение осуществляется путем группировки данных в подпапках. Функция может читать только выбранный набор подпапок, необходимых для ее вычисления.
обе Перестраиваемые затраты на хранение / обработку Вы имеете полный контроль над тем, как вы храните свои блоки данных в файлах HDFS. Вы выбираете формат файла для ваших данных, а также уровень сжатия.

Помимо хранения вашего основного набора данных, HDFS также может помочь вам поддерживать его, в основном, с помощью двух операций:

  • Добавление новых файлов в папку основного набора данных
  • Консолидация данных для удаления небольших файлов

Эти операции должны быть пуленепробиваемыми, чтобы сохранить целостность и производительность пакетного слоя. См. Главу 3 «Большие данные» для обсуждения этих задач, а также потенциальных подводных камней.

Резюме

HDFS — это мощный инструмент для хранения ваших данных. В этой статье рассказывалось о том, как хранить основной набор данных с использованием HDFS, и объяснялось, как он соответствует требованиям к хранилищу для пакетного уровня.

Среди множества кандидатов, доступных для хранения основного набора данных, HDFS чаще всего выбирается из-за его интеграции с Hadoop MapReduce.

Вот некоторые другие названия Мэннинга, которые могут вас заинтересовать:

Hadoop в действии
Чак Лам

Свинья в действии
М. Тим Джонс

Связанные данные
Дэн МакКрири и Энн Келли

Сэкономьте 50% на  больших данных Руководстве программиста по Thrift и  Hadoop в действии  с промо-кодом dzwkd1 только на  manning.com . Срок действия предложения истекает в полночь 30 июля EST.