После начала передачи файлового потока узлу DataNode принимающий узел DataNode начинает автоматическую ретрансляцию файлового блока на другие узлы реплики. Окончание записи файлового блока фиксируется в журнале узла имён. Расположение следующих реплик (всё, что больше 3-х) определяется произвольным образом, а всё, что принимает значение по умолчанию --- в обязательном порядке располагается на разных узлах разных блоков. Помимо того, что NameNode должен обязательно зафиксировать завершение записи файла в блоки, также узел имён DataNode периодически, с определённым интервалом времени, принимает от узлов DataNode Heartbeat-сообщения. Если NameNode не получает от DataNode такое сообщение, то он фиксирует этот узел как неработоспособный и все данные, которые были на этом узле, реплицируются на другие узлы. В этом и заключается архитектура распределённой файловой системы HDFS и её принципы работы. Ограничения HDFS Узел имён NameNode, соответственно, является единой точкой отказа. На узле SecondaryNameNode отсутствует полноценная репликация. Ограничения: 1) отсутствие поддержки реляционных моделей данных; 2) отсутствие возможности дописывать или оставить открытыми для записи файлы в HDFS. NoSQL -> BigTable --- это высокопроизводительная база данных, построенная на основе Google File System (GFS) и Chubby Lock Service. Используется только в Google. GFS была разработана непосредственно Google для своих внутренних потребностей в 2000 г., реализация является коммерческой тайной. В 2003 г. опубликованы некоторые принципы работы. GFS --- это кластерная система, оптимизированная для центрального хранилища Google и поисковых нужд. Обладает повышенной защитой от сбоев. В этой кластерной системе вся информация также копируется и хранится в нескольких местах одновременно. Система способна быстро находить реплицированные копии. Файлы разбиваются на блоки предопределённого размера. Работа над BigTable была начата корпорацией Google в 2004 г. из-за того, что необходимо было создать хранилище, которое бы обладало высокой производительностью и масштабируемостью. Эта база данных на данный момент используется в различных приложениях Google, таких как MapReduce (используется для создания и модификации данных, которые хранятся в BigTable), Google Maps, Google Book Search, Google Code hosting, Youtube, Google Earth. Открытые реализации BigTable: 1. HBase (Java): добавляет такую же функциональность, как BigTable, но непосредственно в ядро Hadoop. 2. Hypertable: данная система предназначена для управления хранением данных и обработки информации в больших кластерах серверов. 3. Cloudata (Java): разработана корейским программистом. 4. Apache Accumulo: непосредственный клон BigTable, созданный в агентстве национальной безопасности США. 5. Apache Cassandra: СУБД, основанная на модели данных BigTable, распределённая система данных Facebook. 6. Project Voldemort: распредённая система данных, которая используется в LinkedIn. Модель данных BigTable Временные метки (TimeStamp) Семейство столбцов (Column Family) TSv1 TSv2 TSv3 TSv4 v v \ \ \ \ contents: .... \ \ \ +---------------------+ \ \ +--+-----------------------+--\-----+--------+--------+ \ ++--------+--------+---+ |\ \ | | | +-----------------------+---\---+-\--\---+--------+--------+ | | | v v | v v | | | en.computerra+--------+--------+--------+--------+--------+--------+ www | | | | | | | ^ +--------+--------+--------+--------+--------+--------+ | | | | | | | | | +--------+--------+--------+--------+--------+--------+ Ключевая строка (Key Row) BigTable --- это распределённая многомерная разреженная карта (distributed multi-dimensional sparse map). Основа --- строки (rows), стобцы (columns) и временные метки (timestamps). В базе поисковика именами строк могут служить адреса документов в Интернете, а столбцами --- особенности этого документа. В BigTable карты Google структурируются следующим образом: каждой строке соответствует один географический сегмент, а стобцами являются непосредственно изображения, из которых этот сегмент состоит. Если в нескольких столбцах хранятся данные одного типа, то такие столбцы, согласно модели данных BigTable, образуют семейство столбцов: ускоряется поиск, осуществляется сжатие. Семейство стобцов является единицей доступа к данным. Строки в BigTable: максимальный размер: 64 КБ. Операция обращения к строке является атомарной: пока одна программа обращается к строке, ни одна другая не имеет права изменять данные в Column Family. Временная метка (TimeStamp) учитывает изменение каждой копии данных, хранящихся в столбце. Временная метка присваивается каждой копии данных в стобце. В BigTable временной меткой служит шестидесятиразрядное число, которое может кодировать время и дату определённым образом (которым требуют клиентские программы). Можно осуществить самых последних по дате копий. Для предметной области любого сервиса Google можно создать собственную карту данных BigTable, которая содержит произвольное число строк и уникальный для этой предметной области набор семейства столбцов. Неизбежные повторы данных в стобцах упорядочиваются по временным меткам. Главное преимущество модели BigTable заключается в том, что базу такого рода можно разбить на независимые фрагменты и, соответственно, распределить по множеству серверов. Отсортированные по алфавиту строки делятся на диапазоны, которые именуются "таблетами" --- "несамостоятельными" таблицами. Вне зависимости от того, какой большой бы ни была таблица, её всегда можно разделить на таблеты, которые будут розданы разным обрабатывающим узлам. Процесс, который обслуживает таблеты, называется таблет-сервером. Для него не выделяют специальынй компьютер.