Урок за 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 компонента –Източник на канал, Канал на канал намлява Мивка за канал– през които се разпространяват събития след иницииране от външен източник.

- В горната диаграма събитията, генерирани от външен източник (WebServer), се консумират от Flume Data Source. Външният източник изпраща събития към източника на Flume във формат, който се разпознава от целевия източник.
- Flume Source получава събитие и го съхранява в един или повече канали. Каналът действа като хранилище, което пази събитието, докато не бъде погълнато от поглъщането на канала. Този канал може да използва локална файлова система, за да съхранява тези събития.
- Flume sink премахва събитието от канал и го съхранява във външно хранилище като например HDFS. Може да има множество агенти на канал, в който случай приемникът на канал препраща събитието към източника на канал на следващия агент на канал в потока.
Някои важни характеристики на FLUME
- Flume има гъвкав дизайн, базиран на потоци от данни. Той е устойчив на грешки и е стабилен с множество механизми за възстановяване при срив и възстановяване. Flume Big data предлага различни нива на надеждност, които включват „доставка с най-добри усилия“ и „доставка от край до край“. Доставка с най-добри усилия не толерира отказ на Flume възел, докато „доставка от край до край“ Режимът гарантира доставка дори в случай на повреда на множество възли.
- Flume пренася данни между източници и приемници. Това събиране на данни може да бъде планирано или управлявано от събитие. Flume има своя собствена машина за обработка на заявки, която улеснява трансформирането на всяка нова партида от данни, преди да бъде преместена в предвидения приемник.
- Възможен Мивки за канали include 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) Копирайте изтегления tarball в директорията по ваш избор и извлечете съдържанието, като използвате следната команда
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 е името на главния клас. Моля, обърнете внимание, че трябва да натиснете клавиша Enter в края на този ред.
Сега създайте JARMyTwitterSourceForFlume.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' са дадени по-долу.
Трябва да копираме 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
Стъпка 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 файловете от 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 ~/
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 извлича Tweets-
От съобщението на командния прозорец можем да видим, че изходът е записан /потребител/hduser/flume/туитове/ директория.
Сега отворете тази директория с помощта на уеб браузър.
Стъпка 5) За да видите резултата от зареждането на данни, като използвате отворен браузър http://localhost:50070/ и прегледайте файловата система, след което отидете в директорията, където са заредени данните, т.е.
/flume/туитове/