docker run -it --name hadoop-base ubuntu:18.04
docker exec -it hadoop-base /bin/bash
$ apt-get update
$ apt-get install -y net-tools vim iputils-ping wget
$ apt-get install -y openssh-server openssh-client
$ apt-get install -y openjdk-8-jdk
$ java -version
$ javac -version
$ service ssh restart
$ netstat -plant | grep 22
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
$ ssh localhost
$ mkdir /var/run/sshd
$ wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
$ sudo tar -zxvf hadoop-3.3.4.tar.gz
$ vi ~/.bashrc
## 아래 내용 파일에 추가
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
#Hadoop Related Options
export HADOOP_HOME=/root/hadoop-3.3.4
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
$ source ~/.bashrc
$ cd $HADOOP_CONFIG_HOME
$ vi core-site.xml
## 아래 내용 파일에 추가
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/temp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<final>true</final>
</property>
</configuration>
$ vi hdfs-site.xml
## 아래 내용 파일에 추가
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/namenode_home</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/datanode_home</value>
<final>true</final>
</property>
</configuration>
$ vi mapred-site.xml
## 아래 내용 파일에 추가
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
$ vi hadoop-env.sh
## 아래 내용 파일에 추가
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
$ vi yarn-site.xml
## 아래 내용 파일에 추가
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
$ vi yarn-env.sh
## 아래 내용 파일에 추가
JAVA=$JAVA_HOME/bin/java
JAVA_HEAP_MAX=-Xmx1000m
$ vi workers
## 아래 내용 파일로 대체
master
slave1
slave2
$ vi hadoop-env.sh
## 아래 내용 파일에 추가
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"
$ cd
$ hadoop namenode -format
docker commit hadoop-base hyesungkang/hadoopbase
$ docker run -it -h master --name master -p 9870:9870 hyesungkang/hadoopbase
$ docker run -it -h slave1 --name slave1 --link master:master hyesungkang/hadoopbase
$ docker run -it -h slave2 --name slave2 --link master:master hyesungkang/hadoopbase
## 윈도우 호스트 운영체제라면
## cmd에서
docker inspect master | findstr "IPAddress"
docker inspect slave1 | findstr "IPAddress"
docker inspect slave2 | findstr "IPAddress"
#리눅스 운영체제라면
$ docker inspect master | grep IPAddress
$ docker inspect slave1 | grep IPAddress
$ docker inspect slave2 | grep IPAddress
## master로 진입
docker exec -it master /bin/bash
$ vi /etc/hosts
172.17.0.3 master
172.17.0.4 slave1
172.17.0.5 slave2
ssh 재시작 / master, slave1, slave2에 적용해야 함
master node에서 ssh 접속 확인
## windo10 cmd에서
docker exec -it master /bin/bash
## master root 권한으로
$ ssh master
$ exit
$ ssh slave1
$ exit
$ ssh slave2
$ exit
## master docker 에서 수행
## slaves 파일 없으므로 생성한 후 추가
$ cd $HADOOP_CONFIG_HOME
$ vi slaves
slave1
slave2
master
$ hadoop namenode -format
$ cd
$ start-all.sh
root@master:~# jps
1123 ResourceManager
581 DataNode
839 SecondaryNameNode
1355 NodeManager
1806 Jps
351 NameNode
https://dramatic-armchair-97f.notion.site/6d8094150f454821a4f1237f6cbdcc18