Учебное пособие по Apache Flume: что такое, ArchiПример tecture и Hadoop

Что такое Apache Flume в Hadoop?

Апач Флюм — это надежная и распределенная система для сбора, агрегирования и перемещения огромных объемов данных журналов. Он имеет простую, но гибкую архитектуру, основанную на потоковой передаче данных. Apache Flume используется для сбора данных журналов, присутствующих в файлах журналов с веб-серверов, и их агрегирования в HDFS для анализа.

Flume в Hadoop поддерживает несколько источников, например:

  • «хвост» (который передает данные из локального файла и записывает в HDFS через Flume, аналогично команде Unix «хвост»)
  • Системные журналы
  • Апач log4j (давать возможность Java приложения для записи событий в файлы в HDFS через Flume).

акведук Archiтекстура

A Флюм агент - это JVM процесс, который состоит из 3 компонентов –Источник лотка, Канал лотка и Водосточная раковина– посредством чего распространяются события после инициирования во внешнем источнике.

акведук Archiтекстура
акведук Archiтекстура
  1. На приведенной выше диаграмме события, генерируемые внешним источником (веб-сервером), используются источником данных Flume. Внешний источник отправляет события источнику Flume в формате, распознаваемом целевым источником.
  2. Flume Source получает событие и сохраняет его в одном или нескольких каналах. Канал действует как хранилище, в котором событие хранится до тех пор, пока оно не будет использовано приемником потока. Этот канал может использовать локальную файловую систему для хранения этих событий.
  3. Приемник Flume удаляет событие из канала и сохраняет его во внешнем репозитории, например, HDFS. Может существовать несколько агентов потока, и в этом случае приемник потока пересылает событие источнику потока следующего агента потока в потоке.

Некоторые важные особенности FLUME

  • Flume имеет гибкую конструкцию, основанную на потоковой передаче данных. Он отказоустойчив и надежен, имеет множество механизмов аварийного переключения и восстановления. Большие данные Flume имеют разные уровни надежности, включая «доставка с максимальной эффективностью» и «сквозная доставка». лучшие-усилия доставка не допускает сбоев узлов Flume, тогда как «сквозная доставка» Режим гарантирует доставку даже в случае сбоя нескольких узлов.
  • Flume передает данные между источниками и стоками. Этот сбор данных может быть запланированным или управляемым событиями. Flume имеет собственный механизм обработки запросов, который позволяет легко преобразовывать каждый новый пакет данных перед его перемещением в намеченный приемник.
  • Возможное Раковины с лотком включают HDFS и HBaseFlume Hadoop также можно использовать для передачи данных о событиях, включая, помимо прочего, данные сетевого трафика, данные, генерируемые сайтами социальных сетей, и сообщения электронной почты.

Настройка Flume, библиотеки и исходного кода

Прежде чем мы начнем сам процесс, убедитесь, что у вас установлен Hadoop. Измените пользователя на «hduser» (идентификатор, используемый при настройке Hadoop, вы можете переключиться на идентификатор пользователя, используемый во время конфигурации Hadoop)

Настройка Flume, библиотеки и исходного кода

Шаг 1) Создайте новый каталог с именем «FlumeTutorial».

sudo mkdir FlumeTutorial
  1. Дайте разрешения на чтение, запись и выполнение
    sudo chmod -R 777 FlumeTutorial
  2. Копировать файлы MyTwitterSource.java и MyTwitterSourceForFlume.java в этом каталоге.

Загрузите исходные файлы отсюда

Проверьте права доступа ко всем этим файлам, и если разрешения на чтение отсутствуют, предоставьте их:

Настройка Flume, библиотеки и исходного кода

Шаг 2) Загрузите Apache Flume с сайта: https://flume.apache.org/download.html

В этом руководстве по Flume использовалась Apache Flume 1.4.0.

Настройка Flume, библиотеки и исходного кода

Следующий щелчок

Настройка Flume, библиотеки и исходного кода

Шаг 3) Скопируйте загруженный tarball в каталог по вашему выбору и извлеките содержимое с помощью следующей команды:

sudo tar -xvf apache-flume-1.4.0-bin.tar.gz

Настройка Flume, библиотеки и исходного кода

Эта команда создаст новый каталог с именем Apache-флюм-1.4.0-bin и извлеките в него файлы. Этот каталог будет называться в остальной части статьи.

Шаг 4) Настройка библиотеки Flume

Копировать twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar, flume-ng-sdk-1.4.0.jar в

/либ/

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

В моем случае, twitter4j-core-4.0.1.jar был необходимость выполнить разрешение. Я отозвал его, как показано ниже:

sudo chmod -x twitter4j-core-4.0.1.jar

Настройка Flume, библиотеки и исходного кода

После того, как эта команда дает разрешение на чтение twitter4j-core-4.0.1.jar для всех.

sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar

Обратите внимание, что я скачал-

– twitter4j-core-4.0.1.jar от https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

Все пламенные JAR-файлы, т.е. флюм-нг-*-1.4.0.jar от http://mvnrepository.com/artifact/org.apache.flume

Загрузка данных из Twitter с помощью Flume

Шаг 1) Перейдите в каталог, содержащий файлы исходного кода.

Шаг 2) Поставьте CLASSPATH содержать /либ/* и ~/FlumeTutorial/flume/mytwittersource/*

export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"

Загрузка данных из Twitter с помощью Flume

Шаг 3) Скомпилируйте исходный код с помощью команды-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Загрузка данных из Twitter с помощью Flume

Шаг 4)Создать банку

Сначала создайте Манифест.txt файл с помощью текстового редактора по вашему выбору и добавьте в него строку ниже:

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. здесь flume.mytwittersource.MyTwitterSourceForFlume это имя основного класса. Обратите внимание, что вам нужно нажать клавишу ввода в конце этой строки.

Загрузка данных из Twitter с помощью Flume

Теперь создайте JAR 'MyTwitterSourceForFlume.jar' в виде-

jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class

Загрузка данных из Twitter с помощью Flume

Шаг 5) Скопируйте эту банку в /либ/

sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/

Загрузка данных из Twitter с помощью Flume

Шаг 6) Перейдите в каталог конфигурации Flume, /конф

Если файл flume.conf не существует, скопируйте flume-conf.properties.template и переименуйте его в flume.conf.

sudo cp flume-conf.properties.template flume.conf

Загрузка данных из Twitter с помощью Flume

If Flume-env.sh не существует, то скопируйте Flume-env.sh.template и переименуйте его в Flume-env.sh

sudo cp flume-env.sh.template flume-env.sh

Загрузка данных из Twitter с помощью Flume

Создание приложения Twitter

Шаг 1) Создайте приложение Twitter, войдя в систему https://developer.twitter.com/

Создание приложения Twitter

Создание приложения Twitter

Шаг 2) Перейдите на «Мои приложения» (Эта опция выпадает, когда 'Яйцо' нажата кнопка в правом верхнем углу)

Создание приложения Twitter

Шаг 3) Создайте новое приложение, нажав «Создать новое приложение»

Шаг 4) Заполните данные приложения, указав название приложения, описание и веб-сайт. Вы можете обратиться к примечаниям, приведенным под каждым полем ввода.

Создание приложения Twitter

Шаг 5) Прокрутите страницу вниз и примите условия, отметив 'Да, я согласен' и нажмите кнопку«Создайте свое приложение Twitter»

Создание приложения Twitter

Шаг 6) В окне только что созданного приложения перейдите на вкладку, «Ключи API» прокрутите страницу вниз и нажмите кнопку «Создать мой токен доступа»

Создание приложения Twitter

Создание приложения Twitter

Шаг 7) Обновите страницу.

Шаг 8) Нажмите на «Проверить OAuth». Это отобразит «ОАутент» настройки приложения.

Создание приложения Twitter

Шаг 9) Изменить 'flume.conf' используя эти Настройки OAuth. Действия по изменению 'flume.conf' приведены ниже.

Создание приложения Twitter

Нам нужно скопировать ключ потребителя, секрет потребителя, токен доступа и секрет токена доступа для обновления «flume.conf».

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

Измените файл flume.conf.

Шаг 1) Откройте 'flume.conf' в режиме записи и установите значения для следующих параметров:

sudo gedit flume.conf

Скопируйте ниже содержание-

MyTwitAgent.sources = Twitter
MyTwitAgent.channels = MemChannel
MyTwitAgent.sinks = HDFS
MyTwitAgent.sources.Twitter.type = flume.mytwittersource.MyTwitterSourceForFlume
MyTwitAgent.sources.Twitter.channels = MemChannel 
MyTwitAgent.sources.Twitter.consumerKey = <Copy consumer key value from Twitter App>
MyTwitAgent.sources.Twitter.consumerSecret = <Copy consumer secret value from Twitter App>
MyTwitAgent.sources.Twitter.accessToken = <Copy access token value from Twitter App>
MyTwitAgent.sources.Twitter.accessTokenSecret = <Copy access token secret value from Twitter App>
MyTwitAgent.sources.Twitter.keywords = guru99
MyTwitAgent.sinks.HDFS.channel = MemChannel
MyTwitAgent.sinks.HDFS.type = hdfs
MyTwitAgent.sinks.HDFS.hdfs.path = hdfs://localhost:54310/user/hduser/flume/tweets/
MyTwitAgent.sinks.HDFS.hdfs.fileType = DataStream
MyTwitAgent.sinks.HDFS.hdfs.writeFormat = Text
MyTwitAgent.sinks.HDFS.hdfs.batchSize = 1000
MyTwitAgent.sinks.HDFS.hdfs.rollSize = 0
MyTwitAgent.sinks.HDFS.hdfs.rollCount = 10000
MyTwitAgent.channels.MemChannel.type = memory
MyTwitAgent.channels.MemChannel.capacity = 10000
MyTwitAgent.channels.MemChannel.transactionCapacity = 1000

Измените файл Flume.conf.

Шаг 2) Также установите TwitterAgent.sinks.HDFS.hdfs.path как показано ниже,

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /флюм/твиты/

Измените файл Flume.conf.

Знать , и , см. значение параметра 'fs.defaultFS' установить в $HADOOP_HOME/etc/hadoop/core-site.xml

Измените файл Flume.conf.

Шаг 3) Чтобы сбросить данные в HDFS, когда они появятся, удалите запись ниже, если она существует:

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Пример: потоковая передача данных Twitter с помощью Flume

Шаг 1) Откройте 'flume-env.sh' в режиме записи и установите значения для параметров ниже,

JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"

Потоковая передача данных Twitter с помощью Flume

Шаг 2) Запустить Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Шаг 3) Два файла JAR из архива Flume несовместимы с Hadoop 2.2.0. Итак, нам нужно будет выполнить следующие шаги в этом примере Apache Flume, чтобы сделать Flume совместимым с Hadoop 2.2.0.

a. Двигаемся protobuf-java-2.4.1.jar из ' /либ'.

Перейдите на ' /lib'

CD /lib

sudo mv protobuf-java-2.4.1.jar ~/

Потоковая передача данных Twitter с помощью Flume

b. Найдите файл JAR «гуава», как показано ниже.

find . -name "guava*"

Потоковая передача данных Twitter с помощью Flume

Двигаемся гуава-10.0.1.jar из ' /либ'.

sudo mv guava-10.0.1.jar ~/

Потоковая передача данных Twitter с помощью Flume

c. Скачать гуава-17.0.jar от http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Потоковая передача данных Twitter с помощью Flume

Теперь скопируйте этот загруженный файл jar в ' /lib'

Шаг 4) Перейдите на ' /бин' и запустите Flume как-

./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf

Потоковая передача данных Twitter с помощью Flume

Окно командной строки, в котором Flume получает твиты:

Потоковая передача данных Twitter с помощью Flume

Из сообщения в командном окне мы видим, что вывод записывается в /пользователь/hduser/флюм/твиты/ каталог.

Теперь откройте этот каталог с помощью веб-браузера.

Шаг 5) Чтобы увидеть результат загрузки данных, откройте браузер http://localhost:50070/ и просмотрите файловую систему, затем перейдите в каталог, в который были загружены данные, то есть -

/флум/твиты/

Потоковая передача данных Twitter с помощью Flume