Spark
Apache Spark - это Big Data фрэймворк с открытым исходным кодом для распределенной пакетной и потоковой обработки неструктурированных и слабоструктурированных данных, входящий в экосистему проектов Hadoop.
В отличие от классического обработчика из ядра Hadoop, реализующего двухуровневую концепцию MapReduce с хранением промежуточных данных на накопителях, Spark работает в парадигме резистентных вычислений, то есть обрабатывает данные в оперативной памяти, благодаря чему значительно выигрывает в скорости для некоторых классов задач. В частности, возможность многократного доступа к загруженным в память пользовательским данным делает библиотеку привлекательной для алгоритмов машинного обучения.
Проект предоставляет программные интерфейсы для языков Java, Scala, Python, R. Состоит из ядра и следующих расширений:
- Spark SQL - позволяет выполнять SQL-запросы над данными
- Spark Streaming - надстройка для обработки потоковых данных
- Spark MLib - набор библиотек машинного обучения
- GraphX - предназначен для распределенной обработки графов
Данный фрэймворк может работать как в среде кластера Hadoop под управлением YARN, так и без компонента ядра Hadoop.
Поддерживает несколько распределенных систем хранения - HDFS,OpenStack Swift, NoSQL, Cassandra, Amazon S3.

Spark состоит из 4 функциональных модулей, работающих в пределах одного кластера данных и одновременно распределенных горизонтально по всему кластеру компьютеров, работающих на Hadoop.
Первый модуль SparkSQL - дает возможность интеграции SQL-запросов со всеми элементами фрэймворка. Благодаря представлению информации в виде так называемых упругих распределенных наборов данных (RDD), осуществляется быстрый и простой доступ к данным через прикладные интерфейсы на Python, Scala и Java. Кроме того, такая технология позволяет запрашивать данные и одновременно запускать сложные алгоритмы их анализа.
Второй элемент Spark Streaming - компонент, позволяющий пользователю писать и запускать приложения на Scala и Java в потоковом режиме. При этом, приложение сможет одновременно работать как с потоками данных, так и осуществлять пакетную обработку без существенных изменений в коде. Также фрэймворк способен автоматически восстанавливать данные после ошибочных действий со стороны системы.
Библиотека машинного обучения MLib обладает отличной способностью интеграции - ее можно подключать к прикладным интерфейсам на тех же языках - Scala, Java, Python. Еще два ключевых момента заключаются в скорости тестирования и обучения (скорость выше более чем в 100 раз по сравнению с MapReduce) и простотой разворачивания - библиотека работает на уже существующих компьютерах кластера Hadoop с уже существующими данными.
Последний компонент это прикладной интерфейс GraphX для работы с графами и графо-параллельных вычислений. Одна из важных характеристик модуля - гибкость, то есть способность "бесшовной" работы как с графами, так и с коллекциями данных.
В целом Spark обладает:
- высокой скоростью работы на всех уровнях фрэймворка - от запросов SQL до вычислений на графах и машинного обучения;
- многофункциональностью;
- полной интеграцией с экосистемой Hadoop, поскольку Spark является полной модификацией MapReduce. Соответственно, пользователи не рискуют такими характеристиками как неограниченная горизонтальная масштабируемость и способность восстанавливаться даже после серьезных ошибок системы;
HDFS
Данная распределенная файловая система предназначена для работы на стандартном оборудовании. HDFS отличается высокой отказоустойчивостью и предназначена на развертывании на недорогом оборудовании. HDFS обеспечивает высокопроизводительный доступ к данным и подходит для приложений с большими объемами данных.
Основная архитектурная цель HDFS - это обнаружение сбоев и быстрое автоматическое восстановление после них.
Приложения, работающие в HDFS, нуждаются в потоковом доступе к своим наборам данных. HDFS больше предназначена для пакетной обработки, чем для интерактивного использования. Акцент делается на высокой пропускной способности доступа к данным.
HDFS имеет master/slave архитектуру. Кластер HDFS состоит из одного узла NameNode, главного сервера, который управляет пространством имен файловой системы и регулирует доступ клиентов к файлам. Кроме того, существует несколько узлов DataNodes, которые управляют хранилищем, подключенному к узлам. HDFS предоставляет пространство имен файловой системы и позволяет хранить пользовательские данные в файлах. Внутри файл разбивается на один или несколько блоков и эти блоки хранятся в наборе узлов. NameNode выполняет операции пространства имен файловой системы, такие как открытие, закрытие, переименование файлов и каталогов. DataNodes отвечают за обслуживание запросов чтения и записи от клиентов файловой системы. DataNodes также выполняют создание, удаление и репликацию блоков по команде NameNode.

В интерфейсе Ambari для управления компонентом HDFS необходимо открыть соответствующую вкладку и открыть выпадающее меню "Действия с сервисом/Service Actions":

YARN
Фундаментальная идея YARN состоит в разделении функций управления ресурсами и планирования/мониторинга заданий на отдельные дэймоны. Идея состоит в том, чтобы иметь глобальный ResourseManager (RM) и ApplicationMaster (AM) для каждого приложения.
ResourseManager и NodeManager образуют структуру вычисления данных. ResouresManager имеет наивысший статус и распределяет ресурсы между всеми приложениями в системе. NodeManager - это агент инфраструктуры для каждой машины, который отвечает за контейнеры, отслеживает использование ими ресурсов (процессор, память, диск, сеть) и сообщает об этом RM.

RM имеет два основных компонента: Планировщик и ApplicationManager.
Планировщик отвечает за распределение ресурсов между различными запущенными приложениями, с учетом известных ограничений емкости и очередей. Планировщик не выполняет мониторинг или отслеживание. Планировщик выполняет свою функцию планирования на основе требований приложений к ресурсам. Имеет подключаемую политику, которая отвечает за разделение ресурсов кластера между различными очередями.
ApplicationManager отвечает за прием отправленных заданий, согласование контейнера для выполнения конкретного приложения ApplicationMaster и предоставляет службу для перезапуска контейнера ApplicationManager в случае сбоя. ApplicationMaster для каждого приложения отвечает за согласование и планировщиком соответствующих контейнеров ресурсов, отслеживание их статуса и мониторинг выполнения.
В интерфейсе Ambari для управления компонентом YARN необходимо открыть соответствующую вкладку и открыть выпадающее меню "Действия с сервисом/Service Actions":

MapReduce2
MapReduce программный фрэймворк для написания приложений, которые обрабатывают большие (многотерабайтные) объемы данных параллельно на больших кластерах надежным и отказоустойчивым способом.
Работа MapReduce заключается в разбивке входного набора данных на независимые блоки, которые обрабатываются параллельно. Платформа сортирует выходные данные карт, которые затем вводятся в сокращенные задачи. Как правила, ввод и вывод задач хранятся в файловой системе. Фрэймворк заботится о планировании задач, контролирует их и повторно выполняет невыполненные.
Обычно вычислительные узлы и узлы хранения совпадают, то есть инфраструктура MapReduce и HDFS работают на одном наборе узлов. Эта конфигурация позволяет платформе эффективно планировать задачи на узлах, где данные уже присутствуют, что приводит к очень высокой совокупной пропускной способности кластера.
В интерфейсе Ambari для управления компонентом MapReduce2 необходимо открыть соответствующую вкладку и открыть выпадающее меню "Действия с сервисом/Service Actions":

Hive
Apache Hive - это SQL интерфейс доступа к данным для платформы Hadoop. Hive позволяет выполнять запросы, агрегировать и анализировать данные используя SQL синтаксис. Для данных хранящихся на файловой системе HDFS используется схема доступа на чтение позволяющая обращаться с данными как с обыкновенной таблицей или базой данных. Запросы HiveQL при этом в Java код команды исполняемые MapReduce.
Запросы Hive создаются на языке запросов HiveQL, который основан на языке SQL, но не имеет полной поддержки стандарта SQL-92. В то же время этот язык позволяет программистам использовать их собственные запросы, когда неудобно или неэффективно использовать логику в HiveQL. HiveQL может быть расширен с помощью пользовательских скалярных функций (UDF), агрегаций (UDAF кодов), и табличных функций (UDTF).
В интерфейсе Ambari для управления компонентом Hive необходимо открыть соответствующую вкладку и открыть выпадающее меню "Действия с сервисом/Service Actions":

Pig
Apache Pig - это абстракция над MapReduce. Это инструмент/платформа, которая используется для анализа больших наборов данных, представляющих их как потоки данных. Pig обычно используется с Hadoop.
Для написания программ анализа данных Pig предоставляет язык высокого уровня, известный как Pig Latin (SQL-подобный язык). Этот язык предоставляет различные операторы, с помощью которых программисты могут разрабатывать свои собственные функции для чтения, записи и обработки данных.
Apache Pig использует подход с несколькими запросами, тем самым сокращая длину кодов. В конечном итоге Apache Pig сокращает время разработки почти в 16 раз.
Apache Pig предоставляет множество встроенных операторов для поддержки операций с данными, таких как объединения, фильтры, упорядочение и т. Д. Кроме того, он также предоставляет вложенные типы данных, такие как кортежи, сумки и карты, которые отсутствуют в MapReduce.
В интерфейсе Ambari для управления компонентом Pig необходимо открыть соответствующую вкладку и открыть выпадающее меню "Действия с сервисом/Service Actions":

Sqoop
Apache Sqoop - это инструмент, предназначенный для передачи данных между Hadoop и реляционными базами данных или мэйнфреймами. Вы можете использовать Sqoop для импорта данных из реляционных систем управления базами данных (РСУБД), таких как MySQL или Oracle или мэйнфреймов в Hadoop, преобразовывать данные в Hadoop MapReduce, а затем экспортировать данные обратно в СУБД.
Sqoop автоматизирует большую часть этого процесса, опираясь на базу данных для описания схемы данных, которые будут импортированы. Sqoop использует MapReduce для импорта и экспорта данных, что обеспечивает параллельную работу, а также отказоустойчивость.
Sqoop поддерживает добавочную загрузку отдельной таблицы или SQL-запроса произвольной формы, а также сохраненные задания, которые можно запускать несколько раз для импорта обновлений, сделанных в базу данных с момента последнего импорта. Импорт также можно использовать для заполнения таблиц в Apache Hive или HBase. Экспорт можно использовать для помещения данных из Hadoop в реляционную базу данных.
В интерфейсе Ambari для управления компонентом Sqoop необходимо открыть соответствующую вкладку и открыть выпадающее меню "Действия с сервисом/Service Actions":

Oozie
Apache Oozie - это проект с открытым исходным кодом на основе технологии Java™, упрощающий процесс создания потоков работ и координацию заданий. Oozie предоставляет принципиальную возможность объединения нескольких последовательно выполняемых заданий в одну логическую единицу работы. Одно из преимуществ инфраструктуры Oozie состоит в том, что она полностью интегрирована со стеком Apache Hadoop и поддерживает задания Hadoop для Apache MapReduce, Pig, Hive и Sqoop. Кроме того, ее можно применять для планирования заданий с учетом специфики системы, например, Java-программ. Oozie позволяет Hadoop-администраторам создавать сложные преобразования данных, способные объединять обработку разнообразных индивидуальных задач и даже подпотоков работ. Такая возможность улучшает контролируемость сложных заданий и облегчает повторение этих заданий с заранее заданными интервалами.
В интерфейсе Ambari для управления компонентом Oozie необходимо открыть соответствующую вкладку и открыть выпадающее меню "Действия с сервисом/Service Actions":

ZooKeeper
Apache Zookeeper - open source проект Apache Software Foundation, cервис-координатор, который обеспечивает распределенную синхронизацию небольших по объему данных (конфигурационная информация, пространство имен) для группы приложений. Zookeeper представляет из себя распределенное хранилище "ключ-значение", гарантирующий надежное хранение информации за счет синхронной репликации между узлами, контроля версий, механизма очередей и блокировок. За счет использования оперативной памяти и масштабируемости обладает высокой скоростью.
Архитектурно Zookeeper организован по клиент-серверной технологии, когда клиентские приложения обращаются к одному из узлов, объединенных в ансамбль. Среди ансамбля серверов выделяется главный узел - Лидер, который выполняет все операции записи и запускает автоматическое восстановление при отказе любого из подключенных серверов. Остальные узлы - подписчики или последователи, реплицируют данные с Лидера и используются клиентскими приложениями для чтения.
ZooKeeper имитирует виртуальную древовидную файловую систему из взаимосвязанных узлов, которые представляют собой совмещенное понятие файла и директории. Каждый узел этой иерархии может одновременно хранить данные и иметь подчиненные узлы-потомки.
В интерфейсе Ambari для управления компонентом Zookeeper необходимо открыть соответствующую вкладку и открыть выпадающее меню "Действия с сервисом/Service Actions":

AmbariMetrics
Ambari Metrics System (AMS) - собирает, агрегирует и обслуживает системные метрики в кластерах, управляемых Ambari и имеет 4 компонента:
- мониторы метрик на каждом хосте в кластере собирают метрики системного уровня и публикуют их в Metrics Collector
- Hadoop Sinks подключается к компонентам Hadoop для публикации метрик в Metrics Collector
- Metrics Collector это демон, работающий на определенном хосте в кластере и получающий данные от зарегистрированных пользователей, мониторов или приемников
- Grafana это демон, который работает на определенном хосте в кластере и обслуживает предварительно созданные панели мониторинга для визуализации метрик.
В интерфейсе Ambari для управления компонентом Ambari Metrics необходимо открыть соответствующую вкладку и открыть выпадающее меню "Действия/Actions":

Zeppelin Notebook
Apache Zeppelin - это интерактивный веб-блокнот с открытым исходным кодом, который поддерживает практически все этапы работы с данными в Data Science, от извлечения до визуализации, в том числе интерактивный анализ и совместное использование документов. Он интегрирован с Apache Spark, Hadoop, множеством реляционных и NoSQL-СУБД (Cassandra, HBase, Hive, PostgreSQL, Elasticsearch, Google Big Query, Mysql, MariaDB, Redshift), а также поддерживает различные языки программирования, популярные в области Big Data: Python, PySpark, R, Scala, SQL. Такая многофункциональность обеспечивается за счет интерпретаторов - плагинов для поддержки языка программирования, базы данных или фреймворка.
С точки зрения работы с большими данными, отдельного упоминания заслуживает встроенная интеграция с Apache Spark, что дает общие контексты (SparkContext и SQLContext), загрузку jar-зависимостей из локальной файловой системы или репозитория maven во время выполнения задачи, а также возможность отмены задания и отображение хода его выполнения. Также Zeppelin поддерживает работу с REST-API Apache Spark – Livy. Благодаря интерпретатору Python, Apache Zeppelin предоставляет все возможности этого языка, ориентированные на Data Science, например, специализированные библиотеки (Matplotlib, Conda, Pandas и пр.) для аналитики больших данных и визуализации. Это позволяет автоматически построить круговые, столбчатые и прочие наглядные диаграммы, чтобы визуализировать статистику. Также в Zeppelin можно создавать интерактивные дfшборды с формами ввода данных, которые будут выглядеть как веб-страницы, чтобы поделиться их URL-адресами для совместной работы. Для многопользовательского режима Zeppelin поддерживает LDAP-авторизацию с настройками доступа.
В интерфейсе Ambari для управления компонентом Zeppelin Notebook необходимо открыть соответствующую вкладку и открыть выпадающее меню "Действия с сервисом/Service Actions":
