Підручник Apache Flume: Що таке, ArchiПриклад tecture & Hadoop

Що таке Apache Flume у Hadoop?

Apache Flume це надійна та розподілена система для збору, агрегування та переміщення величезної кількості даних журналу. Він має просту, але гнучку архітектуру, засновану на потокових потоках даних. Apache Flume використовується для збору даних журналу, наявних у файлах журналу, з веб-серверів і агрегування їх у HDFS для аналізу.

Flume у Hadoop підтримує кілька джерел, як-от:

  • 'tail' (який передає дані з локального файлу та записує в HDFS через Flume, подібно до команди Unix 'tail')
  • Системні журнали
  • Apache log4j (увімкнути Java програми для запису подій у файли в HDFS через Flume).

Потік Archiтектура

A Агент флюму це JVM процес, який складається з 3 компонентів –Джерело лотка, Канал лотка та Раковина лотка– через які події поширюються після ініціювання зовнішнім джерелом.

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

Деякі важливі функції FLUME

  • Flume має гнучкий дизайн, заснований на потокових потоках даних. Він стійкий до збоїв і надійний з кількома механізмами відновлення після відмови. Flume Big data пропонує різні рівні надійності, зокрема "найкраща доставка" і "наскрізна доставка". Доставка найкращим способом не допускає збою вузла Flume, тоді як "наскрізна доставка" режим гарантує доставку навіть у разі відмови кількох вузлів.
  • Flume переносить дані між джерелами та приймачами. Цей збір даних може бути запланованим або керованим подією. Flume має власний механізм обробки запитів, який дозволяє легко трансформувати кожен новий пакет даних перед тим, як він буде переміщений до призначеного приймача.
  • це можливо Лобові раковини включати HDFS та HBase. Flume Hadoop також можна використовувати для передачі даних про події, включаючи, але не обмежуючись, дані мережевого трафіку, дані, створені веб-сайтами соціальних мереж, і повідомлення електронної пошти.

Налаштування каналу, бібліотеки та вихідного коду

Перш ніж розпочати сам процес, переконайтеся, що у вас встановлено 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

Apache Flume 1.4.0 використовувався в цьому підручнику Flume.

Налаштування Flume, бібліотеки та вихідного коду

Далі натисніть

Налаштування Flume, бібліотеки та вихідного коду

Крок 3) Скопіюйте завантажений архів у вибраний вами каталог і витягніть вміст за допомогою такої команди

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

Налаштування Flume, бібліотеки та вихідного коду

Ця команда створить новий каталог під назвою apache-flume-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 до

/lib/

Можливо, один або весь скопійований файл 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

- Усі полум’яні баночки, тобто flume-ng-*-1.4.0.jar від http://mvnrepository.com/artifact/org.apache.flume

Завантажуйте дані з Twitter за допомогою Flume

Крок 1) Перейдіть до каталогу, що містить файли вихідного коду.

Крок 2) Установка ЗАКЛЮЧЕННЯ містити /lib/* та ~/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)Створіть банку

Спочатку створіть Manifest.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) Скопіюйте цю банку в /lib/

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». Це відобразиться "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/твіти/

Змініть файл «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'.

Перейдіть до ' /lib'

компакт-диск /lib

sudo mv protobuf-java-2.4.1.jar ~/

Потокова передача даних Twitter за допомогою Flume

b. Знайдіть JAR-файл "guava", як показано нижче

find . -name "guava*"

Потокова передача даних Twitter за допомогою Flume

Рухатися guava-10.0.1.jar з ' /lib'.

sudo mv guava-10.0.1.jar ~/

Потокова передача даних Twitter за допомогою Flume

c. Завантажити guava-17.0.jar від http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Потокова передача даних Twitter за допомогою Flume

Тепер скопіюйте цей завантажений файл jar у ' /lib'

Крок 4) Перейдіть до ' /bin' і запустіть Flume як-

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

Потокова передача даних Twitter за допомогою Flume

Вікно командного рядка, де flume отримує твіти-

Потокова передача даних Twitter за допомогою Flume

З повідомлення командного вікна ми бачимо, що вихідні дані записані /user/hduser/flume/tweets/ каталог.

Тепер відкрийте цей каталог за допомогою веб-браузера.

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

/flume/твіти/

Потокова передача даних Twitter за допомогою Flume