Docker
내가 원하는 환경의 서버를 container라는 개념으로 쉽게 생성 및 삭제할 수 있는 플랫폼.
관련 글
[Docker] Docker로 Hadoop 구성하기 #1 - MacOS에 Docker 설치 및 CentOS 실행
[Docker] Docker로 Hadoop 구성하기 #3 - Hadoop 클러스터 구성 및 실행
이전 글에서 docker 설치 및 CentOS container를 생성했다면 이번 글에서는 CentOS에 hadoop 설치 및 세팅을 합니다. docker 로 hadoop cluster를 구성하기 위해선 다수의 서버가 필요합니다. 각각의 서버에 기본적인 프로그램들을 설치하기엔 번거로우니 hadoop-base 라는 이름의 container에 hadoop 과 기타 프로그램들을 설치한 뒤 이미지화시켜 다수의 container를 생성시키겠습니다.
hadoop-base container 생성
가장 먼저 CentOS 7버전의 container를 생성 및 접속하여 기본 프로그램들을 설치해줍니다.
/* Mac Terminal */
$ docker run -it --name hadoop-base centos:7
/* CentOS Container */
$ yum update
$ yum install wget -y
$ yum install vim -y
$ yum install openssh-server openssh-clients openssh-askpass -y
$ yum install java-1.8.0-openjdk-devel.x86_64 -y
그리고 각 노드들끼리 패스워드 입력 없이 원할한 접속을 위해 공개키 생성을 해줍니다.
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ""
$ ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -t ecdsa -N ""
$ ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -t ed25519 -N ""
Java를 설치한 이후에는 Java 환경변수 설정을 해줘야합니다. Java가 설치된 경로를 알기위해 아래의 명령어를 수행하고 bashrc 파일에 JAVA_HOME을 추가합니다.
$ readlink -f /usr/bin/javac
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/bin/javac
$ vim ~/.bashrc
.
.
/* readlink의 결과에서 bin 디렉토리 이전까지 경로 */
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64
.
.
이제 드디어 hadoop 을 설치할 차례입니다. 아래에서는 hadoop 2.7.7 버전을 사용했지만 원하는 버전이 있다면 hadoop link를 참고해 버전만 바꿔주시면 됩니다.
- hadoop link : https://archive.apache.org/dist/hadoop/common/
$ mkdir /hadoop_home
$ cd /hadoop_home
$ wget https://archive.apache.org/dist/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
$ tar -xvzf hadoop-2.7.7.tar.gz
hadoop 을 설치했다면 환경변수를 설정해줍니다.
$ vim ~/.bashrc
.
.
export HADOOP_HOME=/hadoop_home/hadoop-2.7.7
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
/usr/sbin/sshd
.
.
$ source ~/.bashrc
지금부터는 hadoop 설정 파일을 세팅해줘야합니다. 우선 mapred-site.xml 파일을 만들어줍니다.
$ cd $HADOOP_CONFIG_HOME
$ cp mapred-site.xml.template mapred-site.xml
위에서 만든 파일을 포함하여 $HADOOP_CONFIG_HOME 경로에 있는 3개의 hadoop 설정 파일들을 수정합니다.
core-site.xml
<!-- core-site.xml -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop_home/temp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://nn:9000</value>
<final>true</final>
</property>
</configuration>
fs.default.name의 value는 NameNode의 hostname을 적어줍니다. 뒤에서 nn이라는 이름으로 만들예정인데 다른 이름을 원하는 경우에는 nn 대신에 다른 이름으로 적어줍니다.
hdfs-site.xml
<!-- hdfs-site.xml -->
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/hadoop_home/namenode_dir</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/hadoop_home/datanode_dir</value>
<final>true</final>
</property>
</configuration>
dfs.namenode.name.dir, dfs.datanode.data.dir의 value에는 각각의 데이터가 저장될 경로를 적어주고 해당 폴더들을 생성해줍니다.
$ mkdir /hadoop_home/temp
$ mkdir /hadoop_home/namenode_dir
$ mkdir /hadoop_home/datanode_dir
mapred-site.xml
<!-- hdfs-site.xml -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>nn:9001</value>
</property>
</configuration>
마지막으로 NameNode를 포맷해주고 지금까지 작업한 container를 이미지화 시킵니다.
$ hadoop namenode -format
$ exit
/* Mac Terminal */
$ docker commit hadoop-base centos:hadoop
References
https://it-sunny-333.tistory.com/79
'BigData Engineering > Docker' 카테고리의 다른 글
[Docker] Docker로 Hadoop 구성하기 #3 - Hadoop 클러스터 구성 및 실행 (8) | 2021.06.15 |
---|---|
[Docker] Docker로 Hadoop 구성하기 #1 - MacOS에 Docker 설치 및 CentOS 실행 (0) | 2021.05.21 |