티스토리 뷰
# CentOS 기반 Fluentd와 HDFS(Hadoop) 연동하기
@ Fluentd 준비하기
- 설치
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
- 데몬 실행
/etc/init.d/td-agent start
- systemd
systemctl [start / stop / restart / status] td-agent.service
- init.d
/etc/init.d/td-agent [start / stop / restart / status]
- 테스트(8888 포트는 최초 설치 시 디폴트로 사용)
curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
- 테스트 확인
tail -f /var/log/td-agent/td-agent.log
@ HDFS(Hadoop) 준비하기
- 통신할 때 필요하다는 ssh, rsync를 설치하기(설치되어 있지 않은 경우에만 설치하면 됨)
yum install ssh
yum install rsync
- svc 디렉토리 만들기
mkdir /svc
- JDK 설치(Hadoop 동작에 필요함)
mkdir /svc/java
cd /svc/java
curl -O https://cdn.azul.com/zulu/bin/zulu8.31.0.1-jdk8.0.181-linux_x64.tar.gz (Open JDK zulu 8 사용)
tar -xzf <파일명>.tar.gz
JAVA_HOME를 환경변수로 등록(vi ~/.bashrc), source ~/.bashrc로 쉘에 환경변수 반영
참고로, Hadoop용 JAVA_HOME을 설정하고자 하는 경우, <hadoop 설치 경로>/etc/hadoop/hadoop-env.sh에 설정
export JAVA_HOME=/svc/java/jdk8.0.181 PATH=$PATH:$JAVA_HOME/bin |
- Hadoop 바이너리 다운로드
https://hadoop.apache.org 에서 다운로드 URL 참고해서
/svc 디렉토리에 다운로드 및 압축 해제
curl -O http://mirror.navercorp.com/apache/hadoop/common/hadoop-3.1.1/hadoop-3.1.1.tar.gz
tar -xzf <파일명>.tar.gz
- 테스트(MapReduce 수행)
$ cd /svc/hadoop-3.1.1 $ mkdir input $ cp etc/hadoop/*.xml input $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar grep input output 'dfs[a-z.]+' |
- 테스트 확인
cat output/*
- Single Node Cluster 설정(Single Node Setup 가이드 참고)
- /svc/<Hadoop 경로>/etc/hadoop/core-site.xml 편집, <configuration>에 아래 내용 추가
<property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> |
- /svc/<Hadoop 경로>/etc/hadoop/hdfs-site.xml 편집, <configuration>에 아래 내용 추가
<property> <name>dfs.replication</name> <value>1</value> </property> |
- passphraseless ssh 설정
ssh localhost를 쉘에 입력했을 때, 인증 절차를 수행하면 아래 표를 진행한다.
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys |
- 데몬 실행
- 파일 시스템 포맷 $ <Hadoop 경로>/bin/hdfs namenode -format - NameNode와 DataNode 데몬 실행 $ <Hadoop 경로>/sbin/start-dfs.sh |
- <Hadoop 경로>/sbin/start-dfs.sh를 수행했을 때 아래와 같은 에러가 발생하면 f를 진행한다.
[root@localhost /]# /svc/hadoop-3.1.1//sbin/start-dfs.sh Starting namenodes on [localhost] ERROR: Attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes ERROR: Attempting to operate on hdfs datanode as root ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation. Starting secondary namenodes [localhost.localdomain] ERROR: Attempting to operate on hdfs secondarynamenode as root ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation. |
- 아래 표는 e 에서 에러가 발생한 경우만 진행
vi <hadoop 경로>/etc/hadoop/hadoop-env.sh 후 아래 내용을 추가 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root 다시 테스트 $ <Hadoop 경로>/sbin/start-dfs.sh |
- Hadoop 데몬이 실행되면 <Hadoop 경로>/logs 디렉토리에 로그를 생성함
- NameNode를 위한 Web 인터페이스 확인
http://localhost:9870을 입력하면 index.html 페이지 확인할 수 있음
- 테스트
$ bin/hdfs dfs -mkdir /user $ bin/hdfs dfs -mkdir /user/<username> $ bin/hdfs dfs -put etc/hadoop input $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar grep input output 'dfs[a-z.]+' $ bin/hdfs dfs -cat output/* |
- 데몬 종료
<Hadoop 경로>/sbin/stop-dfs.sh
@ Fluentd + HDFS 연동하기
- Fluentd 설정하기
- /etc/td-agent/td-agent.conf 설정 (vi /etc/td-agent/td-agent.conf)
- 기본 설정을 다 지우고 아래 설정을 적용
# HTTP input # POST http://localhost:8888/<tag>?json=<json> # POST http://localhost:8888/td.myapp.login?json={"user"%3A"me"} # @see http://docs.fluentd.org/articles/in_http <source> @type http @id input_http port 8888 </source> <match hdfs.*.*> @type webhdfs host localhost port 9870 path "/log/%Y%m%d_%H/access.log.#{Socket.gethostname}" username digicap # username을 설정하지 않으면 default username “dr.who”를 사용 </match> |
- 데몬 재실행(/etc/init.d/td-agent restart)
- HDFS 설정하기
- /svc/<Hadoop 경로>/etc/hadoop/hdfs-site.xml 설정(vi /svc/hadoop-3.1.1/etc/hadoop/hdfs-site.xml)
- <configuration> 안에 아래 설정을 적용, 아래 설정이 기본적으로 disabled라 활성화 해줘야 함
<property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.support.append</name> <value>true</value> </property> <property> <name>dfs.support.broken.append</name> <value>true</value> </property> |
- <Hadoop 경로>/sbin/start-dfs.sh
- 연동 테스트(Sending a USR1 signal flushes Fluentd’s buffer into WebHDFS.)
curl -X POST -d 'json={"action":"login","user":2}' http://localhost:8888/hdfs.access.test kill -USR1 `cat /var/run/td-agent/td-agent.pid` |
- 연동 테스트 결과 확인
<Hadoop 경로>/bin/hdfs dfs -ls /log/*
결과 확인이 안될 때 Hadoop에서 생성하는 로그를 확인이 필요하고, 아래처럼 User 권한 문제가 발생하면 <Hadoop 경로>/etc/hadoop/hadoop-env.sh에 HADOOP_USER_NAME을 추가하고 데몬 재실행한 후 다시 테스트한다.
2018-09-12 14:51:00,886 INFO org.apache.hadoop.ipc.Server: IPC Server handler 4 on 9000, call Call#384 Retry#0 org.apache.hadoop.hdfs.protocol.ClientProtocol.create from 127.0.0.1:34390: org.apache.hadoop.security.AccessControlException: Permission denied: user=digicap, access=WRITE, inode="/":root:supergroup:drwxr-xr-x |
export HADOOP_USER_NAME=digicap |
'TIL > Server' 카테고리의 다른 글
리눅스 SNMP OID 등록 방법 (0) | 2017.03.09 |
---|
- Total
- Today
- Yesterday
- HDFS
- ffmpeg
- DB
- snmp
- springboot
- AVIOContext
- Java
- libavformat
- springjpa
- CentOS
- DATABASE
- JAXB
- HLS
- programmer
- elasticsearch
- JPA
- jdk6
- springframework
- popupWindow
- HTTP Live Streaming
- Audio
- onbeforeunload
- Programming
- oid
- Rolling-Restart
- Spring
- development
- fluentd
- jdk7
- C/C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |