Почта spark

Огромные возможности электронной почты не вызывают сомнений. Отправляем ли мы последний вирусный ролик с Youtube нашим друзьям, согласовываем ли собеседование или общаемся ли с потенциальными клиентами. В прошлом году, группа Radicati оценила, что в мире стало на 4,3 миллиарда почтовых ящиков больше. Исследование Pew говорит о том, что 92% взрослых людей пользуются электронной почтой регулярно. Она стала неотъемлемой частью нашего безумного технологичного мира, хотя у нее есть множество альтернатив. Так что электронная почта далека от того, чтобы считаться мертвой (правда – есть даже сайт, который называется почтанемертва.com!).

Если вы хоть как-то похожи на остальных пользователей почты, вы наверняка нашли себе какой-нибудь потрясающий клиент, который способен выдержать абсолютно все. И когда вы нашли своего почтового напарника, переходить на другой почтовый клиент может быть очень трудно, и потому многие пользователи этого попросту избегают. Но порой, такой шаг может быть продиктован обстоятельствами. Может ваш клиент больше не обновляется разработчиками или не совместим с операционной системой вашего нового компьютера.

Переход с Mac на Windows

Многие пользователи Mac сталкиваются с этой ситуацией. Они решили (по какой-то причине) перейти с Mac на Windows или Linux. Вы можете установить Windows-совместимую версию вашего текущего почтового клиента на вашу новую ОС. Однако, некоторые клиенты для Mac являются эксклюзивами, и вам придется искать альтернативу, которая работает на Windows.

Мы решили составить список наших любимых Windows-альтернатив для почтовых клиентов OS X. Все почтовые клиенты ниже поддерживают IMAP и POP3, и мы решили не включать стоимость в сравнение, ведь выбор идеального почтового клиента – вопрос функций, а не стоимости. Пожалуйста, не забывайте, что большинство Windows-альтернатив доступны и на Mac. Мы предполагаем, что вы еще не пользовались приложениями ниже.

Давайте для начала посмотрим на лучшие варианты, доступные для Mac-устройств, чтобы увидеть, с чем приходится конкурировать приложениям для Windows.

Лучшие почтовые клиенты для Ma

Apple Mail

права: http://images.macworld.com/

Почта Apple – почтовый клиент по умолчанию на всех Mac-компьютерах, и любим многими упорными Apple-фанатиками. Почта предлагает базовые функции, такие как возможность интуитивно управлять несколькими учетными записями или организовывать Входящие по своему вкусу. Наряду с бонусом в виде бесшовной интеграции с другими приложениями Apple (основная причина использовать Почту), она может похвастаться простым и интуитивно понятным интерфейсом. Она чем-то похожа на современную версию Outlook, только не такая «захламленная».

Почему популярно: Удобный дизайн, интуитивная интеграция с продуктами Apple

Airmail 3

права: http://assets.ilounge.com/

Airmail 3 – другой, очень популярный почтовый клиент для OS X. Основной причиной такой популярности является красивый, удобный интерфейс и полная персонализация. Для любителей Apple, которые предпочитали интуитивный дизайн Почты, но при этом хотелось больше функциональности и продуктивности, Airmail 3 – явный фаворит. Он предлагает именно то, что вам нужно от почтового клиента, при этом добавляя щепотку прогресса (вроде интеграции с Asana и Trello), что и радует его пользователей последнюю пару лет.

Чтобы интегрировать Airmail с Asana, откройте Airmail, зайдите в Настройки > Сервисы > Asana > Привязать. Asana – отличное приложения для командной работе, ведь оно помогает командам отслеживать их работу. Чтобы включить интеграцию Trello, зайдите в Настройки Airmail Сервисы > Trello > Привязать.

Почему популярно: Высокая продуктивность, персонализация.

Spark

права: http://media.idownloadblog.com/

Как и остальные Mac-клиенты в этом списке, Spark предлагает легкость в установке и усовершенствованный интерфейс. Основной причиной того, что он является одним из самых скачиваемых клиентов для OS X, является его способность интегрироваться с почти всеми остальными инструментами продуктивности (Evernote, OneNote, Dropbox, Google Диск, Pocket и прочими). Есть десятки дополнительных виджетов, с помощью которых вы можете создать почти что новое приложение, а также главная особенность Spark – смарт-ящик, который классифицирует ваши письма.

Почему популярно: Полная персонализация, комплексная интеграция сторонних приложений

Теперь перейдем к лучшим альтернативам наших любимых OS X клиентов для Windows.

Лучшие альтернативы для Windows

Microsoft Outlook

права: https://cdn0.vox-cdn.com/

Мы не можем написать обзор лучших почтовых клиентов для Windows, не упомянув Microsoft Outlook. Этот почтовый клиент уже «оброс бородой» и как правило правил балом, когда речь шла про функциональную почтовую программу. Вы можете скачать Outlook как в настольном виде (если он уже не на вашем компьютере), так и получить доступ к виртуальной версии. Outlook легко интегрируется с остальными приложениями Microsoft Office Suite, обеспечивая невероятно продуктивный вариант для тех, кто любит иметь «полный комплект». Если говорить об управлении почтой и интеграции контактов, Outlook силен из-за своей связи с Microsoft Office Suite. Установка Outlook проводится отдельно, а весь комплект прост, но не так легок в использовании, как хотелось бы.

Плюс, приложение календаря игнорировалось последние несколько лет, что делает его чуть слабее других клиентов. Организацию и персонализацию можно оценить, как «Средне» в Outlook. Он не гонится за новыми функциями. MS Outlook может показаться запутанным, особенно для бывших Mac-пользователей, привыкших к простому и интуитивному интерфейсу своих приложений.

Чем похоже: Более полная альтернатива Почте Apple

Mailbird

Mailbird был вдохновлен Sparrow, почтовым клиентом для Mac. Нашим основателям нравился этот почтовый клиент, но в 2012 году он был приобретен Google за $25 млн. Потому они решили создать приложение похожее на Sparrow, но для еще не насыщенного рынка Windows. Так был рожден Mailbird.

Многие из наших пользователей, которые перешли с Mac, полюбили Mailbird за широкие возможности персонализации, наглядность и просто лучшие ощущения, которые позволяют пользователям стать настоящими «почтовыми-ниндзя». Наши разработки вкладывают много сил в создание простого и интуитивно понятного интерфейса, чтобы подарить людям уникальную альтернативу Outlook. Управлять множеством аккаунтов в Mailbird – до смешного просто, управление хранением тоже не представляет никаких проблем, с возможность координировать Dropbox, Google Документы, Evernore, Asana и прочее.

Только вчера мы запустили альфа-версию нашего новейшего менеджера контактов, который позволяет вам импортировать и экспортировать контакты откуда угодно и держать всю вашу сеть общения организованной. Он синхронизируется с Outlook и Gmail и сочетает в себя как уникальные, так и общедоступные возможности, чтобы с легкостью объединить все ваши-онлайн контакты.

Mailbird – почти как Mac-приложение для Windows.

Скачайте Mailbird Бесплатно

Вы также можете организовать и искать в почте по фото в профиле или настраиваемым папкам и ярлыкам, что обеспечивает эффективность системы. Если вам нужна персонализация, то вам понравится Mailbird. Вы можете настроить почти все, начиная с иконок, шрифтов, цветов, и заканчивая ярлыками, языками, звуками уведомлений и «темной темой». Хотя у Mailbird нет встроенного календаря, Google Календарь интегрирован и позволяет вам объединить свое расписание и почту в одном удобном месте.

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

Чем похоже: Куча интегрированных приложений, персонализация и общие ощущения

eM Client

Хотя персонализация в eM Client лучше, чем в Microsoft Outlook, он все еще остается очень на него похожим. Контакты и календари хорошо интегрируются. Установка проста и приложение в целом дает невероятные возможности персонализации и дополнений, а значит, как и с Airmail 3 и Spark, которые доступны для OSX, или Mailbird для Windows, вы сможете настроить свой почтовый клиент под себя.

Стильный, простой и удобный интерфейс оставляет приятные ощущения и не доставляет хлопот. Кто-то может сказать, что это приложение не такое современное, как конкуренты, но, если вам нравится базовый дизайн Microsoft Outlook, дополненный возможностью персонализации, доступной в таких Mac-приложениях, как Airmail 3 и Spark, то вам понравится eM Client.

Чем похоже: Персонализация, как в Airmail 3 и Spark

Thunderbird

Похожий на MS Outlook, Thunderbird на рынке уже какое-то время. И хотя разработчики из компании Mozilla заморозили дальнейшую разработку, он все еще остается очень популярным выбором среди людей, ищущих надежный и бесплатный почтовый клиент.

Как в Mailbird и eM Client, управлять несколькими аккаунтами – проще некуда. Импорт и экспорт контактов довольно прост. И хотя Thunderbird не поставляет с интуитивной интеграцией календаря, вы можете скачать дополнение Lightning, чтобы использовать календарь вместе с основным приложением. Установка Thunderbird тоже не доставит хлопот. Интерфейс немного «угловат», если сравнивать его с Почтой Apple. Это может иметь решающее значение для некоторых пользователей, совершающих свой «великий переход». Но Thunderbird предлагает бесконечные варианты персонализации, позволяя пользователям создавать то приложение, которое нужно именно им – что-то, что еще не освоили даже лучшие приложения Mac (пока).

Чем похоже: Работает под OS X и Windows, полная персонализация

Так какой Windows-клиент лучший для перехода?

В конце концов, выбор идеального почтового клиента сводится к двум вещам: (1) Частота использования и (2) те функции, которые вам нужны. Главное – найти то приложение, которое работает с вами, а не против вас. Будем надеяться, что список выше поможет вам найти лучший почтовый клиент для вашего перехода с Mac на Windows.

Что вы думаете? Какой ваш любимый почтовый клиент для Windows?

Mailbird – ваш эталон продуктивности для Windows.

Скачайте Mailbird Бесплатно

Разработчик с украинскими корнями Readdle выпустил долгожданную версию для Android своего главного продукта — Email-клиента Spark. Выход приложения очень грамотно приурочен к закрытию популярного Google Inbox.

Сравним два сервиса для Android по функциональным возможностям и дополнительным «фишкам» и узнаем — стоит ли переходить на Spark?

«Входящие»

У Spark за входящие сообщения на самом деле отвечают два экрана. Обычные «Входящие» не особо интересны: это просто хронологический список всех полученных сообщений, которые не отправлены в другие папки или архив. Но есть ещё одна сущность: Smart Inbox.

«Умность» раздела заключается в автоматическом распределении Email по категориям «Персональные», «Уведомления» и «Подписки». Примерно такая же идея есть и в Inbox, но групп больше (семь штук!).

Spark
Inbox

Иначе выглядят и отсортированные письма: в Spark каждой категории выделен отдельный блок, а у продукта Google сверху отображаются карточки с названием типа, а ниже — список не вошедших ни в одну из категорий сообщений. Что удобнее, вопрос почти личный, у Spark нагляднее, у Inbox — компактнее, возможно, ненужные сейчас пользователю категории не мозолят глаза.

В обоих приложениях есть жесты для выполнения быстрых действий над сообщениями. Но у Spark, во-первых, их можно настроить, а во-вторых, их просто больше.

Свайп вправо в Inbox архивирует сообщение или группу писем, влево — откладывает на заданное время. У Spark можно потянуть карточку также в обе стороны, но длинный свайп в любую из них вызовет ещё по одному действию. Можно поставить на любой из четырёх жестов удаление, архивацию, перемещение в папку, прикрепление (аналог избранного), откладывание и перемещение в «Спам».

Особенно удобно в Inbox отображение вложений в списке сообщений: можно открыть документ или изображение прямо из «Входящих». Автоматически обрабатываются даже ссылки на YouTube.

Внешний вид

Дизайн — вещь субъективная, но попробуем разобраться и с этим. Inbox от Google следует стандартам Material Design. Парадигма слегка устаревшая, ведь сейчас корпорация продвигает Material Theme, но приложение всё ещё выглядит приятно и легко.

Spark

Spark за гайдлайнами не следит, дизайн выполнен в своём стиле, такой же используется и в версии для iPhone и iPad. На экране загрузки, например, не «красится» статусбар в фон приложения: выглядит для 2019 года страшновато. Зато есть классная анимация открытия письма, хотя иногда она и дёргается: спишем это на ошибку первых версий.

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

Inbox

Поиск

Тут-то Spark далеко впереди продукта Google. Хотя в Inbox существуют операторы поиска, чтобы точно искать по фразе или отфильтровать сообщения по дате, все выражения нужно заучивать или каждый раз обращаться к справке.

У Spark используется естественный язык: встроенная поисковая система легко поймёт запрос «From Maria with attachments last week». Правда, только на английском, поэтому надеемся на скорую локализацию. Часто используемые запросы можно сохранять, история поисков тоже есть.

«Фишки»

На основном экране каждого из сервисов есть иконка булавки: она отвечает за закреплённые сообщения, которые могут понадобиться в будущем. Все умеют и откладывать сообщения для прочтения позже, но Spark способен и отправлять Email по расписанию: удобно писать письма ночью и отсылать автоматически утром, чтобы не тревожить собеседника.

Что касается почтовых сервисов, Spark намного всеяднее: поддерживаются любые серверы с протоколом IMAP, то есть и «Яндекс.Почта», и Mail.Ru заработают без проблем. В случае с Google настройка вовсе происходит в один клик. Inbox «переваривает» только почту на Gmail. Уже к ней можно добавить и сторонние ящики, но они редко синхронизируются.

Добавлять по несколько аккаунтов можно и там, и там, а Spark ещё и позволит выделить отдельные профили цветом.

Одна из главных особенностей Spark — совместное редактирование. Да, можно писать сообщения в несколько рук, причём видеть в прямом эфире, кто и что пишет. Если кто-то работал в «Google Документах» одновременно с другими пользователями, то понимает, как это работает. Для выбора членов рабочей «команды» есть соответствующий пункт в настройках приложения.

Кроме того, разработчики Spark обещают скоро встроить интеграции со сторонними сервисами, шаблоны сообщений, быстрые ответы и встроенный календарь. Чем не идеальный сервис для рабочей почты?

Настройки

Краткий экскурс по настройкам Spark:

  • Просмотр профиля на Spark и отключение сопряжённых с ним устройств
  • Подключение новых почтовых аккаунтов от разных сервисов
    • Управление конкретным аккаунтом
      • Установка имени
      • Управление уведомлениями
        • Все уведомления
        • Только важные
        • Без уведомлений
      • Стандартная подпись для аккаунта
      • «Зеркала» аккаунта
    • Установка ящика по умолчанию
    • Цветовая дифференциация аккаунтов
  • Управление командами
  • Персонализация
    • Изменение порядка пунктов меню
    • Детальная настройка свайпов
    • Настройка виджета (плавающей кнопки «Написать»)
      • Настройка позиции виджета
      • Настройка дополнительных функций виджета
  • Просмотрщик Email
    • Функция по умолчанию
      • Архивировать
      • Удалить
      • Удалить и архивировать
    • Когда Email удалён или архивирован
      • Открыть следующее письмо
      • Вернуться к списку писем
    • Открывать ссылки в
      • Стандартном браузере
      • Внутри приложения
  • Настройка подписи сообщения
  • Настройка времени для отложенных сообщений, напоминаний и «Отправить позже»
  • Уведомления
    • Превью уведомлений
      • Полное превью
      • Отправитель и тема письма
      • Только отправитель
      • Без превью
    • Действия
    • Основное и дополнительное действия
      • Отметить как прочитанное
      • Архивировать
      • Удалить
  • Настройки звука оповещений
  • Безопасность
    • Загрузка изображений с удалённого сервера
    • Защита действий над уведомлениями
    • Блокировка паролем
    • Блокировка биометрическим датчиком

Spark

А теперь к настройкам Inbox от Google:

  • Когда сообщения скрываются, выполнять действие
    • Отметить как выполненное
    • Удалить
  • Настройка времени для отложенных сообщений
  • Настройка подписи сообщения
  • Обновлять отложенные объекты при смене часового пояса
    • Спрашивать каждый раз
    • Всегда
    • Никогда
  • Уведомления
    • Включить/отключить уведомления
    • Уровень уведомлений
      • Все
      • Только приоритетные
    • Вибрация
    • Звук уведомления
  • Срок автономного хранения писем на устройстве
  • Настройка уведомлений для отдельных категорий и меток
Inbox

Как говорится, комментарии излишни.

Вывод

Spark точно не проигрывает Inbox по функциональности, а во многом даже обгоняет: чего только стоит совместное редактирование и блокировка приложения по паролю. Да, продукт Readdle визуально может для кого-то выглядеть хуже, но обилие опций явно перевешивает.

Впрочем, какое-то время ещё можно пользоваться и Inbox: лазейка для обхода блокировки мобильного приложения уже найдена.

Как работает фреймворк Apache Spark? В статье рассмотрим, что прячется под капотом этого инструмента для кластерных вычислений.

В предыдущей статье познакомились с проблемой – обильные, бесконечные потоки данных – и её решением: фреймворк Apache Spark. Здесь, во второй части, сосредоточимся на внутренней архитектуре Spark и структурах данных.

«Первооткрыватели использовали волов для перевозки тяжёлых грузов. И когда вол не мог сдвинуть бревно с места, они не пытались вырастить вола покрупнее. Нам стоит стремиться не к повышению мощности одного компьютера, а к увеличению количества компьютерных систем.» – Грейс Хоппер

Поскольку масштабы данных росли стремительными и зловещими темпами, понадобился способ быстрой обработки вероятных петабайт данных. И невозможно было добиться, чтобы один компьютер обрабатывал такой объём с разумной скоростью. Эта проблема решается путём создания кластера машин для выполнения работы. Но как эти машины работают вместе для решения общей проблемы?

Встречайте фреймворк Spark

Spark – фреймворк для кластерных вычислений и крупномасштабной обработки данных. Spark предлагает набор библиотек на 3 языках (Java, Scala, Python) для унифицированного вычислительного движка. Что на самом деле это означает?

Унифицированный: в Spark нет необходимости собирать приложение из нескольких API или систем. Spark предоставляет встроенные API для выполнения работы.

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

Библиотеки: фреймворк Spark состоит из ряда библиотек, которые созданы для решения задач Data Science. Spark включает библиотеки для SQL (SparkSQL), машинного обучения (MLlib), обработки потоковых данных (Spark Streaming и Structured Streaming) и обработки графов (GraphX).

Приложение Spark

Каждое Spark-приложение состоит из управляющего процесса – драйвера (Driver) – и набора распределённых рабочих процессов – исполнителей (Executors).

Spark Driver

Driver запускает метод main() нашего приложения. Здесь создаётся SparkContext. Обязанности Spark Driver:

  • Запускает задание на узле в нашем кластере или на клиенте и планирует его выполнение с помощью менеджера кластера
  • Отвечает на пользовательскую программу или ввод
  • Анализирует, планирует и распределяет работу между исполнителями
  • Хранит метаданные о запущенном приложении и отображает в веб-интерфейсе

Spark Executors

Исполнитель (Executor) – распределённый процесс, который отвечает за выполнение задач. У каждого приложения Spark собственный набор исполнителей. Они работают в течение жизненного цикла отдельного приложения Spark.

  • Исполнители делают всю обработку данных задания Spark.
  • Сохраняют результаты в памяти, а на диске – только тогда, когда это специально указывается в программе-драйвере (Driver Program).
  • Возвращает результаты драйверу после их завершения.
  • Каждый узел может иметь от 1 исполнителя на узел до 1 исполнителя на ядро.

Workflow приложения Spark

Когда отправляем задание в Spark для обработки, многое остаётся за кулисами.

  1. Наше автономное приложение запускается и инициализирует SparkContext. Только при наличии SparkContext приложение называется драйвером.
  2. Наша программа-драйвер (Driver program) запрашивает у менеджера кластеров (Cluster Manager) ресурсы для запуска исполнителей.
  3. Менеджер кластеров запускает исполнителей.
  4. Наш драйвер запускает собственно код Spark.
  5. Исполнители запускают задания и отправляют результаты драйверу.
  6. SparkContext останавливается, а исполнители закрываются и возвращают ресурсы обратно в кластер.

Пересмотр MaxTemperature

Присмотритесь к заданию Spark, которое писали в первой части, для поиска максимальной температуры по стране. Эта абстракция скрывает много кода настройки, включая инициализацию SparkContext, заполним пробелы:

Настройка Spark задания MaxTemperature

Помните, что Spark – фреймворк, в этом случае реализованный на Java. И до строки 16 Spark не должен ничего делать. Конечно, до этого мы инициализировали SparkContext, однако загрузка данных в RDD – первый фрагмент кода, который требует отправки работы нашим исполнителям.

К этому времени термин «RDD» встречался многократно, пора дать ему определение.

Обзор архитектуры Spark

Чёткая многоуровневая архитектура Spark со слабосвязанными компонентами основывается на двух главных абстракциях:

  • Устойчивые распределённые наборы данных (RDD – Resilient Distributed Datasets)
  • Направленный ациклический граф (DAG – Directed Acyclic Graph)

Устойчивые распределённые наборы данных

RDD – строительные блоки Spark: всё состоит из них. Даже высокоуровневые Spark API (DataFrames, Datasets) состоят из RDD под капотом. Что значит быть устойчивым распределённым набором данных?

  • Resilient – Устойчивый: поскольку Spark работает на кластере компьютеров, потеря данных из-за аппаратного сбоя представляет собой серьёзную проблему, поэтому RDD отказоустойчивые и восстанавливаются в случае сбоя.
  • Distributed – Распределённый: один RDD хранится на нескольких узлах кластера, которые не принадлежат одному источнику (и одной точке отказа). Таким образом, кластер оперирует RDD параллельно.
  • Dataset – Набор данных: коллекция значений – вы наверняка уже знали это.

Данные, с которыми мы работаем в Spark, хранятся в той или иной форме в RDD, поэтому понимать их – необходимость.

Spark предлагает API «высшего уровня», разработанные на основе RDD для абстрагирования сложности: DataFrame и Dataset. Если сосредоточиться на циклах «чтение – вычисление – вывод» (REPL), Spark-Submit и Spark-Shell в Scala и Python ориентируются на экспертов по аналитическим данным, которым часто требуется повторный анализ набора данных. Без понимания RDD по-прежнему не обойтись, так как это базовая структура всех данных в Spark.

Разговорный эквивалент RDD: «Распределённая структура данных». JavaRDD<String> – это, по сути, List<String>, рассредоточенный по узлам в нашем кластере, причём каждый узел получает разные порции списка. Фреймворк Spark побуждает мыслить в распределённом контексте, постоянно.

RDD работают путём разделения данных на несколько разделов (Partition), которые хранятся на каждом узле-исполнителе. Каждый узел выполняет работу только на собственных разделах. В этом и заключается мощь Spark: если исполнитель выходит из строя, или не удаётся выполнить задачу, Spark восстанавливает только необходимые разделы из источника и повторно отправляет задачу для завершения.

Распределение Spark RDD между исполнителями

Операции с RDD

RDD Immutable, это означает, что после создания эти наборы никак не изменяются, а только трансформируются (transformed). Идея трансформации RDD лежит в основе Spark, и задания Spark рассматриваются как комбинация этих шагов:

  • Загрузка данных в RDD
  • Трансформация RDD
  • Выполнение действия над RDD

Spark определяет набор API для работы с RDD, которые разбиты на две большие группы: Трансформации и Действия .

Трансформации создают новый RDD из существующего.

Действия возвращают значение или значения программе-драйверу после выполнения вычисления над RDD.

Например, map-функция weatherData.map() – это трансформация, которая передаёт каждый элемент RDD в функцию.

Reduce – это действие RDD, которое объединяет все элементы RDD с использованием некоторой функции и возвращает конечный результат в программу-драйвер.

Ленивые вычисления

«Я выбираю ленивого человека для выполнения трудной работы. Потому что ленивый человек найдёт простой способ решения задачи.» – Билл Гейтс

Трансформации в Spark «ленивые». Это означает, что когда сообщаем Spark о создании RDD с помощью трансформаций существующего RDD, он не будет генерировать этот набор данных, пока не выполнится действие над ним или его дочерним элементом. Затем Spark выполнит трансформацию и действие, которое её запустило. Поэтому Spark работает намного эффективнее.

Ещё раз рассмотрим объявления функций из нашего предыдущего примера Spark, чтобы определить, какие функции – действия, а какие – трансформации:

16: JavaRDD<String> weatherData = sc.textFile(inputPath);

Строка 16 – не действие и не трансформация; это функция sc, нашего JavaSparkContext.

17: JavaPairRDD<String, Integer> tempsByCountry = weatherData.mapToPair(new Func.....

Строка 17 – трансформация RDD WeatherData, в которой преобразовываем каждую строку WeatherData в пару (Город, Температура)

26: JavaPairRDD<String, Integer> maxTempByCountry = tempsByCountry.reduce(new Func....

Строка 26 – также трансформация, потому что перебираем пары ключ-значение. Это трансформация tempsByCountry, в которой происходит свёртка данных каждого города до его наивысшей зарегистрированной температуры.

31: maxTempByCountry.saveAsHadoopFile(destPath, String.class, Integer.class, TextOutputFormat.class);

Наконец, в строке 31 запускаем действие Spark: сохраняем RDD в файловой системе. Поскольку у Spark ленивая модель выполнения, только после этой строки Spark генерирует weatherData, tempsByCountry и maxTempsByCountry, прежде чем окончательно сохранить результат.

Направленный ациклический граф

Каждый раз, когда выполняется действие над RDD, Spark создает DAG, конечный граф без направленных циклов (в противном случае наше задание будет выполняться вечно). Помните, что граф – набор связанных вершин и рёбер, и этот граф ничем не отличается. Каждая вершина в DAG – функция Spark, некоторая операция, которая выполняется над RDD (map, mapToPair, reduByKey и т. д.).

В MapReduce DAG состоит из двух вершин: Map → Reduce.

В приведённом выше примере с MaxTemperatureByCountry граф посложнее:

parallelize → map → mapToPair → reduce → saveAsHadoopFile

С помощью DAG Spark оптимизирует план выполнения и минимизирует перемешивание. Рассмотрение DAG выходит за рамки этого обзора Spark.

Циклы выполнения

Используя наш новый словарь, ещё раз рассмотрим определение проблемы с MapReduce, данное в первой части и приведенное ниже:

«MapReduce справляется с пакетной обработкой данных. Однако отстаёт, когда дело доходит до повторного анализа и небольших циклов обратной связи. Единственный способ повторно использовать данные между вычислениями – записать их во внешнюю систему хранения (например, HDFS).»

«Повторно использовать данные между вычислениями»? Звучит так, будто над RDD совершается несколько действий! Предположим, хотим выполнить два вычисления над фалом «data.txt»:

  • Общая длина всех строк в файле
  • Длина самой длинной строки в файле

В MapReduce каждая задача требует отдельного задания или мудрёной реализации MulitpleOutputFormat. Spark превращает это в пустяк с четырьма лёгкими шагами:

  1. Загружаем содержимое data.txt в RDD
JavaRDD<String> lines = sc.textFile("data.txt");

2. Применяем функцию вычисления длины к каждой строке из lines ​​с помощью map (лямбда-функции используются для краткости)

JavaRDD<Integer> lineLengths = lines.map(s -> s.length());

3. Для определения общей длины выполним reduce для lineLengths, чтобы найти сумму длин строк, в нашем случае сумму всех элементов в RDD.

int totalLength = lineLengths.reduce((a, b) -> a + b);

4. Чтобы вычислить наибольшую длину, применяем reduce к lineLengths

int maxLength = lineLengths.reduce((a, b) -> Math.max(a,b));

Обратите внимание, что шаги 3 и 4 – действия RDD, поэтому они возвращают результат программе-драйверу, в данном случае Java int. Также помните, что Spark ленив и отказывается выполнять работу, пока не увидит действие. В этом случае он не начнёт ничего делать до шага 3.

К этому моменту мы представили проблему с данными и её решение: фреймворк Apache Spark. Теперь рассмотрели архитектуру и workflow Spark, его главную внутреннюю абстракцию (RDD) и модель выполнения.

Оригинал

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *