Изучение хранилища файлов
Возможность хранить данные в файлах является основным элементом любой вычислительной системы. Файлы могут храниться в локальных файловых системах на жестком диске личного компьютера, а также на съемных носителях, таких как USB-накопители, но в большинстве организаций важные файлы данных хранятся централизованно в какой-либо разновидности общей системы хранения файлов. Все чаще это центральное место хранения размещается в облаке, обеспечивая экономичное, безопасное и надежное хранение больших объемов данных.
Формат файла, используемый для хранения данных, зависит от ряда факторов, в том числе следующих:
- типа сохраняемых данных (структурированных, частично структурированных или неструктурированных);
- приложений и служб, которым потребуется чтение, запись и обработка данных;
- необходимости удобочитаемости файлов данных для людей или оптимизации для эффективного хранения и обработки.
Ниже рассматриваются некоторые распространенные форматы файлов.
Текстовые файлы с разделителями
Данные часто хранятся в формате обычного текста с определенными разделителями полей и признаками конца строки. Самым распространенным форматом для данных с разделителями является CSV (comma-separated values — данные с разделителями-запятыми), в котором поля разделяются запятыми, а строки заканчиваются символом возврата каретки или новой строки. При необходимости в первой строке могут содержаться имена полей. Другие распространенные форматы — TSV (tab-separated values — значения с разделением знаками табуляции), формат с разделителями-пробелами (в котором для разделения полей используются знаки табуляции или пробелы) и формат с данными фиксированной ширины (в котором на каждое поле выделяется фиксированное число символов). Текст с разделителями — хороший вариант для структурированных данных, которые должны быть доступны широкому спектру приложений и служб в удобном для восприятия человеком формате.
В следующем примере показаны данные клиента в формате с разделителями-запятыми:
FirstName,LastName,Email
Joe,Jones,joe@litware.com
Samir,Nadoy,samir@northwind.com
Нотация объектов JavaScript (JSON)
JSON — это распространенный формат, в котором иерархическая схема документа используется для определения сущностей данных (объектов), имеющих несколько атрибутов. Каждый атрибут может быть объектом (или коллекцией объектов); таким образом, JSON является гибким форматом, который хорошо подходит как для структурированных, так и для частично структурированных данных.
В следующем примере показан документ JSON, содержащий коллекцию клиентов. У каждого клиента имеется три атрибута (firstName, lastName и contact), и атрибут contact содержит коллекцию объектов, представляющих один или несколько способов связи (электронная почта или телефон). Обратите внимание, что объекты заключаются в фигурные скобки ({..}), а коллекции — в квадратные ([..]). Атрибуты представлены по имени: пары значений и разделены запятыми (,).
{
"customers":
[
{
"firstName": "Joe",
"lastName": "Jones",
"contact":
[
{
"type": "home",
"number": "555 123-1234"
},
{
"type": "email",
"address": "joe@litware.com"
}
]
},
{
"firstName": "Samir",
"lastName": "Nadoy",
"contact":
[
{
"type": "email",
"address": "samir@northwind.com"
}
]
}
]
}
Расширяемый язык разметки (XML)
XML — это удобный для восприятия человеком формат данных, который был популярным в 1990-х и 2000-х годах. Он в значительной степени был вытеснен менее подробным форматом JSON, но все еще существуют некоторые системы, использующие XML для представления данных. В XML для определения элементов и атрибутов используются теги, заключенные в угловые скобки (<../>), как показано в следующем примере:
<Customers>
<Customer name="Joe" lastName="Jones">
<ContactDetails>
<Contact type="home" number="555 123-1234"/>
<Contact type="email" address="joe@litware.com"/>
</ContactDetails>
</Customer>
<Customer name="Samir" lastName="Nadoy">
<ContactDetails>
<Contact type="email" address="samir@northwind.com"/>
</ContactDetails>
</Customer>
</Customers>
Большой двоичный объект (BLOB-объект)
В конечном счете все файлы хранятся в виде двоичных данных (1 и 0), но в рассмотренных выше удобочитаемых форматах байты двоичных данных сопоставляются с печатными символами (обычно через схему кодировки символов, такую как ASCII или Unicode). Однако некоторые форматы файлов, особенно предназначенные для неструктурированных данных, хранят данные в виде необработанных двоичных файлов, которые должны интерпретироваться приложениями и преобразовываться для просмотра. Общие типы данных, хранящихся в виде двоичных файлов, включают изображения, видео, аудио и документы, относящиеся к конкретному приложению.
При работе с подобными данными специалисты по обработке данных часто обращаются к файлам данных как к BLOB-объектам (большим двоичным объектам).
Оптимизированные форматы файлов
Хотя удобные для восприятия человеком форматы структурированных и частично структурированных данных могут быть полезными, обычно они не подлежат оптимизации для хранения или обработки. Со временем были разработаны некоторые специализированные форматы файлов, обеспечивающие сжатие, индексирование и эффективное хранение и обработку.
Распространенные оптимизированные форматы файлов, с которыми вы могли встречаться, включают Avro, ORCи Parquet.
Avro — это формат на основе записей. Он был создан Apache. Каждая запись содержит заголовок, описывающий структуру данных в ней. Этот заголовок хранится в формате JSON. Данные хранятся в двоичном виде. Приложение использует сведения из заголовка для анализа двоичных данных и извлечения содержащихся в них полей. Avro — подходящий формат для сжатия данных и минимизации требований к объему хранилища и пропускной способности сети.
Формат ORC (Optimized Row Columnar) упорядочивает данные по столбцам, а не строкам. Он был разработан HortonWorks для оптимизации операций чтения и записи в Apache Hive (Hive — это система хранилища данных, которая поддерживает быстрое формирование сводных данных и запросы к большим наборам данных). Файл ORC содержит полосы данных. Каждая полоса содержит данные для столбца или набора столбцов. Полоса содержит индекс для ее строк, данные для каждой строки и нижний колонтитул со статистическими данными (count, sum, max, min и т. п.) для каждого столбца.
Parquet — это еще один формат столбчатых данных. Она была создана Cloudera и X. Файл Parquet содержит группы строк. Данные для каждого столбца хранятся вместе в одной группе записей. Каждая группа строк содержит один или несколько фрагментов данных. Файл Parquet включает в себя метаданные, описывающие набор строк, который находится в каждом фрагменте. Приложение может использовать эти метаданные, чтобы быстро найти подходящий фрагмент для заданного набора строк и получить данные в указанных столбцах для этих строк. Parquet специализируется на эффективном хранении и эффективной обработке вложенных типов данных. Он поддерживает крайне эффективные схемы сжатия и кодирования.