Из его скромных начал в AMPLab в U.C. Berkeley в 2009 году, Apache Spark стала одной из ключевых крупных распределенных систем обработки данных в мире. Spark может быть развернут различными способами, обеспечивает собственные привязки для языков программирования Java, Scala, Python и R и поддерживает SQL, потоковые данные, машинное обучение и обработку графа. Вы найдете, что он используется банками, телекоммуникационными компаниями, игровыми компаниями, правительствами и всеми крупными техническими гигантами, такими как Apple, Facebook, IBM и Microsoft.
Исправлена ошибка Spark автономный режим кластера, который просто требует инфраструктуры Apache Spark и JVM на каждой машине вашего кластера. Однако, скорее всего, вы захотите воспользоваться системой управления ресурсами или кластерами, чтобы позаботиться о том, чтобы распределять работников по требованию. На предприятии это обычно означает запуск на Hadoop YARN (это то, как дистрибутивы Cloudera и Hortonworks запускают задания Spark), но Apache Spark также может работать на Apache Mesos, в то время как работа продвигается по добавлению собственной поддержки для Kubernetes.
Если вы после управляемого решения, то Apache Spark можно найти как часть Amazon EMR, Google Cloud Dataproc и Microsoft Azure HDInsight. Databricks, компания, в которой работают основатели Apache Spark, также предлагает платформу Unified Analytics Platform Databricks, которая представляет собой комплексную управляемую услугу, предлагающую кластеры Apache Spark, поддержку потоковой передачи, встроенную разработку веб-ноутбуков и оптимизированную производительность облачного ввода-вывода стандартное распределение Apache Spark.
Содержание статьи
Spark vs. Hadoop
Стоит отметить, что Apache Spark vs. Apache Hadoop является немного неправильным. В наши дни Spark входит в большинство дистрибутивов Hadoop. Но из-за двух больших преимуществ Spark стал основой выбора при обработке больших данных, обгоняя старую парадигму MapReduce, которая привела Hadoop к известности.
Первое преимущество — скорость. Механизм данных Spark в памяти означает, что он может выполнять задачи в сто раз быстрее, чем MapReduce в определенных ситуациях, особенно по сравнению с многоступенчатыми заданиями, требующими записи состояния на диск между этапами. Даже Apache Spark, где данные не могут полностью содержаться в памяти, как правило, примерно в 10 раз быстрее, чем их сопоставитель MapReduce.
Второе преимущество — это API-интерфейс Spark для разработчиков.
Spark Core
. По сравнению с MapReduce и другими компонентами Apache Hadoop, Apache Spark API очень дружелюбен к разработчикам, скрывая большую часть сложности распределенного процессора обработки за простыми вызовами метода. Канонический пример этого состоит в том, как почти 50 строк кода MapReduce для подсчета слов в документе могут быть сведены к нескольким строкам Apache Spark (здесь показано в Scala):
val textFile = sparkSession.sparkContext. textFile ("hdfs: /// tmp / words")
val counts = textFile.flatMap (строка => line.split (""))
.map (word => (word, 1))
.reduceByKey (_ + _)
counts.saveAsTextFile ("hdfs: /// tmp / words_agg")
Предоставляя привязки к популярным языкам для анализа данных, таких как Python и R, а также чем более дружественные к предприятию Java и Scala, Apache Spark позволяет всем разработчикам приложений ученым-исследователям использовать его масштабируемость и скорость доступным образом.
Spark RDD
В основе Apache Spark является концепцией Resilient Distributed Dataset (RDD), прог которая представляет собой неизменную коллекцию объектов, которые могут быть разделены между вычислительным кластером. Операции над RDD также могут быть разбиты по кластеру и выполняться в параллельном пакетном процессе, что приводит к быстрой и масштабируемой параллельной обработке.
RDD могут быть созданы из простых текстовых файлов, баз данных SQL, хранилищ NoSQL (таких как Cassandra и MongoDB), ведра Amazon S3 и многое другое. Большая часть API Spark Core построена на этой концепции RDD, что позволяет использовать традиционную карту и уменьшать функциональность, но также обеспечивает встроенную поддержку для объединения наборов данных, фильтрации, выборки и агрегации.
Spark работает в распределенной путем объединения драйвера который разбивает приложение Spark на задачи и распределяет их среди многих исполнителей которые выполняют эту работу.
Spark SQL
Первоначально известный как Shark, Spark SQL стал все более и более важным для проекта Apache Spark. Это, скорее всего, интерфейс, наиболее часто используемый сегодняшними разработчиками при создании приложений. Spark SQL ориентирован на обработку структурированных данных, используя подход DataFrame, заимствованный из R и Python (в Pandas). Но, как следует из названия, Spark SQL также предоставляет интерфейс, совместимый с SQL2003, для запроса данных, приносящий мощь Apache Spark как аналитикам, так и разработчикам.
Наряду со стандартной поддержкой SQL Spark SQL предоставляет стандартный интерфейс для чтение и запись в другие хранилища данных, включая JSON, HDFS, Apache Hive, JDBC, Apache ORC и Apache Parquet, все из которых поддерживаются из коробки. Другие популярные магазины — Apache Cassandra, MongoDB, Apache HBase и многие другие — могут использоваться, вытягивая отдельные коннекторы из экосистемы Spark Packages.
Выбор некоторых столбцов из фреймворка так же просто, как эта строка:
citiesDF.select («name», «pop»)
Используя интерфейс SQL, мы регистрируем dataframe как временную таблицу, после чего мы можем вызывать SQL-запросы против нее:
citiesDF.createOrReplaceTempView («города»)
spark.sql («SELECT name, pop FROM cities»)
За кулисами Apache Spark использует оптимизатор запросов Catalyst, который анализирует данные и запросы чтобы создать эффективный план запросов для определения местоположения данных и вычислений, которые будут выполнять требуемые вычисления в кластере. В эпоху Apache Spark 2.x интерфейс Spark SQL для данных и наборов данных (по сути, типизированный блок данных, который можно проверить во время компиляции для правильности и использовать преимущества дальнейшей памяти и оптимизации вычислений во время выполнения) является рекомендуемым подходом к разработке , Интерфейс RDD по-прежнему доступен, но рекомендуется, только если у вас есть потребности, которые не могут быть инкапсулированы в парадигме Spark SQL.
Spark MLlib
Apache Spark также объединяет библиотеки для применения машинного обучения и графика методы анализа данных в масштабе. Spark MLlib включает в себя структуру для создания конвейеров машинного обучения, что позволяет легко реализовать извлечение, выбор и преобразование функций на любом структурированном наборе данных. MLLib поставляется с распределенными реализациями алгоритмов кластеризации и классификации, таких как кластеризация k-классов и случайные леса, которые легко и просто заменяются и выходят из пользовательских конвейеров. Модели могут быть обучены учеными-исследователями в Apache Spark с использованием R или Python, сохранены с использованием MLLib, а затем импортированы в конвейер на основе Java или Scala для использования в целях производства.
Обратите внимание, что хотя Spark MLlib охватывает базовую машину включая классификацию, регрессию, кластеризацию и фильтрацию, она не включает средства моделирования и обучения глубоким нейронным сетям (подробности см. в обзоре Spark MLlib в InfoWorld). Тем не менее, Deep Learning Pipelines работают.
Spark GraphX
Spark GraphX поставляется с набором распределенных алгоритмов для обработки структур графов, включая реализацию PageRank Google. Эти алгоритмы используют подход RDD от Spark Core для моделирования данных; пакет GraphFrames позволяет выполнять операции с графами на фреймах данных, включая использование оптимизатора Catalyst для графических запросов.
Spark Streaming
Spark Streaming было ранним дополнением к Apache Spark, которое помогло ему получить тяги в средах, требующих обработки в реальном времени или почти в режиме реального времени. Раньше пакетная и потоковая обработка в мире Apache Hadoop были отдельными вещами. Вы должны написать код MapReduce для ваших задач пакетной обработки и использовать что-то вроде Apache Storm для ваших требований к потоковой передаче в реальном времени. Это, очевидно, приводит к разрозненным кодовым базам, которые необходимо синхронизировать для домена приложения, несмотря на то, что они основаны на совершенно разных рамках, требующих разных ресурсов и связанных с различными операционными проблемами для их запуска.
Spark Streaming расширила Apache Spark концепция пакетной обработки в потоковой передаче, разбивая поток вниз на непрерывную серию микробатчиков, которые затем можно манипулировать с помощью Apache Spark API. Таким образом, код в пакетных и потоковых операциях может совместно использовать (в основном) один и тот же код, работающий в одной и той же инфраструктуре, тем самым уменьшая накладные расходы разработчика и оператора. Каждый побеждает.
Критика подхода Spark Streaming заключается в том, что микробачание в сценариях, где требуется низкий латентный ответ на входящие данные, может оказаться несовместимым с производительностью других инфраструктур, совместимых с потоками, таких как Apache Storm, Apache Flink и Apache Apex, все из которых используют чистый потоковый метод, а не микробатчи.
Структурированная потоковая передача
Структурированная потоковая передача (добавлена в Spark 2.x) — это Spark Streaming, что Spark SQL был для API Spark Core: API более высокого уровня и более простая абстракция для написания приложений. В случае потоковой передачи данных API более высокого уровня по существу позволяет разработчикам создавать бесконечные потоковые данные и наборы данных. Он также решает некоторые очень реальные моменты боли, с которыми пользователи боролись в ранних рамках, особенно в отношении борьбы с событиями и скорейшей доставки сообщений. Все запросы на структурированные потоки проходят через оптимизатор запросов Catalyst и могут даже запускаться интерактивно, что позволяет пользователям выполнять SQL-запросы в отношении потоковых данных в реальном времени.
Структурированная потоковая передача по-прежнему является довольно новой частью Apache Spark , отмеченные как готовые к выпуску в выпуске Spark 2.2. Тем не менее, Structured Streaming — это будущее потоковых приложений с платформой, поэтому, если вы создаете новое потоковое приложение, вы должны использовать Structured Streaming. Устаревшие API Spark Streaming будут по-прежнему поддерживаться, но проект рекомендует переносить на Structured Streaming, так как новый метод делает запись и поддержание потокового кода намного более терпимой.
Что дальше для Apache Spark?
]
Хотя Structured Streaming обеспечивает высокоуровневые улучшения Spark Streaming, в настоящее время он использует ту же схему микрообработки для обработки потоковых данных. Тем не менее, команда Apache Spark работает над непрерывной потоковой передачей без микрообработки на платформу, что должно решить многие проблемы с обработкой ответов с низкой задержкой (они требуют ~ 1 мс, что было бы очень впечатляюще). Еще лучше, потому что Structured Streaming построена поверх движка Spark SQL, поэтому использование новой технологии потоковой передачи не потребует изменений кода.
Кроме того, улучшая производительность потоковой передачи, Apache Spark будет добавлять поддержку для глубокого обучения через Deep Learning Pipelines. Используя существующую структуру трубопроводов MLlib, вы сможете создавать классификаторы всего в нескольких строках кода, а также применять настраиваемые графики Tensorflow или модели Keras к входящим данным. Эти графики и модели можно даже зарегистрировать как пользовательские Spark SQL UDF (определяемые пользователем функции), чтобы модели глубокого обучения могли применяться к данным в рамках SQL-заявлений.
Ни одна из этих функций не существует вблизи производства уже в настоящий момент, но учитывая быстрые темпы развития, которые мы видели в Apache Spark в прошлом, они должны быть готовы к лучшему времени в 2018 году.
Эта история «Что такое Apache Spark? Большая платформа для анализа данных» была изначально опубликована
InfoWorld .