Учебное пособие по Apache Flume: что такое, ArchiПример tecture и Hadoop
Что такое Apache Flume в Hadoop?
Апач Флюм — это надежная и распределенная система для сбора, агрегирования и перемещения огромных объемов данных журналов. Он имеет простую, но гибкую архитектуру, основанную на потоковой передаче данных. Apache Flume используется для сбора данных журналов, присутствующих в файлах журналов с веб-серверов, и их агрегирования в HDFS для анализа.
Flume в Hadoop поддерживает несколько источников, например:
- «хвост» (который передает данные из локального файла и записывает в HDFS через Flume, аналогично команде Unix «хвост»)
- Системные журналы
- Апач log4j (давать возможность Java приложения для записи событий в файлы в HDFS через Flume).
акведук Archiтекстура
A Флюм агент - это JVM процесс, который состоит из 3 компонентов –Источник лотка, Канал лотка и Водосточная раковина– посредством чего распространяются события после инициирования во внешнем источнике.
- На приведенной выше диаграмме события, генерируемые внешним источником (веб-сервером), используются источником данных Flume. Внешний источник отправляет события источнику Flume в формате, распознаваемом целевым источником.
- Flume Source получает событие и сохраняет его в одном или нескольких каналах. Канал действует как хранилище, в котором событие хранится до тех пор, пока оно не будет использовано приемником потока. Этот канал может использовать локальную файловую систему для хранения этих событий.
- Приемник Flume удаляет событие из канала и сохраняет его во внешнем репозитории, например, HDFS. Может существовать несколько агентов потока, и в этом случае приемник потока пересылает событие источнику потока следующего агента потока в потоке.
Некоторые важные особенности FLUME
- Flume имеет гибкую конструкцию, основанную на потоковой передаче данных. Он отказоустойчив и надежен, имеет множество механизмов аварийного переключения и восстановления. Большие данные Flume имеют разные уровни надежности, включая «доставка с максимальной эффективностью» и «сквозная доставка». лучшие-усилия доставка не допускает сбоев узлов Flume, тогда как «сквозная доставка» Режим гарантирует доставку даже в случае сбоя нескольких узлов.
- Flume передает данные между источниками и стоками. Этот сбор данных может быть запланированным или управляемым событиями. Flume имеет собственный механизм обработки запросов, который позволяет легко преобразовывать каждый новый пакет данных перед его перемещением в намеченный приемник.
- Возможное Раковины с лотком включают HDFS и HBaseFlume Hadoop также можно использовать для передачи данных о событиях, включая, помимо прочего, данные сетевого трафика, данные, генерируемые сайтами социальных сетей, и сообщения электронной почты.
Настройка Flume, библиотеки и исходного кода
Прежде чем мы начнем сам процесс, убедитесь, что у вас установлен Hadoop. Измените пользователя на «hduser» (идентификатор, используемый при настройке Hadoop, вы можете переключиться на идентификатор пользователя, используемый во время конфигурации Hadoop)
Шаг 1) Создайте новый каталог с именем «FlumeTutorial».
sudo mkdir FlumeTutorial
- Дайте разрешения на чтение, запись и выполнение
sudo chmod -R 777 FlumeTutorial
- Копировать файлы MyTwitterSource.java и MyTwitterSourceForFlume.java в этом каталоге.
Загрузите исходные файлы отсюда
Проверьте права доступа ко всем этим файлам, и если разрешения на чтение отсутствуют, предоставьте их:
Шаг 2) Загрузите Apache Flume с сайта: https://flume.apache.org/download.html
В этом руководстве по Flume использовалась Apache Flume 1.4.0.
Следующий щелчок
Шаг 3) Скопируйте загруженный tarball в каталог по вашему выбору и извлеките содержимое с помощью следующей команды:
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Эта команда создаст новый каталог с именем 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
После того, как эта команда дает разрешение на чтение 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/*"
Шаг 3) Скомпилируйте исходный код с помощью команды-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Шаг 4)Создать банку
Сначала создайте Манифест.txt файл с помощью текстового редактора по вашему выбору и добавьте в него строку ниже:
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. здесь flume.mytwittersource.MyTwitterSourceForFlume это имя основного класса. Обратите внимание, что вам нужно нажать клавишу ввода в конце этой строки.
Теперь создайте JAR 'MyTwitterSourceForFlume.jar' в виде-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Шаг 5) Скопируйте эту банку в /либ/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Шаг 6) Перейдите в каталог конфигурации Flume, /конф
Если файл flume.conf не существует, скопируйте flume-conf.properties.template и переименуйте его в flume.conf.
sudo cp flume-conf.properties.template flume.conf
If Flume-env.sh не существует, то скопируйте Flume-env.sh.template и переименуйте его в Flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
Создание приложения Twitter
Шаг 1) Создайте приложение Twitter, войдя в систему https://developer.twitter.com/
Шаг 2) Перейдите на «Мои приложения» (Эта опция выпадает, когда 'Яйцо' нажата кнопка в правом верхнем углу)
Шаг 3) Создайте новое приложение, нажав «Создать новое приложение»
Шаг 4) Заполните данные приложения, указав название приложения, описание и веб-сайт. Вы можете обратиться к примечаниям, приведенным под каждым полем ввода.
Шаг 5) Прокрутите страницу вниз и примите условия, отметив 'Да, я согласен' и нажмите кнопку«Создайте свое приложение Twitter»
Шаг 6) В окне только что созданного приложения перейдите на вкладку, «Ключи API» прокрутите страницу вниз и нажмите кнопку «Создать мой токен доступа»
Шаг 7) Обновите страницу.
Шаг 8) Нажмите на «Проверить OAuth». Это отобразит «ОАутент» настройки приложения.
Шаг 9) Изменить 'flume.conf' используя эти Настройки OAuth. Действия по изменению 'flume.conf' приведены ниже.
Нам нужно скопировать ключ потребителя, секрет потребителя, токен доступа и секрет токена доступа для обновления «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
Шаг 2) Также установите TwitterAgent.sinks.HDFS.hdfs.path как показано ниже,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /флюм/твиты/
Знать , и , см. значение параметра 'fs.defaultFS' установить в $HADOOP_HOME/etc/hadoop/core-site.xml
Шаг 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"
Шаг 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 ~/
b. Найдите файл JAR «гуава», как показано ниже.
find . -name "guava*"
Двигаемся гуава-10.0.1.jar из ' /либ'.
sudo mv guava-10.0.1.jar ~/
c. Скачать гуава-17.0.jar от http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Теперь скопируйте этот загруженный файл jar в ' /lib'
Шаг 4) Перейдите на ' /бин' и запустите Flume как-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Окно командной строки, в котором Flume получает твиты:
Из сообщения в командном окне мы видим, что вывод записывается в /пользователь/hduser/флюм/твиты/ каталог.
Теперь откройте этот каталог с помощью веб-браузера.
Шаг 5) Чтобы увидеть результат загрузки данных, откройте браузер http://localhost:50070/ и просмотрите файловую систему, затем перейдите в каталог, в который были загружены данные, то есть -
/флум/твиты/