RCFile (файл столбцов записи) - это структура размещения данных, которая определяет, как хранить реляционные таблицы в компьютерных кластерах . Он разработан для систем, использующих платформу MapReduce . Структура RCFile включает в себя формат хранения данных, подход к сжатию данных и методы оптимизации для чтения данных. Он способен удовлетворить все четыре требования к размещению данных: (1) быстрая загрузка данных, (2) быстрая обработка запросов, (3) высокоэффективное использование дискового пространства и (4) высокая адаптивность к динамическим шаблонам доступа к данным.
RCFile - результат исследований и совместных усилий Facebook , Государственного университета Огайо и Института вычислительных технологий Китайской академии наук .
Резюме
Формат хранения данных
Например, таблица в базе данных состоит из 4 столбцов (от c1 до c4):
c1 | c2 | c3 | c4 |
---|---|---|---|
11 | 12 | 13 | 14 |
21 год | 22 | 23 | 24 |
31 год | 32 | 33 | 34 |
41 год | 42 | 43 год | 44 год |
51 | 52 | 53 | 54 |
Чтобы сериализовать таблицу, RCFile разбивает эту таблицу сначала по горизонтали, а затем по вертикали, вместо того, чтобы разделять таблицу только по горизонтали, как в СУБД, ориентированной на строки (хранилище строк). Горизонтальное разбиение сначала разделит таблицу на несколько групп строк на основе размера группы строк, который является значением, определяемым пользователем, определяющим размер каждой группы строк. Например, указанная выше таблица может быть разделена на две группы строк, если пользователь указывает три строки в качестве размера каждой группы строк.
c1 | c2 | c3 | c4 |
---|---|---|---|
11 | 12 | 13 | 14 |
21 год | 22 | 23 | 24 |
31 год | 32 | 33 | 34 |
c1 | c2 | c3 | c4 |
---|---|---|---|
41 год | 42 | 43 год | 44 год |
51 | 52 | 53 | 54 |
Затем в каждой группе строк RCFile разделяет данные вертикально, как хранилище столбцов. Таким образом, таблица будет сериализована как:
Группа строк 1 Группа строк 2 11, 21, 31; 41, 51; 12, 22, 32; 42, 52; 13, 23, 33; 43, 53; 14, 24, 34; 44, 54;
Сжатие данных столбца
В каждой группе строк столбцы сжимаются, чтобы уменьшить использование дискового пространства. Поскольку данные столбца хранятся рядом, структура столбца может быть обнаружена, и, таким образом, подходящий алгоритм сжатия может быть выбран для высокой степени сжатия.
Преимущества производительности
Хранилище столбцов более эффективно, когда для запроса требуется только подмножество столбцов, поскольку хранилище столбцов считывает только необходимые столбцы с дисков, а хранилище строк будет читать всю строку.
RCFile сочетает в себе достоинства хранения строк и столбцов с помощью горизонтально-вертикального разделения. При горизонтальном разбиении RCFile помещает все столбцы строки на одну машину и, таким образом, может устранить дополнительные сетевые затраты при построении строки. При вертикальном разделении для запроса RCFile будет читать только необходимые столбцы с дисков и, таким образом, может устранить ненужные затраты на локальный ввод-вывод. Более того, в каждой группе строк сжатие данных может быть выполнено с использованием алгоритмов сжатия, используемых в хранилище столбцов .
Например, в базе данных может быть такая таблица:
EmpId | Фамилия | Имя | Оплата труда |
---|---|---|---|
10 | Смит | Джо | 40000 |
12 | Джонс | Мэри | 50000 |
11 | Джонсон | Кэти | 44000 |
22 | Джонс | Боб | 55000 |
Эта простая таблица включает идентификатор сотрудника (EmpId), поля имени (Фамилия и Имя) и зарплату (Salary). Этот двумерный формат существует только в теории, на практике оборудование хранения требует, чтобы данные были сериализованы в ту или иную форму.
В системах на основе MapReduce данные обычно хранятся в распределенной системе, такой как распределенная файловая система Hadoop (HDFS) , и разные блоки данных могут храниться на разных машинах. Таким образом, для хранилища столбцов в MapReduce разные группы столбцов могут храниться на разных машинах, что приводит к дополнительным сетевым затратам, когда запрос проецирует столбцы, размещенные на разных машинах. Для систем на основе MapReduce достоинством хранилища строк является отсутствие дополнительных сетевых затрат на построение строки при обработке запросов, а достоинством хранилища столбцов является отсутствие ненужных затрат локального ввода-вывода при чтении данных из диски.
Рядно-ориентированные системы
Обычное решение проблемы с хранением - сериализация каждой строки данных, как это;
001: 10, Смит, Джо, 40000; 002: 12, Джонс, Мэри, 50000; 003: 11, Джонсон, Кэти, 44000; 004: 22, Джонс, Боб, 55000;
Системы на основе строк предназначены для эффективного возврата данных для всей строки или всей записи за минимально возможное количество операций. Это соответствует вариантам использования, когда система пытается получить всю информацию об определенном объекте, например, полную информацию об одном контакте в системе rolodex или полную информацию об одном продукте в системе онлайн-покупок.
Системы на основе строк неэффективны при выполнении операций, которые применяются ко всему набору данных, в отличие от конкретной записи. Например, чтобы найти все записи в таблице примера с зарплатой от 40 000 до 50 000, строковая система должна будет перебирать весь набор данных в поисках совпадающих записей. В то время как примерная таблица, показанная выше, может уместиться в одном блоке диска, таблица даже с несколькими сотнями строк не будет, поэтому для извлечения данных потребуется несколько дисковых операций.
Колонно-ориентированные системы
Система, ориентированная на столбцы, сериализует все значения столбца вместе, а затем значения следующего столбца. В нашем примере таблицы данные будут храниться таким образом;
10: 001,12: 002,11: 003,22: 004; Смит: 001, Джонс: 002, Джонсон: 003, Джонс: 004; Джо: 001, Мэри: 002, Кэти: 003, Боб: 004; 40000: 001,50000: 002,44000: 003,55000: 004;
Разницу можно более отчетливо увидеть в этой распространенной модификации:
...; Смит: 001, Джонс: 002 004, Джонсон: 003; ...
Две записи хранят одно и то же значение, «Джонс», поэтому теперь можно сохранить его в системе, ориентированной на столбцы, только один раз вместо двух. Для многих распространенных запросов, таких как «найти всех людей с фамилией Джонс», ответ теперь можно получить за одну операцию.
Будет ли система, ориентированная на столбцы, более эффективной в работе, во многом зависит от автоматизируемых операций. Операции по извлечению данных для объектов будут медленнее, требуя многочисленных дисковых операций для сборки данных из разных столбцов для создания записи целой строки. Однако такие операции с целой строкой обычно редки. В большинстве случаев извлекается только ограниченный набор данных. В приложении rolodex, например, операции по сбору имен и фамилий из многих строк для построения списка контактов гораздо более распространены, чем операции чтения данных для домашнего адреса.
Принятие
RCFile был принят в реальных системах для анализа больших данных.
- RCFile стал структурой размещения данных по умолчанию в производственном кластере Hadoop Facebook. [1] К 2010 году это был крупнейший в мире кластер Hadoop [2], куда каждый день добавлялось 40 терабайт сжатых наборов данных. [3] Кроме того, все наборы данных, хранящиеся в HDFS до RCFile, также были преобразованы для использования RCFile. [1]
- RCFile был принят в Apache Hive (начиная с v0.4) [4], который представляет собой систему хранения данных с открытым исходным кодом, работающую поверх Hadoop и широко используемую в различных компаниях по всему миру [5], включая несколько Интернет-сервисов, таких как Facebook , Taobao и Netflix . [6]
- RCFile был принят в Apache Pig (начиная с v0.7) [7], который представляет собой еще одну систему обработки данных с открытым исходным кодом, широко используемую во многих организациях [8], включая нескольких крупных поставщиков веб-услуг, таких как Twitter , Yahoo , LinkedIn , AOL и Salesforce.com .
- RCFile стал де-факто стандартной структурой хранения данных в программной среде Hadoop, поддерживаемой проектом Apache HCatalog (ранее известным как Howl [9] ), который представляет собой службу управления таблицами и хранилищем для Hadoop. [10] RCFile поддерживается библиотекой Elephant Bird с открытым исходным кодом, используемой в Twitter для ежедневного анализа данных. [11]
В последующие годы стали популярными и другие форматы данных Hadoop. В феврале 2013 года Hortonworks анонсировала формат файла Optimized Row Columnar (ORC) . [12] Через месяц был анонсирован формат Apache Parquet , разработанный Cloudera и Twitter . [13]
Смотрите также
Рекомендации
- ^ a b «Интеграция Hive: HBase и Rcfile__HadoopSummit2010» . 2010-06-30.
- ^ «У Facebook самый большой в мире кластер Hadoop!» . 2010-05-09.
- ^ «Доклад на саммите Apache Hadoop в Индии 2011« Эволюция улья »Намита Джайна» . 2011-02-24.
- ^ «Класс RCFile» . Архивировано из оригинала на 2011-11-23 . Проверено 21 июля 2012 .
- ^ «PoweredBy - Apache Hive - Фонд программного обеспечения Apache» .
- ^ «Презентация группы пользователей Hive от Netflix (18.03.2010)» . 2010-03-19.
- ^ "HiveRCInputFormat (Pig 0.17.0 API)" .
- ^ «PoweredBy - Apache Pig - Фонд программного обеспечения Apache» .
- ^ Вой
- ^ "HCatalog" . Архивировано из оригинала на 2012-07-20 . Проверено 21 июля 2012 .
- ^ «Коллекция Твиттера кодов Hadoop, Pig, Hive и HBase, связанных с LZO и Protocol Buffer: Kevinweil / elephant-bird» . 2018-12-15.
- ^ Алан Гейтс (20 февраля 2013 г.). «Инициатива Stinger: сделать Apache Hive в 100 раз быстрее» . Блог Hortonworks . Проверено 4 мая 2017 года .
- ^ Джастин Кестелин (13 марта 2013 г.). «Знакомство с Parquet: эффективное столбцовое хранилище для Apache Hadoop» . Блог Cloudera . Проверено 4 мая 2017 года .
Внешние ссылки
- RCFile на веб-сайте Apache Software Foundation
- Исходный код
- Сайт улья
- Страница улья в Hadoop Wiki