Підручник 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 компонентів –Джерело лотка, Канал лотка та Раковина лотка– через які події поширюються після ініціювання зовнішнім джерелом.

- На наведеній вище діаграмі події, згенеровані зовнішнім джерелом (веб-сервером), споживаються джерелом даних Flume. Зовнішнє джерело надсилає події до джерела Flume у форматі, який розпізнається цільовим джерелом.
- Flume Source отримує подію та зберігає її в одному або кількох каналах. Канал діє як сховище, яке зберігає подію, доки її не поглине каналізаційний канал. Цей канал може використовувати локальну файлову систему для зберігання цих подій.
- Приймач Flume видаляє подію з каналу та зберігає її у зовнішньому сховищі, наприклад, HDFS. Може бути кілька агентів каналу, і в цьому випадку приймач каналу пересилає подію до джерела каналу наступного агента каналу в потоці.
Деякі важливі функції FLUME
- Flume має гнучкий дизайн, заснований на потокових потоках даних. Він стійкий до збоїв і надійний з кількома механізмами відновлення після відмови. Flume Big data пропонує різні рівні надійності, зокрема "найкраща доставка" і "наскрізна доставка". Доставка найкращим способом не допускає збою вузла Flume, тоді як "наскрізна доставка" режим гарантує доставку навіть у разі відмови кількох вузлів.
- Flume переносить дані між джерелами та приймачами. Цей збір даних може бути запланованим або керованим подією. Flume має власний механізм обробки запитів, який дозволяє легко трансформувати кожен новий пакет даних перед тим, як він буде переміщений до призначеного приймача.
- це можливо Лобові раковини включати HDFS та HBase. Flume Hadoop також можна використовувати для передачі даних про події, включаючи, але не обмежуючись, дані мережевого трафіку, дані, створені веб-сайтами соціальних мереж, і повідомлення електронної пошти.
Налаштування каналу, бібліотеки та вихідного коду
Перш ніж розпочати сам процес, переконайтеся, що у вас встановлено 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
Apache Flume 1.4.0 використовувався в цьому підручнику Flume.
Далі натисніть
Крок 3) Скопіюйте завантажений архів у вибраний вами каталог і витягніть вміст за допомогою такої команди
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Ця команда створить новий каталог під назвою 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
Після цієї команди надається дозвіл на читання 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/*"
Крок 3) Скомпілюйте вихідний код за допомогою команди-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Крок 4)Створіть банку
Спочатку створіть Manifest.txt файл за допомогою текстового редактора на ваш вибір і додайте в нього рядок нижче-
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. тут flume.mytwittersource.MyTwitterSourceForFlume це назва головного класу. Зверніть увагу, що вам потрібно натиснути клавішу вводу в кінці цього рядка.
Тепер створіть JAR 'MyTwitterSourceForFlume.jar' як-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Крок 5) Скопіюйте цю банку в /lib/
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». Це відобразиться "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:// : / /flume/твіти/
Знати , та , дивіться значення параметра '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'.
Перейдіть до ' /lib'
компакт-диск /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Знайдіть JAR-файл "guava", як показано нижче
find . -name "guava*"
Рухатися guava-10.0.1.jar з ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Завантажити guava-17.0.jar від http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Тепер скопіюйте цей завантажений файл jar у ' /lib'
Крок 4) Перейдіть до ' /bin' і запустіть Flume як-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Вікно командного рядка, де flume отримує твіти-
З повідомлення командного вікна ми бачимо, що вихідні дані записані /user/hduser/flume/tweets/ каталог.
Тепер відкрийте цей каталог за допомогою веб-браузера.
Крок 5) Щоб побачити результат завантаження даних, за допомогою браузера відкрийте http://localhost:50070/ і перегляньте файлову систему, а потім перейдіть до каталогу, куди було завантажено дані, тобто-
/flume/твіти/