Заметки к лекциям распределённые системы (2014) (1162754), страница 3
Текст из файла (страница 3)
xFS – всё работает базируясь только на клиентах, без серверов
SFS – secure
GFS
HDFS – hadoop
Атрибуты файла:
CHANGE
TYPE
FS_LOCATIONS – это атрибут, с помощью которого можно задать имена машин, на которых хранится копия этого файла
ACL (Access Control List) – обеспечивает контроль доступа к файлам (наличие этого атрибута не обязательно, его может и не быть)
Тут есть расширенный набор операций
-
Append
-
List_dir
-
Read_acl
И расширенный набор пользователей
-
Owner
-
Group
-
Anonymous
-
Batch – скрипт запущенный самим пользователем
-
network
RPC – модель удалённого доступа – сервер отвечает на наши запросы к файлу (при этом весь файл не выкачивается)
Другой подход – когда сначала выкачивается весь файл, а уже потом пользователь с ним работает
При работе с файлом очень важно кеширование.
Можно к файловой системе достучаться 2 разными способами:
-
/Server1/DuK1/file1
-
Монтирование другой файловой системы (не всей, там тоже можно монтировать только кусочек – выбрать нужный каталог) в какой-то из каталогов своей файловой системы
Обычно монтирование происходит при обращении к нужному каталогу, т.е. по умолчанию не монтируются сразу все каталоги всех пользователей при запуске системы.
-
Единая файловая система (AFS) – суть в том, что на всех машинах был корневой каталог afs, а потом шли каталоги кафедр, факультетов, …, т.е. придя на каждую машину – мы видим всю иерархию, хотя данные распределены
Именование файлов:
Обычно большинство систем использует двойное именование – это символьное имя для человека, и дескриптор, который ставится в соответствие имени этого файла, с которым файловая система и работает.
Таким образом, дескриптор в распределённой файловой система должен идентифицировать единственным образом файл во всей сети, а не только на локальном компьютере (потому нужно хранить, например, ip-адрес).
NFS3 – сервер без состояния
NFS4 – сервер с состоянием (т.е. тут хранится информация о клиенте) (оптимизирует в случае наличия большого количества клиентов)
В NFS3 есть команда lookup, возвращающая дескриптор
В NFS4 есть команда open – которая возвращает дескриптор, и открывает файл, и запоминает немного о пользователе, а в конце нужно сделать close
Иногда могут возвращаться несколько дескрипторов (например, если у нас есть несколько копий файла), то тогда можно будет читать поочерёдно у этих серверов.
Способов доступа для нескольких пользователей к одному файлу – несколько:
-
Механизм транзакций – каждое обращение к файлу оформляется в виде транзакций, и всё, что внутри транзакции – будет как в базе данных – подвергнуто ACID (неделимость, выполнимость полностью или никак, …)
Очень часто мы читаем весь файл, рандомный доступ бывает редко, а поэтому можно пытаться выполнять на сервере упреждающее чтение и грузить файл с жёсткого диска в память.
При выполнении операции open в NFS4
-
Сообщения могут быть короче и не содержать в себе ту кучу системных данных, делающих в NFS3 запрос самодостаточным
-
Проще убедиться в достоверности запроса
-
Если сервер перегружен, и не успевает отвечать на клиентов, то тогда он может собрать запросы от одного клиента в кучку и разбираться с ними по частям, что хорошо
Если клиент ждал и уже успел послать повторный запрос, то сервер может уже знать, что этому клиенту он уже отправил данные, и ему больше не нужно
А если запрос потерялся и от клиента пришёл повторный вопрос, то наш ответ можно попытаться взять из кеша
-
Возможна операция захвата
-
Эффективность выше (В NFS4 некоторые запросы можно обрабатывать локально, но для этого нужно помнить, кому и какие права были даны)
Существуют различные блокировки на время (хахват файла):
Lock
Lockt
Renew
Если пользователь по истечении времени не сделал renew, то блокировка будет снята
Предположим, что сервер упал, и потерял текущие блокировки, поэтому серверу нужно как-то восстановить состояние, поэтому есть некоторое время амнистии, когда сервер принимает только команды renew (период должен быть дольше, чем квант времени для монопольной работы с файлом)
Благодаря этим renew – сервер узнаёт, кто сейчас пишет в файл
У NFS3 – нету ограничения памяти для таблиц, и можно запустить любое количество пользователей, нету open и close, устойчив к ошибкам
Лекция 8
Рассмотрим механизм кеширования и размножения файлов
Места хранения файла:
Оперативная память клиента и сервера, и жёсткие диски клиента и сервера
-
Нужно отправить запрос от клиента к серверу
-
Сервер должен после этого обработать файл, он разобьёт его на части и потом сделает самую дорогую операцию – переместит головку (скорость самого чтения – сотни гигов в секунду)
-
…
Кешировать можно:
-
Дескриптор файла
Есть следующие способы синхронизации, если файл в нескольких местах:
-
При изменении файла в одном месте сразу делать широковещательное оповещение
-
Если кто-то что-то делает, то сначала он должен спросить сервер, не было ли изменений
Много прослушал
Способы размножения файлов:
-
Ленивое
-
Симметричное
Появляются проблемы: есть много копий данных,
Метод размножения главной копии – выделяется главный сервер, на нём ведётся журнал всех изменений, которые были произведены.
Короче говоря, я всё прослушал
Лекция 9 Hadoop
Почему появились базы данных:
-
Сейчас стало информации совсем много, и она совсем не структурирована
-
Нужно как-то распараллеливать считывание и запись информации, для увеличения скорости работы с большим количеством информации
В hadoop пользователь фактически работает со списками
Hadoop использует технологии MapReduce
Отличительная особенность в том, что при использовании MapReduce – полезно лишь для очень больших размеров данных, по сравнению с обычными реляционными базами (например петтабайты)
MapReduce лучше работает с однократной записью, но многократным чтением
Целостность у MapReduce низкая
Масштабируемость MapReduce – линейная, т.е. мы можем увеличивать количество серверов и линейно с этим будет увеличиваться производительность (и линейно падать вместе с ростом количества информации) (крайности соотношений количества данных и количества серверов – не надо рассматривать)
MapReduce в первую очередь был создан google
Hadoop – является opensource
Недостатки работы в традиционной базе данных – тяжело таскать данные на каждый вычислитель, так что было бы хорошо уметь таскать процессы и саму обработку к данным.
Задачи Hadoop:
-
Обработка большых данных
-
Автоматическое распределение выполняемых функций между железом
-
Автоматическая обработка отказов и распределение по оборудованию
Hadoop имеет 3 части:
-
Common – для стыковки с разными файловыми системами
-
HDFS – сама файловая система
-
MapReduce – на java
Архитектура hadoop HDFS
Есть сервер namenode, который содержит в себе информацию и содержит в себе все изменения, которые время от времени сбрасываются на диск (которых несколько копий, для страховки информации (и в то же время читать можно с нескольких сразу)), ещё ведётся журнал, чтобы когда namenode упал, то всё было не очень плохо, ибо из журнала что-нибудь восстановится
Namenode пытается всё хранить в памяти.
DataNodes – это те, которые хранят всю информацию на жёстких дисках, (разные куски информации), и сами datanodes объединяются в Rack, и иноформация имеется в нескольких копиях на разных реках, но как именно она распределена в реках – не регламентируется.
MapReduce работает со списками, и по факту там как в lisp (оттуда и украли) – лишь 2 разных функции – map и reduce. Map отображает данные из одного списка в другой (немного обрабатывая, т.е. выбирая нужные данные, из может быть сложной структуры данных, которая хранится в качестве элемента списка), Reduce выбирает элемент их списка (используя некоторую функцию, которая анализирует входной список, и выдаёт ответ).
Такую работу hadoop может запускать параллельно на разных кусках данных, а потом их можно объединять, сначала их упорядочивают по ключу, а потом снова обрабатывают как список.
Работа hadoop при чтении получается такой:
-
Параллельно для разных данных делаем map – (тут берутся лишь нужные данные)
-
Shuffle process – которые пересобирает списки для дальнейшей обработки, которые выдал map – это может быть например сортировка по ключу
-
Reduce – выбирается нужный элемент уже из сформированных списков
Промежуточная информация (промежуточные списки) – не сохраняются.
JobTracker – он разбивает задачи на подзадачи, например он может сам выбирать, на какие блоки будут биться данные при параллельно обработке, он разбирается, можно ли разбить нашу задачу при выполнении map на подзадачи (хотя в основном он преимущественно распределяет нагрузку, пытаясь манипулировать разбиением данных)
JobTracker управляет TaskTracker-ами. В общем его основная задача – распределение нагрузки.
Из данных перемещаются лишь входные списки для Reduce, а их объём мал.
Hadoop Plugin для Eclipse – для работы на java
Есть Hadoop Streaming – позволяющий программировать на любых других языках: shell, python, ruby, …
Системы на основе hadoop – pig, hbase, Cassandra, Hive (попытка сделать интерфейс hadoop как в sql), Mahout, …
HDFS Система – ёмкость, производительность, надёжность.
Существуют специальные серверы, которые делают для хранения большого количества информации, и для наличия огромного диска, но это очень дорого стоит.
Google File System – суть в том, что мы пользуем обычные ПК, но при правильной организации, получаем большую скорость доступа за счёт распределённости.
Получается, что есть все требования – стоимость, надёжность, скорость, объём.
Ограничения HDFS:
-
Случайный доступ работает медленно, быстро работает считывание большого количества блоков
-
Модель использования – один раз записали, много раз считали
-
Уровень виртуальной файловой системы – отсутствует, т.к. нас тут уже не сильно заботит прозрачность сети для клиентского пользования.
Поэтому тут нету POSIX, и следовательно не работает монтирование файла, ls, cp, mkdir, …
-
Кеширование не используется, т.к. объёмы памяти огромны, а потому негде столько закешировать, + у нас пакетная обработка, а потому запросы, а значит и данные не особо повторяются
Namemode – управляющий узел, он занимается стыковкой, разрешением пространства имён, …
Datanode – просто хранит данные
Обычно репликация в мире равна 3-м – т.е. один и тот же блок хранится в 3-х местах.
NameNode – знает, на каком узле хранения экземпляры каких данных имеются
Rack Awareness – данные обычно пытаются распределить в нескольких разных шкафах, чтобы если шкаф умер, то другой был жив.
Для работы с hdfs используются специальные команды, например /bin/hadoop dfa -ls
К hdfs можно подключиться из терминала или из интернета.
Все пути либо полные, либо из домашней директории пользователя
Как обычно система разграничения доступа – дискреционная.
r/w – для файлов - стандартно
x для файлов не используется
r- для каталога это чтение
w – для каталога это создание файлов, папок
x – возможность заглядывать внутрь рекурсивно
нету setuid, setgid, sticky bit
Существует api для java, чтобы работать с hdfs
Лекция 10
Лекция по обеспечению надёжности в распределённых системах
Читай по слайдам лектора (7-й номер)
Лекция 11
Обзор технологии параллельного программирования MPI
Была хорошая презентация
Тег – есть для каждой операции точка-точка (используется для определения того, что пришло к нам (фактически это нумерация))
Лекция 12
Автоматизация разработки параллельных программ.
Вроде бы эта лекция всегда читалась, хотя в курс не входила, но выучить всё равно стоит.
Смотри слайды.