Возвращение Flume с новым EP Quits

Flume releases a collaborative EP “Quits” with Reo Cragun

Flume and Reo Cragun released yesterday – July 31 st – their collaborative EP, called “Quits”. The EP includes 3 songs: “Quits”, “Levitate” and “Friends”, the last one had already been released in March.

Harley Edward StretenFlume’s real name – is an Australian DJ and Producer and this year, after a long hiatus, has already released a mixtape “Hi This Is Flume”, which counts with 17 tracks, as well as a song with London Grammar, called “Let You Know” and the already mentioned track “Friends” with Reo Cragun.

Reo Cragun is an American hip-hop artist, born and raised in Vancouver, Washington, whose better known songs are “On My Way”, “Night Crawler”, his first single “Inconsiderate” or “In Too Deep”.

These artists already mentioned that they have become friends outside the studio and, as Flume said on Apple Music Beats 1, “This EP is us as a friendship, hanging out, making tracks, having too many good songs and we’re like, ‘We need to get these out into the world’. So we were like, ‘Let’s just do an EP’. So we put them all together and there you have it. The Quits EP.”

The brand new EP Quits features 3 songs where Flume’s characteristic sounds and Reo Cragun’s voice fit and blend perfectly.

For the next times, Flume will be performing all over the world – through the US, such as Chicago, at Lollapalooza, various countries in Asia, in Australia, New Zealand or across Europe. Reo Cragun will perform with Flume in some of shows, according to the artists on an interview on Apple Music’s Beats 1, where Flume said: “We’ve been rehearsing. We just got out of rehearsals, actually. But yeah, Reo’s is going to be on pretty much all the dates and – It’s going to be fun.”

You can listen to “Quits” below:

Full Apple Music’s Beats 1 with Flume and Reo Cragun here.

Flume — управляем потоками данных. Часть 1

Привет, Хабр! В этом цикле статей я планирую рассказать о том, как можно организовать сбор и передачу данных с помощью одного из инструментов Hadoop — Apache Flume.

Первая статья посвящается основным элементам Flume, их настройкам и способам запуска Flume. На просторах Хабра уже имеется статья о том, как работать с Flume, поэтому некоторые базовые разделы будут во многом схожи с ней.

В продолжении цикла я постараюсь более подробно осветить каждый из компонентов Flume, рассказать о том, как настроить мониторинг для него, написать свою реализацию одного из элементов и многое другое.

1. Что такое Flume?

Flume представляет собой инструмент, позволяющий управлять потоками данных и, в конечном счете, передавать их на некоторый “пункт назначения” (например, в файловую систему или HDFS).

В целом, организация транспортировки данных посредством Flume напоминает создание эдакого “конвейера” или “водопровода”. Этот “конвейер” состоит из различных участков (узлов), на которых и происходит управление потоком данных (фильтрация, разделение потока и т.п.).

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

Для начала обозначим основные термины, а затем мы рассмотрим структуру одиночного узла Flume.

2. Основные термины

  • Событие (event) — единица данных с дополнительной мета-информацией. По структуре событие напоминает POST-запрос.
    • Заголовки (headers) — мета-информация, набор пар “ключ”-”значение”.
    • Содержимое (body) — собственно, данные, ради передачи которых всё затевается. Передается как byte[].

  • Клиент (client) — внешний, по отношению к узлу Flume, сервис, поставляющий данные.

    Источник (source) — отвечает за прием данных. При этом Flume предусматривает два типа источников — EventDrivenSource и PollableSource. В первом случае источник сам решает, когда добавлять события в канал (например, HTTPSource добавляет события по мере получения HTTP-запросов). PollableSource в противовес EventDrivenSource является пассивным — Flume просто периодически опрашивает источник на предмет появления новых событий.

    Сток (Sink) — компонент, отвечающий за передачу данных на следующий этап обработки. Это может быть другой узел Flume, файловая система, HDFS и т.п.

    Канал (channel) — компонент, выполняющий роль буфера при транспортировке данных. Канал является пассивным компонентом, он самостоятельно не инициирует никаких действий. Источники добавляют события в канал, в то время как стоки его опустошают.

  • Агент (agent) — процесс, в рамках которого функционируют компоненты Flume (источники, каналы, стоки). JVM Instance, в общем. Один узел может содержать несколько агентов.

3. Структура узла Flume

Правильнее было бы назвать этот подраздел “Структура агента Flume”, т.к. узел Flume может состоять из нескольких агентов. Но в рамках данной статьи все примеры будут приводиться как “один узел — один агент”, поэтому я позволю себе вольность и пока не буду разделять эти понятия.

Рассмотрим несколько конфигураций для различных жизненных случаев.

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

Такую конфигурацию можно использовать для простых целей — например, узел является замыкающим в цепочке узлов нашего «водопровода» и выполняет всего одну роль: принимает данные и записывает их в файл (непосредственно записью занимается сток). Или же узел является промежуточным и просто передает данные дальше (иногда это полезно делать для обеспечения отказоустойчивости — например, развернуть такой узел на машине с Flume-клиентом, чтобы избежать потери данных при проблемах с сетью).

Делитель
Более сложный пример, который может быть использован для разделения данных. Здесь ситуация немного другая по сравнению с одиночным стоком: наш канал опустошают два стока. Это приводит к тому, что поступающие события делятся между двумя стоками (не дублируются, а именно делятся). Такую конфигурацию можно использовать, чтобы разделить нагрузку между несколькими машинами. При этом, если одна из конечных машин выйдет из строя и привязанный к ней сток не сможет отправлять на нее события, другие стоки продолжат работу в штатном режиме. Естественно, что при этом работающей машине придется отдуваться за двоих.

Примечание: Flume располагает более тонкими инструментами для балансировки нагрузки между стоками, для этого используются Flume Sink Processor’ы. О них речь пойдет в следующих частях цикла.

Дубликатор
Такой узел Flume позволяет отправлять одни и те же события на несколько стоков. Может возникнуть вопрос — а зачем два канала, разве не может канал дублировать события сразу на два стока? Ответ — нет, поскольку не «канал раздает события», а «сток опустошает канал». Даже если бы такой механизм и существовал, то выход из строя одного из стоков привел бы к неработоспособности других (т.к. каналу бы пришлось работать по принципу “либо все смогли, либо никто”). Это объясняется тем, что при сбое на уровне стока отсылаемая пачка событий не исчезает «в никуда», а остается лежать в канале. Ибо транзакция.

Примечание: в данном примере используется безусловное дублирование — т.е. в оба канала копируется все подряд. Flume позволяет не дублировать, а разделять события по некоторым условиям — для этого используется Flume Channel Selector. О нем речь также пойдет в следующих статьях цикла.

Универсальный приемник
Еще один полезный вариант конфигурации — с несколькими источниками. Крайне полезная конфигурация, когда необходимо “слить воедино” однотипные данные, полученные различными способами.

Резюме:

  • Узел может иметь в своем составе множество источников, каналов и стоков.
  • Один источник может складывать события в несколько каналов (дублировать или распределять по некоторому правилу).
  • Несколько источников складывать события в один канал.
  • Один сток может работать только с одним каналом.
  • Несколько стоков могут забирать события из одного канала (равномерно или по некоторому правилу балансировки).

4. Конфигурация и запуск узла Flume

Думаю, пришло время практических примеров. Стандартный пакет Flume содержит множество реализаций источников/каналов/стоков для разных случаев жизни — описание по их настройке можно найти здесь. В рамках этой статьи я ограничусь самыми простыми реализациями компонентов:

  • Memchannel (канал, использующий оперативную память для хранения событий).
  • NetCat Source.
  • Logger Sink (сток, выводящий события в консоль).

Пожалуй так выглядит самая простая конфигурация для узла Flume:

Осталось теперь запустить узел с нашей конфигурацией. Сделать это можно двумя способами:

  1. На кластере Hadoop, через Cloudera Manager (в этой статье есть подробное описание того, как это сделать).
  2. Как Java-сервис, используя библиотеки Flume.

Поскольку процесс запуска Flume средствами Cloudera Manager освещен достаточно подробно, рассмотрим второй вариант — с помощью Java.

Прежде всего необходимо добавить зависимости Flume к нашему проекту. Для этого добавим в pom.xml репозиторий Clodera и два артефакта Flume — ng-sdk и ng-node.

После этого создадим класс с точкой входа:

Читатели, знакомые с Java, заметят, что можно вообще не создавать этот класс, а просто скопировать необходимые зависимости для Flume в отдельную папку и запустить Java с нужными аргументами командной строки. Но это уже дело вкуса — я предпочитаю, чтобы Maven сам подтягивал все необходимые зависимости, в том числе и разработанные нами компоненты Flume, и аккуратно всё это заворачивал в deb-пакет.

Если все пути указаны верно, а конфигурация не содержит ошибок, мы увидим в консоле вот такой лог от Flume.

Чтобы убедиться, что всё работает корректно, отправим нашему NetCat-источнику небольшой тестовый файл test.txt, в котором содержится 4 строки:

Важно, чтобы файл оканчивался переносом строки. Для NetCat-источника он является разделителем событий. Если мы не добавим в конец файла этот перенос строки, то источник будет считать, что последнее событие пришло не полностью. В результате этого он будет упорно ждать разделителя, который, естественно, никогда не придет. Итак, выполняем команду:

В результате этого NetCat должен вывести на экран три сообщения «ОК», как подтверждение того, что все строки файла благополучно отправлены и получены источником Flume. В это же время, сток должен вывести в консоль вот такие сообщения:

Примечание: Flume при запуске регистрирует свой shutdownHook, поэтому нет необходимости вручную высвобождать какие-либо ресурсы (соединения, открытые файлы и т.п.) — все компоненты узла самостоятельно завершат работу вместе с JVM.

5. Цепочка узлов Flume

Итак, мы разобрались, как настроить и запустить одиночный узел Flume. Однако для управления потоками данных одного узла явно маловато. Попробуем построить небольшую цепочку из трех узлов, выполняющих задачу деления (по сути — балансировка): первый узел Flume принимает информацию от клиента и отправляет события на два других узла. При этом события не дублируются на втором и третьем узлах, а равномерно распределяются между ними.

Соответственно, для такой схемы необходимо несколько конфигураций (для каждого узла — своя).

Конфигурации для узлов 2 и 3 в данном примере идентичны, отличаются только номерами портов. Также для связи между узлами здесь используются стандартные компоненты Flume: Avro источник и Avro сток. Подробнее они будут описаны в следующих статьях, пока же нам достаточно того, что Avro Sink может отправлять по сети события, а Avro Source может их принимать.

Соответственно, запускаться каждый из узлов должен в отдельном процессе, а параметры запуска будут выглядеть следующим образом:

Можно убедиться в работоспособности этой конфигурации, скормив первому узлу текстовый файл с сотней строк (маленькие порции данных могут пачкой отправиться на один из узлов и желаемого эффекта разделения данных мы не увидим).

Заключение

Эта статья является ознакомительной, приведенные здесь примеры конфигурации узлов Flume могут пригодиться лишь для отладки или знакомства с этим инструментом. В реальных проектах топология Flume выходит далеко за рамки одного-двух узлов, а конфигурации компонентов являются куда более сложными.

В следующей статье:

  • Использование заголовков и канальных селекторов (Channel Selector).
  • «Боевые» компоненты Flume:
    • Avro Source;
    • File Channel;
    • Avro Sink;
    • HDFS Sink;
    • File Roll Sink.
  • Мониторинг состояния узла Flume.

Возвращение Flume с новым EP Quits

После нескольких лет относительного затишья австралийский электронный продюсер Харли Стретен выпустил новый EP своего проекта Flume — Quits. В работе также принял участие американский хип-хоп исполнитель Рио Крейган.

На самом деле возвращение случилось еще в марте, когда Flume выпустил микстейп из 17 треков, многие из которых были оригинальные, хоть и длились по полторы минуты. Также была пара полноценных новых треков, среди которых Let You Know, записанный с London Grammar, и Friends с Рио Крейганом. Сотрудничество с последним переросло в небольшой мини-альбом из трех треков. “Этот EP — это наша дружба, тусовка, просто создание новых треков, креатив, и было много хороших треков. Мы просто сказали “Нужно это выпустить”. И мы сделали EP”.

Мини-альбом Quits предлагает обновленное звучание резиновых битов Flume. Один из самых модных битмейкеров выложил музыкальный след из электронной перкуссии для наэлектризованного звонкого вокала Крейгана, периодически накладывая поверх всего саунда скрипучие атональные созвучия. Путем соединения отдельных хаотичных наборов звуков он получает мелодию в титульном треке, а дальше использует приглушенные биты вместе с искаженными арпеджио. Результатом всей работы стали мощные электронные R’n’B-сессии, которые хотели бы иметь у себя в альбоме все, кто идет в ногу со временем.

“Честно говоря, я наслаждался отдыхом. Но сейчас я рад вернуться, мы только что репетировали и работали над новым шоу. Оно будет крутым. Я думаю, что просто пытаюсь делать что-то другое. Я стараюсь, возможно, не быть в одном месте всё время, как точка на сцене, а двигаться. Оставить старую парадигму и заставить двигаться всех. Может быть, у меня даже будет саксофон, я не знаю”, — дополнил Стретен.

Слушать мини-альбом Flume — Quits:

Слушайте Quits — Flume на Яндекс.Музыке

Если вы нашли ошибку, выделите фрагмент текста и нажмите Ctrl+Enter.

«Quits» lyrics

Flume & Reo Cragun Lyrics

Whole damn time we was loving undercover yeah
Don’t you know that kills me inside
She always gets the best of me I lose my mind
I hate to start fights but I’m about to blow

Fuck that shit
Fuck that shit
I’m calling quits (Calling quits)
She lead me on then leave me lone
Let’s call it quits (Call it quits)

I had to get it off the chest
Damn you make a nigga stressed
I hardly gotta flex but when I do I know you feel that
Change my bitch like a season
Cut her off I delete her
All smiles Mona Lisa
She give me too many reasons
How you do me like that
How you turn your back
I’ma pack these bags
I don’t want you back

Whole damn time we was loving undercover yeah (We were)
Oh how that killed me inside (It did, it did)
She always gets the best of me I lose my mind
I hate to start fights but I’m about to blow

Fuck that shit
Fuck that shit
I’m calling quits (Calling quits)
She lead me on then leave me lone
Let’s call it quits (Call it quits)

You done went and made a mess
Heisman with the step
Tried to catch me slippin’
Had to swerve that shit (Yeah)
Always gave you respect
You ain’t give that back
Now she wanna make amends
And I don’t want that

Whole damn time we was loving undercover yeah
Oh how that killed me inside
She always gets the best of me I lose my mind
I hate to start fights but I’m about to blow one time

Fuck that shit
Fuck that shit
I’m calling quits (Calling quits)
She lead me on then leave me lone
Let’s call it quits (Call it quits)

Ca-callin quits
Ca-callin quits
I’m callin quits
I’m done with this
I’m done with this
Ca-callin quits
Ca-callin quits
I’m callin quits
I’m done with this

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: