Apache Flume 튜토리얼:이란 무엇입니까? Archi강의 및 Hadoop 예제

Hadoop의 Apache Flume이란 무엇입니까?

아파치 플룸 방대한 양의 로그 데이터를 수집, 집계 및 이동하기 위한 안정적이고 분산된 시스템입니다. 스트리밍 데이터 흐름을 기반으로 하는 간단하면서도 유연한 아키텍처를 갖추고 있습니다. Apache Flume은 웹 서버에서 로그 파일에 있는 로그 데이터를 수집하고 이를 분석을 위해 HDFS에 집계하는 데 사용됩니다.

Hadoop의 Flume은 다음과 같은 여러 소스를 지원합니다.

  • 'tail'(로컬 파일의 데이터를 파이프하고 Flume을 통해 HDFS에 기록하며 Unix 명령 'tail'과 유사)
  • 시스템 로그
  • 아파치 log4j (할 수 있게 하다 Java Flume을 통해 HDFS의 파일에 이벤트를 쓰는 애플리케이션)

독감 Archi강의

A Flume 에이전트 하는 JVM 3가지 구성요소가 있는 프로세스 –플룸 소스, 플룸 채널 그리고 플룸 싱크– 외부 소스에서 시작된 이벤트는 이를 통해 전파됩니다.

독감 Archi강의
독감 Archi강의
  1. 위 다이어그램에서 외부 소스(WebServer)에 의해 생성된 이벤트는 Flume Data Source에 의해 소비됩니다. 외부 소스는 대상 소스에서 인식되는 형식으로 이벤트를 Flume 소스로 보냅니다.
  2. Flume Source는 이벤트를 수신하여 하나 이상의 채널에 저장합니다. 채널은 수로 싱크에 의해 소비될 때까지 이벤트를 유지하는 저장소 역할을 합니다. 이 채널은 이러한 이벤트를 저장하기 위해 로컬 파일 시스템을 사용할 수 있습니다.
  3. Flume 싱크는 채널에서 이벤트를 제거하고 이를 HDFS와 같은 외부 저장소에 저장합니다. 여러 수로 에이전트가 있을 수 있으며, 이 경우 수로 싱크는 흐름의 다음 수로 에이전트의 수로 소스로 이벤트를 전달합니다.

FLUME의 주요 기능

  • Flume은 스트리밍 데이터 흐름을 기반으로 유연한 설계를 갖추고 있습니다. 여러 장애 조치 및 복구 메커니즘을 통해 내결함성이 있고 강력합니다. Flume 빅 데이터는 다음과 같은 다양한 수준의 신뢰성을 제공합니다. '최선을 다한 배송''엔드 투 엔드 배송'. 최선의 노력 전달 Flume 노드 오류를 용납하지 않는 반면 '엔드 투 엔드 배송' 모드는 여러 노드에 장애가 발생하는 경우에도 전달을 보장합니다.
  • Flume은 소스와 싱크 간에 데이터를 전달합니다. 이러한 데이터 수집은 예약되거나 이벤트 중심으로 이루어질 수 있습니다. Flume에는 의도한 싱크로 이동하기 전에 각각의 새로운 데이터 배치를 쉽게 변환할 수 있는 자체 쿼리 처리 엔진이 있습니다.
  • 가능한 수로 싱크HDFS 그리고 H베이스. Flume Hadoop은 네트워크 트래픽 데이터, 소셜 미디어 웹사이트 및 이메일 메시지에서 생성된 데이터를 포함하되 이에 국한되지 않는 이벤트 데이터를 전송하는 데에도 사용할 수 있습니다.

Flume, 라이브러리 및 소스 코드 설정

실제 프로세스를 시작하기 전에 Hadoop이 설치되어 있는지 확인하십시오. 사용자를 'hduser'로 변경합니다(Hadoop 구성 중에 사용된 ID, Hadoop 구성 중에 사용된 사용자 ID로 전환할 수 있음)

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

이 Flume 튜토리얼에서는 Apache Flume 1.4.0이 사용되었습니다.

Flume, 라이브러리 및 소스 코드 설정

다음 클릭

Flume, 라이브러리 및 소스 코드 설정

단계 3) 다운로드한 tarball을 원하는 디렉토리에 복사하고 다음 명령을 사용하여 내용을 추출합니다.

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

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.jarhttps://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

- 모든 Flame JAR 즉, flume-ng-*-1.4.0.jar http://mvnrepository.com/artifact/org.apache.flume

Flume을 사용하여 Twitter에서 데이터 로드

단계 1) 소스 코드 파일이 포함된 디렉터리로 이동합니다.

단계 2) 세트 클래스 패스 포함하다 /lib/* 그리고 ~/FlumeTutorial/flume/mytwittersource/*

export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"

Flume을 사용하여 Twitter에서 데이터 로드

단계 3) 다음 명령을 사용하여 소스 코드를 컴파일합니다.

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Flume을 사용하여 Twitter에서 데이터 로드

단계 4)항아리 만들기

먼저 매니페스트.txt 원하는 텍스트 편집기를 사용하여 파일을 만들고 그 안에 아래 줄을 추가하세요.

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. 여기 flume.mytwittersource.MyTwitterSourceForFlume 메인 클래스의 이름입니다. 이 줄 끝에서 Enter 키를 눌러야 한다는 점에 유의하세요.

Flume을 사용하여 Twitter에서 데이터 로드

이제 JAR '을 생성합니다.MyTwitterSourceForFlume.jar' 같이-

jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class

Flume을 사용하여 Twitter에서 데이터 로드

단계 5) 이 항아리를 다음 위치에 복사하세요. /lib/

sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/

Flume을 사용하여 Twitter에서 데이터 로드

단계 6) Flume의 구성 디렉터리로 이동합니다. /conf

flume.conf가 없으면 flume-conf.properties.template을 복사하고 이름을 flume.conf로 바꿉니다.

sudo cp flume-conf.properties.template flume.conf

Flume을 사용하여 Twitter에서 데이터 로드

If flume-env.sh 존재하지 않는 경우 복사하세요. flume-env.sh.template 이름을 flume-env.sh

sudo cp flume-env.sh.template flume-env.sh

Flume을 사용하여 Twitter에서 데이터 로드

트위터 애플리케이션 만들기

단계 1) 로그인하여 Twitter 애플리케이션 만들기 https://developer.twitter.com/

트위터 애플리케이션 만들기

트위터 애플리케이션 만들기

단계 2) We Buy Orders 신청서를 클릭하세요. '내 애플리케이션' (이 옵션은 다음과 같은 경우 드롭다운됩니다. '계란' 오른쪽 상단의 버튼을 클릭하세요)

트위터 애플리케이션 만들기

단계 3) 클릭하여 새 애플리케이션을 생성합니다. '새 앱 만들기'

단계 4) 신청서 이름, 설명, 웹사이트를 지정하여 신청서 세부 정보를 작성합니다. 각 입력란 아래에 제공된 메모를 참조할 수 있습니다.

트위터 애플리케이션 만들기

단계 5) 페이지를 아래로 스크롤하고 표시하여 약관에 동의하세요. '그래, 난 동의' 그리고 버튼을 클릭하세요'트위터 애플리케이션 만들기'

트위터 애플리케이션 만들기

단계 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

'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

예: Flume을 사용하여 Twitter 데이터 스트리밍

단계 1) 엽니다 'flume-env.sh' 쓰기 모드에서 아래 매개변수에 대한 값을 설정합니다.

JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"

Flume을 사용하여 Twitter 데이터 스트리밍

단계 2) 하둡 시작

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

단계 3) Flume tarball의 JAR 파일 중 두 개는 Hadoop 2.2.0과 호환되지 않습니다. 따라서 Flume이 Hadoop 2.2.0과 호환되도록 하려면 이 Apache Flume 예제에서 아래 단계를 수행해야 합니다.

a. 무브 protobuf-java-2.4.1.jar 밖으로 ' /lib'.

We Buy Orders 신청서를 클릭하세요. ' /lib'

CD /lib

sudo mv protobuf-java-2.4.1.jar ~/

Flume을 사용하여 Twitter 데이터 스트리밍

b. 아래와 같이 JAR 파일 'guava'를 찾으세요.

find . -name "guava*"

Flume을 사용하여 Twitter 데이터 스트리밍

무브 구아바-10.0.1.jar 밖으로 ' /lib'.

sudo mv guava-10.0.1.jar ~/

Flume을 사용하여 Twitter 데이터 스트리밍

c. 다운로드 구아바-17.0.jarhttp://mvnrepository.com/artifact/com.google.guava/guava/17.0

Flume을 사용하여 Twitter 데이터 스트리밍

이제 다운로드한 jar 파일을 다음 위치에 복사하세요. ' /lib'

단계 4) We Buy Orders 신청서를 클릭하세요. ' /큰 상자' Flume을 다음과 같이 시작하세요.

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

Flume을 사용하여 Twitter 데이터 스트리밍

Flume이 트윗을 가져오는 명령 프롬프트 창-

Flume을 사용하여 Twitter 데이터 스트리밍

명령 창 메시지에서 출력이 다음에 기록되는 것을 볼 수 있습니다. /사용자/hduser/flume/트윗/ 디렉토리.

이제 웹 브라우저를 사용하여 이 디렉터리를 엽니다.

단계 5) 데이터 로드 결과를 보려면 브라우저를 열어서 확인하세요. http://localhost:50070/ 파일 시스템을 탐색한 다음 데이터가 로드된 디렉토리로 이동합니다.

/flume/트윗/

Flume을 사용하여 Twitter 데이터 스트리밍