Hadoop
대용량 데이터를 분산 처리할 수 있는 자바 기반의 오픈소스 프레임워크
- 구글이 논문으로 발표한 Google File System 및 MapReduce를 구현
- 여러 대의 서버에 데이터를 분산 저장
- 저장되어 있는 각 서버의 데이터를 동시 처리
- 데이터 복제본을 저장하기에 데이터 유실 시 복구 용이
▶︎ module
- HDFS(Hadoop Distributed File System) : 대용량 데이터 분산 파일 시스템
- commons : 다른 hadoop module을 지원하는 공통 모듈
- MapReduce : 데이터 셋 병렬 처리
- Yarn : 작업 예약 및 리소스 관리
※ Hadoop 다운로드 및 설치 (오타 절대 금지!!!)
wget www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz 설치
설치하고 나서 아래 대로 실행/ 변경
1. 다운받은 hadoop 파일 압축 해제
2. /hadoop으로 디렉토리명 변경
3. 소유를 root:root로 변경
4. 권한을 777로 변경
ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
cd /etc/ssh
ssh-keygen -t rsa -P '' -f ssh_host_rsa_key
ssh-keygen -t rsa -P '' -f ssh_host_ecdsa_key
ssh-keygen -t rsa -P '' -f ssh_host_ed25519_key
vim ~/.bashrc (vim으로 들어가서 아래 패스들을 등록하자)
# HADOOP
export HADOOP_HOME=/hadoop
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# HADOOP USER
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
# SSHD
/usr/sbin/sshd
source ~/.bashrc
아래 명령어들 잘 작동하는지 확인
java -version
javac -version
cd $HADOOP_HOME [root@f8f009f6f7a7 hadoop] 로 바뀜
cd $HADOOP_CONFIG_HOME [root@f8f009f6f7a7 hadoop] 이거그대로 있음
mkdir /hadoop/temp
mkdir /hadoop/namenode_home
mkdir /hadoop/datanode_home
mkdir /hadoop/secondary_home
cd /hadoop
ls
vim hadoop-env.sh 다음 아래 숫자번째 줄에 샵지우고 해당 내용 넣기/ 68번째줄은 샵만 지우면됨
vim core-site.xml
vim hdfs-site.xml
vim mapred-site.xml
vim yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auc-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
exit
docker commit hadoop hadoop
docker images
docker run -it -h master --name master -p 9870:9870 -p 8088:8088 -p 8081:8080 -p 8082:8081 hadoop
위에 꺼 하면 [root@master /]# 여기로 들어와짐
exit 한 후
docker start master
docker ps
docker run -it -h slave1 --name slave1 --link master:master hadoop
exit
docker start slave1
docker ps (slave1)만들어졌는지 확인
docker run -it -h slave2 --name slave2 --link master:master hadoop
exit
docker start slave2
docker ps (slave2)만들어졌는지 확인
docker run -it -h slave3 --name slave3 --link master:master hadoop
exit
docker start slave3
docker ps (slave3)만들어졌는지 확인
운영체제에 맞게 아래 중에 실행
# window
docker inspect slave1 | find "IPAddress"
# mac
docker inspect slave1 | grep IPAddress
# 결과
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.5",
"IPAddress": "172.17.0.5"
docker exec -it master bash 마스터 들어가기
vim /etc/hosts --> 172.17.0.4 master 밑으로 slave 입력
172.17.0.4 master
172.17.0.5 slave1
172.17.0.6 slave2
172.17.0.7 slave3
source /etc/hosts 이 문구 했을대 실행결과는 아래와 같다
bash: 127.0.0.1: command not found
bash: ::1: command not found
bash: fe00::0: command not found
bash: ff00::0: command not found
bash: ff02::1: command not found
bash: ff02::2: command not found
bash: 172.17.0.4: command not found
bash: 172.17.0.5: command not found
bash: 172.17.0.6: command not found
bash: 172.17.0.7: command not found
ssh slave1 -> yes
exit 나가기 했을 때 나오는 화면 -> 2, 3도 똑같이 해줍니다 ssh slave2 - yes - exit ...
logout
Connection to slave1 closed.
cd $HADOOP_CONFIG_HOME
vim master -> master 한 단어만 적고 나옴
vim workers -> localhost지우고 아래내용 저장
slave1
slave2
slave3
hadoop namenode -format
hadoop datanode -format 실행하기 위한 설정 잡아주기 임
start-dfs.sh
start-yarn.sh
hdfs dfsadmin -report
localhost:9870 브라우저에서 이 주소로 들어가면 아래 사이트가 뜬다.
** 지울 때 (뭔가 잘못됐다. 안된다. 자, 지우고 처음부터 다시 합니다^___^)
docker ps
docker stop slave1
docker stop slave2
docker stop slave3
docker stop master
docker stop hadoop
docker rm hadoop
docker rm master
docker rm slave1
docker rm slave2
docker rm slave3
docker rmi hadoop (이건 아까 만들놓은 이미지 지우기)
만약에 중간에 slave 2,3만 지우고 다시한다면 위에서도 slave2,3 해당되는 명령어만 실행해주고
아래 명령어 실행해주는데 rm은 어디서든 해도되고 mkdir는 master들어가서해준다. 그리고 slave다시 만들때는 -h 들어간 부분부터 다시해준다.