Ответ 1
Было бы полезно, если бы вы немного расширили ваши конкретные варианты использования. Что вы пытаетесь достичь в связи с "анализом Bigdata"? Краткий ответ... это зависит :-)
Вот несколько ключевых архитектурных моментов, которые следует учитывать применительно к Google Cloud Dataflow v. Spark и Hadoop MR.
Ресурс Mgmt: Cloud Dataflow - среда исполнения по требованию. В частности - когда вы выполняете задание в потоке данных, ресурсы распределяются по требованию только для этого задания. Нет совместного использования ресурсов между рабочими местами. По сравнению с кластером Spark или MapReduce вы обычно развертываете кластер из X узлов, а затем отправляете задания, а затем настраиваете ресурсы узлов между заданиями. Конечно, вы можете создавать и разрушать эти кластеры, но модель потока данных ориентирована на разработку без помощи рук в отношении управления ресурсами. Если вы хотите оптимизировать использование ресурсов в соответствии с требованиями работы, Поток данных - это надежная модель для контроля затрат и почти забывает о настройке ресурсов. Если вы предпочитаете кластер с несколькими арендаторами, я бы посоветовал вам взглянуть на Google Cloud Dataproc, поскольку он обеспечивает аспекты управления кластером по требованию, такие как Dataflow, но сосредоточен на рабочих нагрузках класса Hadoop, таких как MR, Spark, Pig,...
Интерактивность: В настоящее время Cloud Dataflow не предоставляет интерактивный режим. Это означает, что после отправки задания рабочие ресурсы привязываются к представленному графику, и большая часть данных загружается в ресурсы по мере необходимости. Spark может быть лучшей моделью, если вы хотите загрузить данные в кластер через RDD в памяти, а затем динамически выполнять запросы. Проблема заключается в том, что по мере увеличения размеров данных и сложности запросов вам придется обрабатывать devOps. Теперь, если большинство ваших запросов могут быть выражены в синтаксисе SQL, вы можете посмотреть на BigQuery. BigQuery обеспечивает аспекты потока данных "по требованию" и позволяет интерактивно выполнять запросы к огромным объемам данных, например петабайтам. Самым большим преимуществом BigQuery, на мой взгляд, является то, что вам не нужно думать/беспокоиться о распределении аппаратных средств, чтобы справиться с размерами ваших данных. Это означает, что по мере роста размеров ваших данных вам не нужно думать о конфигурации оборудования (памяти и размера диска).
Модель программирования: модель программирования потока данных функционально смещена по сравнению с классической моделью MapReduce. Есть много общего между Spark и Dataflow с точки зрения API-примитивов. На что следует обратить внимание: 1) Основным языком программирования потока данных является Java. В работе находится Python SDK. Пакет данных SDK Java с открытым исходным кодом был перенесен в Scala. Сегодня Spark имеет более широкий выбор поверхностей SDK с GraphX, Streaming, Spark SQL и ML. 2) Поток данных - это унифицированная модель программирования для групповой и потоковой разработки DAG. Цель состояла в том, чтобы устранить сложность и переключение затрат при переходе между пакетными и потоковыми моделями. Один и тот же график может без проблем работать в любом режиме. 3) Сегодня Cloud Dataflow не поддерживает сходящееся/итеративное выполнение графа. Если вам нужна мощь чего-то вроде MLib, тогда Spark - это то, что вам нужно. Имейте в виду, что это состояние дел сегодня.
Потоковое & Оконное управление: поток данных (построенный на основе унифицированной модели программирования) был спроектирован как высоконадежная, долговечная и масштабируемая среда исполнения для потоковой передачи. Одно из ключевых отличий между Dataflow и Spark заключается в том, что Dataflow позволяет легко обрабатывать данные с точки зрения их истинного времени события, а не только обрабатывать их во время прибытия в график. Вы можете размещать данные в фиксированных, скользящих, сеансовых или пользовательских окнах в зависимости от времени события или времени прибытия. В потоке данных также предусмотрены триггеры (примененные к Windows), которые позволяют вам контролировать обработку данных, поступающих с опозданием. Net-net вы указываете уровень контроля правильности, чтобы удовлетворить потребности вашего анализа. Например, допустим, у вас есть мобильная игра, которая взаимодействует со 100 краевыми узлами. Эти узлы создают 10000 вторых событий, связанных с игровым процессом. Допустим, группа узлов не может связаться с вашей системой потокового анализа. В случае потока данных - как только эти данные поступят - вы можете контролировать, как вы хотите обрабатывать данные в соответствии с вашими потребностями в правильности запросов. Поток данных также позволяет обновлять потоковые задания во время их полета. Например, допустим, вы обнаружили логическую ошибку в преобразовании. Вы можете обновить свою работу в полете, не теряя существующего состояния Windowed. Net-net, вы можете поддерживать свою деятельность.
Net-нетто:
- если вы действительно в основном выполняете работу в стиле ETL (фильтрация, формирование, объединение и т.д.) или пакетный стиль, то MapReduce Dataflow - отличный путь, если вы хотите минимальные devOps.
- если вам нужно реализовать графики в стиле ML, пройдите путь Spark и попробуйте Dataproc
- если вы делаете ML, и вам сначала нужно сделать ETL, чтобы очистить данные тренировок, внедрите гибрид с Dataflow и Dataproc
- если вам нужна интерактивность, Spark - хороший выбор, как и BigQuery, если вы/можете выражать свои запросы в SQL
- если вам нужно обрабатывать задания ETL и/или MR по потокам, Dataflow - хороший выбор.
Итак... какие у тебя сценарии?