Написать в техподдержку Позвонить нам
Админпанель Выход

Содержание статьи:

    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": 

     

    Полезна ли была эта статья?