참고하기 :
1. hadoop 실행
start-dfs.sh
start-yarn,sh
2. flume 설치
flume? : 로그 수집기
설치 파일 경로
1) https://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html
2) https://www.apache.org/dyn/closer.lua/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
wget으로 설치
wget https://downloads.apache.org/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
tar 파일 압축 풀기
tar -xvzf apache-flume-1.9.0-bin.tar.gz
cp -r apache-flume-1.9.0-bin /home/hadoop/flume-1.9.0
flume 경로 설정 (bashrc 수정 )
vi .bashrc
export FLUME_HOME=/home/hadoop/flume-1.9.0
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$SQOOP_HOME/bin:$FLUME_HOME/bin
source .bashrc
echo $FLUME_HOME -> /home/hadoop/flume-1.9.0
flume-ng version
flume-ng help
conf/flume-conf.properties.template
vi flume-env.sh.template
cp flume-env.sh.template flume-env.sh
echo $JAVA_HOME
vi flume-env.sh
=> $JAVA_HOME
추가source : ssh에 접속했을 때 남는 log
root에서 cd /var/log/
-> ls
-> ls sec*
확인
ll sec*
으로 권한 확인
다른 사람이 가져갈 권한이 없음 => ssh에 다른 user가 read할 권한을 부여해야함
chmod o+r secure
others에 read 권한을 줌
다른 계정에서 읽어지는지 확인
cd /hadoop/flume-1.9.0/conf
cat /var/log/secure
agent 생성
agent 생성 예시) agent 이름을 밖에서 정의
flume-ng 에이전트 -n $agent_name -c conf -f conf/flume-conf.properties.template
==> flume-ng agent -n 이름 -c 위치 -f 파일명
flume-ng agent -n a00 -c conf -f conf/flume-conf-00.properties
cp flume-conf.properties.template flume-conf-00.properties
cat > flume-conf-00.properties
아래 내용 입력 a00.sources = s00
a00.channels = c00
a00.sinks = k00
a00.sources.s00.type = exec
a00.sources.s00.command = tail -F /var/log/secure
a00.sources.s00.channels = c00
a00.sources.s00.interceptors=i00
a00.sources.s00.interceptors.i00.type=timestamp
a00.sinks.k00.type=hdfs
a00.sinks.k00.channel=c00
a00.sinks.k00.hdfs.path=hdfs://192.168.56.115:9000/user/flume/events/%y-%m-%d/%H%M/
a00.sinks.k00.writeFormat=Text
a00.channels.c00.type = memory
a00.channels.c00.capacity = 1000
a00.channels.c00.transactionCapacity = 100
** 위 코드에 대한 부가 설명
agent 이름.sources list = source의 이름
agent 이름.channels list = channels의 이름
agent 이름.sinks list = sinks의 이름
a00.sources = s00
a00.channels = c00
a00.sinks = k00
agent의 이름은 밖에서 정의된 것을 써야 함
source list 중에서도 s00이라는src의 type과 ~~은 이렇다
sinks의 list 중에서도 k00이라는 sink의 type과 ~~은 이렇다
chennels의 list 중에서도 c00이라는 channels의 type과 ~~은 이렇다
a00.sources.s00.type = exec
...
a00.sinks.k00.type=hdfs
...
a00.channels.c00.type = memory
...
sink가 여러개?
a00.sinks = k00 k01 k02
a00.sinks.k01.type=hdfs
a00.sinks.k01.channel=c00
a00.sinks.k01.hdfs.path=hdfs://192.168.56.100:9000/user/flume/events/%y-%m-%d/%H%M/
a00.sinks.k01.writeFormat=Text
a00.sinks.k02.type=hdfs
a00.sinks.k02.channel=c00
a00.sinks.k02.hdfs.path=hdfs://192.168.56.100:9000/user/flume/events/%y-%m-%d/%H%M/
a00.sinks.k02.writeFormat=Text
이렇게 만들어 주면 됨
다대다 관계가 된다는 것
하나의 agent 안에서 밖에 끌어가서 사용할 수 는 없음
agnet 하나가 메모리 영역임
flume-ng agent --conf $FLUME_HOME/conf/ --conf-file $FLUME_HOME/conf/flume-conf-00.properties --name a00 -Dflume.root.logger=INFO,console
[hadoop@hadoop00 conf]$ cd ../lib/
[hadoop@hadoop00 lib]$ ll gua*
-rw-rw-r-- 1 hadoop hadoop 1648200 Feb 8 10:24 guava-11.0.2.jar
guava 27버전
flum library 에 복사
[hadoop@hadoop00 lib]$ cp guava-27.0-jre.jar $FLUME_HOME/lib
[hadoop@hadoop00 lib]$
[hadoop@hadoop00 lib]$ cd
[hadoop@hadoop00 ~]$ cd flume-1.9.0/
[hadoop@hadoop00 flume-1.9.0]$ cd lib/
[hadoop@hadoop00 lib]$ ll gu*
-rw-rw-r-- 1 hadoop hadoop 1648200 Feb 8 10:24 guava-11.0.2.jar
-rw-r--r-- 1 hadoop hadoop 2747878 Feb 8 12:21 guava-27.0-jre.jar
[hadoop@hadoop00 lib]$
[hadoop@hadoop00 lib]$ mv guava-11.0.2.jar ~guava-11.0.2.jar
[hadoop@hadoop00 lib]$ ll gu*
-rw-r--r-- 1 hadoop hadoop 2747878 Feb 8 12:21 guava-27.0-jre.jar
[hadoop@hadoop00 lib]$
다시
Error 시, 1번째
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $FLUME_HOME/lib
Error 시, 2번째
cp $HADOOP_HOME/share/hadoop/common/lib/woodstox-core-5.0.3.jar $FLUME_HOME/lib
[[ ssh 접근 시도 ]]
1번째 > while [ 1 -le 2 ] ; do ssh hadoop00 hostname; done
2번째 > x=0; while [ $x –le 100 ]; do ssh hadoop00 hostname; x=$((x+1)) ; done