Урок за Apache Flume: Какво е, Archiтектура и пример за Hadoop

Какво е Apache Flume в Hadoop?

Apache Flume е надеждна и разпределена система за събиране, агрегиране и преместване на огромни количества лог данни. Той има проста, но гъвкава архитектура, базирана на потоци от данни. Apache Flume се използва за събиране на регистрационни данни, присъстващи в лог файлове от уеб сървъри и агрегирането им в HDFS за анализ.

Flume в Hadoop поддържа множество източници като –

  • „опашка“ (която предава данни от локален файл и записва в HDFS чрез Flume, подобно на Unix команда „опашка“)
  • Системни регистрационни файлове
  • Apache log4j (разрешете Java приложения за запис на събития във файлове в HDFS чрез Flume).

воденичен улей Archiтекстура

A Flume агент е JVM процес, който има 3 компонента –Източник на канал, Канал на канал намлява Мивка за канал– през които се разпространяват събития след иницииране от външен източник.

воденичен улей Archiтекстура
воденичен улей Archiтекстура
  1. В горната диаграма събитията, генерирани от външен източник (WebServer), се консумират от Flume Data Source. Външният източник изпраща събития към източника на Flume във формат, който се разпознава от целевия източник.
  2. Flume Source получава събитие и го съхранява в един или повече канали. Каналът действа като хранилище, което пази събитието, докато не бъде погълнато от поглъщането на канала. Този канал може да използва локална файлова система, за да съхранява тези събития.
  3. Flume sink премахва събитието от канал и го съхранява във външно хранилище като например HDFS. Може да има множество агенти на канал, в който случай приемникът на канал препраща събитието към източника на канал на следващия агент на канал в потока.

Някои важни характеристики на FLUME

  • Flume има гъвкав дизайн, базиран на потоци от данни. Той е устойчив на грешки и е стабилен с множество механизми за възстановяване при срив и възстановяване. Flume Big data предлага различни нива на надеждност, които включват „доставка с най-добри усилия“ и „доставка от край до край“. Доставка с най-добри усилия не толерира отказ на Flume възел, докато „доставка от край до край“ Режимът гарантира доставка дори в случай на повреда на множество възли.
  • Flume пренася данни между източници и приемници. Това събиране на данни може да бъде планирано или управлявано от събитие. Flume има своя собствена машина за обработка на заявки, която улеснява трансформирането на всяка нова партида от данни, преди да бъде преместена в предвидения приемник.
  • Възможен Мивки за канали include 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) Копирайте изтегления tarball в директорията по ваш избор и извлечете съдържанието, като използвате следната команда

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 е името на главния клас. Моля, обърнете внимание, че трябва да натиснете клавиша Enter в края на този ред.

Заредете данни от Twitter с помощта на Flume

Сега създайте JARMyTwitterSourceForFlume.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 приложение

Трябва да копираме Consumer key, Consumer secret, Access token и Access token secret за актуализиране на „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 файловете от tarball на Flume не са съвместими с Hadoop 2.2.0. Така че ще трябва да следваме стъпките по-долу в този пример на Apache Flume, за да направим Flume съвместим с Hadoop 2.2.0.

a. Движение protobuf-java-2.4.1.jar от ' /lib'.

Отиди ' /lib'

cd /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 извлича Tweets-

Поточно предаване на данни от Twitter с помощта на Flume

От съобщението на командния прозорец можем да видим, че изходът е записан /потребител/hduser/flume/туитове/ директория.

Сега отворете тази директория с помощта на уеб браузър.

Стъпка 5) За да видите резултата от зареждането на данни, като използвате отворен браузър http://localhost:50070/ и прегледайте файловата система, след което отидете в директорията, където са заредени данните, т.е.

/flume/туитове/

Поточно предаване на данни от Twitter с помощта на Flume