Apache Hadoop

редактировать
Платформа распределенной обработки данных
Apache Hadoop
Логотип Hadoop new.svg
Автор (ы) Дуг Каттинг, Майк Кафарелла
Разработчик (и) Apache Software Foundation
Первоначальный выпуск1 апреля 2006 г.; 14 лет назад (01.04.2006)
Стабильный выпуск
2.7.x2.7.7 / 31 мая 2018 г.; 2 года назад (31.05.2018)
2.8.x2.8.5 / 15 сентября 2018 г.; 2 года назад (15.09.2018)
2.9.x2.9.2 / 9 ноября 2018 г.; 23 месяца назад (2018-11-09)
2.10.x2.10.1 / 21 сентября 2020 г.; 33 дня назад (2020-09-21)
3.1.x3.1.4 / 3 августа 2020 г.; 2 месяца назад (2020-08-03)
3.2.x3.2.1 / 22 сентября 2019 г.; 13 месяцев назад (2019-09-22)
3.3.x3.3.0 / 14 июля 2020 г.; 3 месяца назад (2020-07-14)
Репозиторий Репозиторий Hadoop
Написано наJava
Операционная система Кросс-платформенная
Тип Распределенная файловая система
Лицензия Лицензия Apache 2.0
Веб-сайтhadoop.apache.org Измените это в Wikidata

Apache Hadoop () представляет собой набор открытых -source программные утилиты, которые упрощают использование сети из множества компьютеров для решения проблем, связанных с большими объемами данных и вычислений. Он предоставляет программную среду для распределенного хранилища и обработки больших данных с использованием модели программирования MapReduce . Первоначально Hadoop был разработан для компьютерных кластеров, построенных на стандартном аппаратном обеспечении, которое до сих пор широко используется. С тех пор он также нашел применение в кластерах высокопроизводительного оборудования. Все модули в Hadoop разработаны с учетом фундаментального предположения, что сбои оборудования являются обычным явлением и должны автоматически обрабатываться платформой.

Ядро Apache Hadoop состоит из части хранения, известной как распределенная файловая система Hadoop ( HDFS) и часть обработки, которая представляет собой модель программирования MapReduce. Hadoop разбивает файлы на большие блоки и распределяет их по узлам кластера. Затем он передает упакованный код в узлы для параллельной обработки данных. Этот подход использует преимущество местоположения данных, где узлы манипулируют данными, к которым у них есть доступ. Это позволяет обрабатывать быстрее и эффективнее, чем это было бы в более традиционной архитектуре суперкомпьютера, которая опирается на параллельную файловую систему, где вычисления и данные распространяются через высокоскоростную сеть.

Базовая структура Apache Hadoop состоит из следующих модулей:

  • Hadoop Common - содержит библиотеки и утилиты, необходимые для других модулей Hadoop;
  • Hadoop Distributed Файловая система (HDFS) - распределенная файловая система, которая хранит данные на обычных машинах, обеспечивая очень высокую совокупную пропускную способность в кластере;
  • Hadoop YARN - (введена в 2012 году) платформа, отвечающая за управление вычислительными ресурсами в кластерах и использовать их для планирования приложений пользователей;
  • Hadoop MapReduce - реализация модели программирования MapReduce для крупномасштабной обработки данных.

Термин Hadoop часто используется как для базовых модулей, так и для субмодулей и также экосистема или коллекция дополнительные программные пакеты, которые можно установить поверх или вместе с Hadoop, например Apache Pig, Apache Hive, Apache HBase, Apache Phoenix, Apache Spark, Apache ZooKeeper, Cloudera Impala, Apache Flume, Apache Sqoop, Компоненты Apache Oozie и Apache Storm.

Apache Hadoop MapReduce и HDFS были вдохновлены документами Google по MapReduce и файловой системе Google.

Сама среда Hadoop в основном написана на языке программирования Java, с некоторым собственным кодом в утилитах C и командной строки, написанных как сценарии оболочки. Хотя Java-код MapReduce является распространенным, с Hadoop Streaming можно использовать любой язык программирования для реализации карты и сокращения частей программы пользователя. Другие проекты в экосистеме Hadoop предоставляют более богатые пользовательские интерфейсы.

Содержание

  • 1 История
  • 2 Архитектура
    • 2.1 Файловые системы
      • 2.1.1 Распределенная файловая система Hadoop
      • 2.1.2 Другие файловые системы
    • 2.2 JobTracker и TaskTracker: механизм MapReduce
      • 2.2.1 Планирование
        • 2.2.1.1 Fair scheduler
        • 2.2.1.2 Планировщик емкости
    • 2.3 Разница между Hadoop 1 и Hadoop 2 (YARN)
    • 2.4 Разница между Hadoop 2 и Hadoop 3
    • 2.5 Другие приложения
  • 3 Примеры использования
  • 4 Хостинг Hadoop в облаке
  • 5 Коммерческая поддержка
    • 5.1 Брендинг
  • 6 Статьи
  • 7 См. Также
  • 8 Ссылки
  • 9 Библиография
  • 10 Внешние ссылки

История

По словам его соучредителей, Дуга Каттинга и Майка Кафареллы, происхождение Hadoop было связано с Google Документ о файловой системе, опубликованный в октябре 2003 года. Этот документ породил еще один документ от Google - «MapReduce: упрощенная обработка данных в больших кластерах». Разработка началась над проектом Apache Nutch, но в январе 2006 года была перенесена в новый подпроект Hadoop. Дуг Каттинг, который в то время работал в Yahoo!, назвал его в честь своего сына игрушечный слоник. Первоначальный код, выделенный из Nutch, состоял примерно из 5000 строк кода для HDFS и примерно 6000 строк кода для MapReduce.

В марте 2006 г. Оуэн О’Мэлли был первым коммитентом, добавившимся к проекту Hadoop; Hadoop 0.1.0 был выпущен в апреле 2006 года. Он продолжает развиваться за счет вкладов, вносимых в проект.

Архитектура

Hadoop состоит из пакета Hadoop Common, который предоставляет файловую систему и абстракции на уровне операционной системы, движок MapReduce (MapReduce / MR1 или YARN / MR2) и распределенная файловая система Hadoop (HDFS). Пакет Hadoop Common содержит файлы Java Archive (JAR) и сценарии, необходимые для запуска Hadoop.

Для эффективного планирования работы каждая Hadoop-совместимая файловая система должна обеспечивать информацию о местоположении, которая представляет собой имя стойки, в частности, сетевой коммутатор, на котором находится рабочий узел. Приложения Hadoop могут использовать эту информацию для выполнения кода на узле, на котором находятся данные, и, если это не удается, на той же стойке / коммутаторе, чтобы уменьшить магистральный трафик. HDFS использует этот метод при репликации данных для избыточности данных на нескольких стойках. Такой подход снижает влияние отключения электроэнергии в стойке или отказа коммутатора; при возникновении любого из этих аппаратных сбоев данные останутся доступными.

Hadoop cluster Многоузловой кластер Hadoop

Небольшой кластер Hadoop включает один главный и несколько рабочих узлов. Главный узел состоит из отслеживания заданий, средства отслеживания задач, NameNode и DataNode. Подчиненный или рабочий узел действует как DataNode и TaskTracker, хотя можно иметь рабочие узлы только для данных и только для вычислений. Обычно они используются только в нестандартных приложениях.

Hadoop требует Java Runtime Environment (JRE) 1.6 или выше. Стандартные сценарии запуска и завершения работы требуют, чтобы Secure Shell (SSH) был установлен между узлами в кластере.

В более крупном кластере узлы HDFS управляются через выделенный сервер NameNode для размещения индекс файловой системы и вторичный NameNode, который может создавать моментальные снимки структур памяти namenode, тем самым предотвращая повреждение файловой системы и потерю данных. Точно так же автономный сервер JobTracker может управлять планированием заданий по узлам. Когда Hadoop MapReduce используется с альтернативной файловой системой, NameNode, вторичный NameNode и архитектура DataNode HDFS заменяются эквивалентами для конкретной файловой системы.

Файловые системы

Распределенная файловая система Hadoop

Распределенная файловая система Hadoop (HDFS) - это распределенная, масштабируемая и переносимая файловая система, написанная на Java для фреймворка Hadoop. Некоторые считают его хранилищем данных из-за того, что оно не соответствует POSIX, но оно предоставляет команды оболочки и интерфейс программирования приложений Java (API) методы которые похожи на другие файловые системы. Hadoop делится на HDFS и MapReduce. HDFS используется для хранения данных, а MapReduce - для обработки данных. HDFS имеет пять следующих служб:

  1. Узел имени
  2. Узел вторичного имени
  3. Отслеживание заданий
  4. Узел данных
  5. Отслеживание задач

Первые три - это главные службы / демоны / узлы, а два нижних - подчиненные службы. Главные службы могут связываться друг с другом, и точно так же подчиненные службы могут общаться друг с другом. Узел имени является главным узлом, а узел данных - соответствующим ему ведомым узлом, которые могут взаимодействовать друг с другом.

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

Узел данных: Узел данных хранит данные в нем в виде блоков. Он также известен как подчиненный узел и сохраняет фактические данные в HDFS, который отвечает за чтение и запись клиентом. Это демоны-рабы. Каждый узел данных отправляет сообщение Heartbeat узлу Name каждые 3 секунды и сообщает, что он активен. Таким образом, когда узел имени не получает контрольный сигнал от узла данных в течение 2 минут, он считает этот узел данных мертвым и запускает процесс репликации блока на каком-то другом узле данных.

Дополнительный узел имени: Это только для того, чтобы позаботиться о контрольных точках метаданных файловой системы, которые находятся в узле имени. Это также известно как узел контрольной точки. Это вспомогательный узел для узла имени.

Отслеживание заданий: Отслеживание заданий получает от клиента запросы на выполнение Map Reduce. Трекер заданий обращается к узлу имени, чтобы узнать о местонахождении данных, которые будут использоваться при обработке. Узел имени отвечает метаданными необходимых данных обработки.

Трекер задач: Это подчиненный узел для Трекера заданий, и он берет задачу из Трекера заданий. А также получает код от Job Tracker. Трекер задач возьмет код и применит к файлу. Процесс применения этого кода к файлу известен как Mapper.

Кластер Hadoop номинально имеет один узел имени плюс кластер узлов данных, хотя для узла имени доступны параметры избыточности из-за его критичность. Каждый узел данных обслуживает блоки данных по сети с использованием блочного протокола, специфичного для HDFS. Файловая система использует для связи TCP/IP сокеты. Клиенты используют вызовы удаленных процедур (RPC) для связи друг с другом.

HDFS хранит большие файлы (обычно в диапазоне от гигабайт до терабайт) на нескольких машинах. Он обеспечивает надежность за счет репликации данных на нескольких хостах, и, следовательно, теоретически не требует избыточного массива независимых дисков (RAID) на хостах (но для увеличения ввода-вывода (I / O) производительность, некоторые конфигурации RAID все еще полезны). При значении репликации по умолчанию, 3, данные хранятся на трех узлах: два в одной стойке и один в другой стойке. Узлы данных могут взаимодействовать друг с другом, чтобы сбалансировать данные, перемещать копии и поддерживать высокий уровень репликации данных. HDFS не полностью совместима с POSIX, потому что требования к файловой системе POSIX отличаются от целевых целей приложения Hadoop. Компромисс отсутствия полностью совместимой с POSIX файловой системы заключается в увеличении производительности для данных пропускной способности и поддержке операций, не относящихся к POSIX, таких как Append.

В мае 2012 г. В HDFS были добавлены возможности обеспечения доступности, что позволило главному серверу метаданных, называемому NameNode, вручную переключиться на резервную копию. В рамках проекта также началась разработка автоматического переключения при отказе.

Файловая система HDFS включает в себя так называемый вторичный узел имени, вводящий в заблуждение термин, который некоторые могут неправильно интерпретировать как резервный узел имени, когда основной узел имени отключается. Фактически, вторичный namenode регулярно соединяется с первичным namenode и строит моментальные снимки информации каталога первичного namenode, которые затем система сохраняет в локальных или удаленных каталогах. Эти образы с контрольными точками можно использовать для перезапуска вышедшего из строя основного узла имен без необходимости воспроизводить весь журнал действий файловой системы, а затем для редактирования журнала для создания актуальной структуры каталогов. Поскольку namenode является единой точкой для хранения и управления метаданными, он может стать узким местом для поддержки огромного количества файлов, особенно большого количества небольших файлов. HDFS Federation, новое дополнение, направлено на решение этой проблемы в определенной степени, позволяя обслуживать несколько пространств имен отдельными узлами имен. Более того, в HDFS есть некоторые проблемы, такие как проблемы с небольшими файлами, проблемы масштабируемости, единственная точка отказа (SPoF) и узкие места в огромных запросах метаданных. Одним из преимуществ использования HDFS является осведомленность о данных между трекером заданий и трекером задач. Расписания для отслеживания заданий сопоставляют или сокращают задания до средств отслеживания задач с учетом расположения данных. Например: если узел A содержит данные (a, b, c), а узел X содержит данные (x, y, z), средство отслеживания заданий планирует узел A для выполнения сопоставления или сокращения задач на (a, b, c) и узле X будет запланировано выполнять отображение или сокращение задач на (x, y, z). Это уменьшает объем трафика, который проходит по сети, и предотвращает ненужную передачу данных. Когда Hadoop используется с другими файловыми системами, это преимущество не всегда доступно. Это может существенно повлиять на время выполнения заданий, что продемонстрировано на примере заданий с интенсивным использованием данных.

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

HDFS можно смонтировать напрямую с файловой системой в пользовательском пространстве (FUSE) виртуальной файловой системе в Linux и некоторых других Unix систем.

Доступ к файлам может быть осуществлен через собственный Java API, Thrift API (генерирует клиент на нескольких языках, например, C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa, Smalltalk и OCaml ), интерфейс командной строки , веб-приложение HDFS-UI поверх HTTP или через сторонние сетевые клиентские библиотеки.

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

Другие файловые системы

Hadoop работает напрямую с любыми распределенная файловая система, которая может быть смонтирована базовой операционной системой, просто используя file: //URL; Однако за это приходится расплачиваться - потеря местоположения. Чтобы уменьшить сетевой трафик, Hadoop необходимо знать, какие серверы находятся ближе всего к данным - информацию, которую могут предоставить мосты файловой системы для Hadoop.

В мае 2011 года список поддерживаемых файловых систем, связанных с Apache Hadoop, был следующим:

  • HDFS: собственная файловая система Hadoop с поддержкой стойки. Он предназначен для масштабирования до десятков петабайт хранилища и работает поверх файловых систем базовых операционных систем.
  • Apache Hadoop Ozone: совместимые с HDFS хранилища объектов, оптимизированные для миллиардов небольших файлов.
  • FTP файловая система: все данные хранятся на удаленно доступных FTP-серверах.
  • Amazon S3 (Simple Storage Service) объектное хранилище: предназначено для кластеров, размещенных в Amazon Elastic Compute Cloud Серверная инфраструктура по запросу. В этой файловой системе нет поддержки стойки, поскольку она полностью удаленная.
  • Файловая система Windows Azure Storage Blobs (WASB): это расширение HDFS, которое позволяет распространителям Hadoop получать доступ к данным в Azure blob. сохраняет без постоянного перемещения данных в кластер.

Также был написан ряд мостов для файловых систем сторонних производителей, ни один из которых в настоящее время не входит в состав дистрибутивов Hadoop. Однако некоторые коммерческие дистрибутивы Hadoop поставляются с альтернативной файловой системой по умолчанию - в частности, IBM и MapR.

  • В 2009 году IBM обсуждали возможность использования Hadoop в IBM General Parallel File System. Исходный код был опубликован в октябре 2009 года.
  • В апреле 2010 года Parascale опубликовала исходный код для запуска Hadoop в файловой системе Parascale.
  • В апреле 2010 года Appistry выпустила драйвер файловой системы Hadoop для использования с собственным продуктом CloudIQ Storage.
  • В июне 2010 года HP обсудила драйвер файловой системы IBRIX Fusion с учетом местоположения.
  • В Май 2011, MapR Technologies Inc. объявила о доступности альтернативной файловой системы для Hadoop, MapR FS, которая заменила файловую систему HDFS файловой системой чтения / записи с полным произвольным доступом..

JobTracker и TaskTracker: механизм MapReduce

На вершине файловых систем находится механизм MapReduce Engine, который состоит из одного JobTracker, которому клиентские приложения отправляют задания MapReduce. JobTracker передает работу доступным узлам TaskTracker в кластере, стараясь максимально приблизить работу к данным. Благодаря файловой системе, поддерживающей стойку, JobTracker знает, какой узел содержит данные и какие другие машины находятся поблизости. Если работа не может быть размещена на фактическом узле, где находятся данные, приоритет отдается узлам в той же стойке. Это снижает сетевой трафик в основной магистральной сети. Если TaskTracker выходит из строя или истекает время ожидания, эта часть задания переносится. TaskTracker на каждом узле порождает отдельный процесс виртуальной машины Java (JVM), чтобы предотвратить сбой самого TaskTracker, если выполняющееся задание выйдет из строя его JVM. Контрольное сообщение отправляется из TaskTracker в JobTracker каждые несколько минут для проверки его статуса. Jetty показывает статус и информацию о Job Tracker и TaskTracker, и их можно просматривать в веб-браузере.

Известные ограничения этого подхода:

  1. Распределение работы по TaskTrackers очень просто. Каждый TaskTracker имеет ряд доступных слотов (например, «4 слота»). Каждая активная карта или задача уменьшения занимает один слот. Трекер заданий распределяет работу на трекер, ближайший к данным с доступным слотом. Не учитывается текущая загрузка системы выделенного компьютера и, следовательно, его фактическая доступность.
  2. Если один TaskTracker работает очень медленно, он может задержать выполнение всего задания MapReduce, особенно в отношении конец, когда все может закончиться ожиданием самой медленной задачи. Однако при включенном спекулятивном выполнении одна задача может выполняться на нескольких подчиненных узлах.

Планирование

По умолчанию Hadoop использует планирование FIFO и, при необходимости, 5 приоритетов планирования для планирования заданий из очередь работы. В версии 0.19 планировщик заданий был реорганизован из JobTracker, при этом добавлена ​​возможность использования альтернативного планировщика (например, планировщика Fair или Capacity, описанного ниже).

Fair scheduler

Планировщик ярмарки был разработан Facebook. Цель честного планировщика - обеспечить быстрое время отклика для небольших заданий и Качество обслуживания (QoS) для производственных заданий. Планировщик справедливости имеет три основных принципа.

  1. Задания сгруппированы в пулы.
  2. Каждому пулу назначается гарантированная минимальная доля.
  3. Избыточная емкость распределяется между заданиями.

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

Планировщик емкости

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

  1. Очередям выделяется часть общей емкости ресурсов.
  2. Свободные ресурсы выделяются очередям сверх их общей емкости.
  3. В очереди задание с высоким уровнем приоритета имеет доступ к ресурсам очереди.

Нет вытеснения после выполнения задания.

Разница между Hadoop 1 и Hadoop 2 (YARN)

Самая большая разница между Hadoop 1 и Hadoop 2 заключается в добавлении YARN (еще одного согласователя ресурсов), который заменил механизм MapReduce в первая версия Hadoop. YARN стремится эффективно распределять ресурсы между различными приложениями. Он запускает два демона, которые заботятся о двух разных задачах: диспетчер ресурсов, который отслеживает задания и выделение ресурсов приложениям, мастер приложения, который отслеживает ход выполнения.

Разница между Hadoop 2 и Hadoop 3

Hadoop 3 предоставляет важные функции. Например, хотя в Hadoop 2 есть один единственный узел имен, Hadoop 3 позволяет иметь несколько узлов имен, которые решает проблему единой точки отказа.

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

Одним из самых больших изменений является то, что Hadoop 3 снижает накладные расходы на хранилище с помощью кодирования со стиранием.

Кроме того, Hadoop 3 позволяет использовать аппаратное обеспечение графического процессора в кластере, что является очень существенным преимуществом для выполнения глубокого обучения. алгоритмы в кластере Hadoop.

Другие приложения

HDFS не ограничивается заданиями MapReduce. Его можно использовать для других приложений, многие из которых разрабатываются в Apache. Список включает базу данных HBase, систему Apache Mahout машинного обучения и Apache Hive Data Warehouse система. Теоретически Hadoop можно использовать для любого вида работы, которая ориентирована на обработку пакетов, а не в режиме реального времени, требует больших объемов данных и выигрывает от параллельной обработки данных. Его также можно использовать для дополнения системы реального времени, такой как лямбда-архитектура, Apache Storm, Flink и Spark Streaming.

По состоянию на октябрь 2009 г. коммерческие приложения Hadoop включали: -

  • журналы и / или анализ трафика различных видов
  • маркетинговая аналитика
  • машинное обучение и / или сложный интеллектуальный анализ данных
  • обработка изображений
  • обработка XML-сообщения
  • сканирование в Интернете и / или обработка текста
  • общее архивирование, включая реляционные / табличные данные, например на соответствие

Основные варианты использования

19 февраля 2008 г. Yahoo! Inc. запустила то, что они назвали крупнейшим в мире производственным приложением Hadoop. Yahoo! Search Webmap - это приложение Hadoop, которое работает в кластере Linux с более чем 10 000 ядрами и генерирует данные, которые использовались в каждом Yahoo! поисковый запрос в Интернете. Yahoo! имеет несколько кластеров Hadoop. и никакие файловые системы HDFS или задания MapReduce не распределяются между несколькими центрами обработки данных. Каждый узел кластера Hadoop выполняет загрузку образа Linux, включая дистрибутив Hadoop. Известно, что работа, выполняемая кластерами, включает вычисление индекса для Yahoo! поисковый движок. В июне 2009 года Yahoo! сделал исходный код своей версии Hadoop доступным для сообщества разработчиков ПО с открытым исходным кодом.

В 2010 году Facebook заявил, что у них самый большой кластер Hadoop в мире с 21 PB хранилищем. В июне 2012 года они объявили, что объем данных вырос до 100 ПБ, а позже в том же году объявили, что объем данных растет примерно на половину ПБ в день.

По состоянию на 2013 год внедрение Hadoop стало широко распространенным: более чем половина компаний из списка Fortune 50 использовали Hadoop.

Хостинг Hadoop в облаке

Hadoop можно развернуть как в традиционном локальном центре обработки данных, так и в облаке. Облако позволяет организациям развертывать Hadoop без необходимости приобретения оборудования или специального опыта настройки.

Коммерческая поддержка

Ряд компаний предлагают коммерческое внедрение или поддержку Hadoop.

Брендинг

Apache Software Foundation заявила, что только программное обеспечение, официально выпущенное проектом Apache Hadoop, может называться Apache Hadoop или дистрибутивами Apache Hadoop. Именование продуктов и производных работ от других поставщиков, а также термин «совместимый» вызывают споры в сообществе разработчиков Hadoop.

Статьи

Некоторые статьи повлияли на зарождение и развитие Hadoop и больших данных обработка. Вот некоторые из них:

См. Также

  • Портал бесплатного программного обеспечения с открытым исходным кодом

Ссылки

Библиография

Внешние ссылки

Последняя правка сделана 2021-06-11 20:10:30
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте