본문 바로가기
DevOps/Docker & K8s

🐘 [Docker] 빅데이터환경구성 (최종) - Hadoop&Spark 설치

by 카프리썬 2021. 9. 7.
728x90

docker에서 하둡/스파크 설치를 위한 첫번째 도전...

2021.07.27 - [Docker] 빅데이터 분석환경 구성1-Ubuntu&Java설치

2021.07.27 - [Docker] 빅데이터 분석환경구성2-Hadoop 2.7.7

2021.07.27 - [Docker] 빅데이터 분석환경구성3-Spark 3.0설치

2021.07.27 - [Docker]빅데이터 분석환경 구성4-Zeppelin0.9 설치

 

이번엔 두번째 도전이다...

첫번째 도전일때도 되긴되었지만, 뭔가 뭣모르고 따라한 기분이랄까..?

그래서 뭔가 찜찜한 기분이 들엇다. 그런데 이번 두번째 설치를 함으로써 이제 어느정도 알 것 같다.

역시 한번해보는거랑 두번해보는거랑 달라......그리고 그때 안됐던 웹UI도 다 확인해볼수 있었다..!


1. Ubuntu 및 Java 설치

1-1. ubuntu이미지 받아옴

docker pull ubuntu:18.04

1-2. unbunt 접속

docker run -it --name bigdata_final ubuntu:18.04

1-3. ssh 설정

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

1-4. java 설치

wget https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.tar.gz
tar xvfz amazon-corretto-11-x64-linux-jdk.tar.gz

mv amazon-corretto-11.0.12.7.1-linux-x64/ java #파일명변경

1-5. java path 설정

# path
vim ~/.bashrc

# java
export JAVA_HOME=/root/java
export PATH=$PATH:$JAVA_HOME/bin

# path 저장 
source ~/.bashrc

1-6. java 설치확인

java —version

javac —version

 

2. Hadoop 설치

 

2-1. hadoop 3.3.1 버전 다운로드

# hadoop 설치
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
tar xvzf hadoop-3.3.1.tar.gz
mv hadoop-3.3.1 hadoop

2-2. hadoop path 설정

#path
vim ~/.bashrc

#hadoop
export HADOOP_HOME=/root/hadoop
export HADOOP_CONF_DIR=/root/hadoop/etc/hadoop
export PATH = $PATH:$HADOOP_HOME/bin:$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

#path 저장 
source ~/.bashrc

2-3. hadoop config변경

vi hadoop/etc/hadoop/core-site.xml

### 아래와 같이 configuration 작성
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost:9000</value>
        </property>
</configuration>
vi hadoop/etc/hadoop/hdfs-site.xml

### 아래와 같이 configuration 작성 (singletone이라서 replication 1)
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
</configuration>
vi hadoop/etc/hadoop/mapred-site.xml`

### 아래와 같이 configuration 작성
<configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
</configuration>

2-4. format

hdfs namenode -format
## 아래와 같이 나타나면 정상
2021-09-06 09:23:39,542 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at 34fa4f8b4498/172.17.0.3
************************************************************/

hdfs datanode -format
## 아래와 같이 나타나면 정상
2021-09-06 09:23:49,251 WARN datanode.DataNode: Exiting Datanode
2021-09-06 09:23:49,265 INFO util.ExitUtil: Exiting with status 1: ExitException
2021-09-06 09:23:49,276 INFO datanode.DataNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at 34fa4f8b4498/172.17.0.3
************************************************************/

2-5. Hadoop 시작

start-dfs.sh 
## 아래와 같이 나타나면 정상
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [34fa4f8b4498]
7f62cc7004c2: Warning: Permanently added '34fa4f8b4498,172.17.0.3' (ECDSA) to the list of known hosts.

start-yarn.sh
## 아래와 같이 나타나면 정상
Starting resourcemanager
Starting nodemanagers

start-all.sh
## 아래와 같이 나타나면 정상
Starting namenodes on [localhost]
localhost: namenode is running as process 821. ..생략
Starting secondary namenodes [34fa4f8b4498]
34fa4f8b4498: secondarynamenode is running as process 1313.  ..생략
resourcemanager is running as process 2445.  ..생략
localhost: nodemanager is running as process 2644.  ..생략

jps
## 아래와 같이 나타나면 정상
1346 NodeManager
517 DataNode
2342 Jps
808 SecondaryNameNode
1147 ResourceManager
315 NameNode

hdfs dfsadmin -report
## 아래와 같이 나타나면 정상
Configured Capacity: 0 (0 B)
Present Capacity: 0 (0 B)
DFS Remaining: 0 (0 B)
DFS Used: 0 (0 B)
DFS Used%: 0.00%
Replicated Blocks:
        Under replicated blocks: 0
        Blocks with corrupt replicas: 0
        Missing blocks: 0
        Missing blocks (with replication factor 1): 0
        Low redundancy blocks with highest priority to recover: 0
        Pending deletion blocks: 0
Erasure Coded Block Groups:
        Low redundancy block groups: 0
        Block groups with corrupt internal blocks: 0
        Missing block groups: 0
        Low redundancy blocks with highest priority to recover: 0
        Pending deletion blocks: 0
  • 혹시 환경설정이 안잡힌다면? → 가상환경설정에도 넣어주기
    cd hadoop/etc/hadoop/
    vi hadoop-env.sh
    54번째줄 export JAVA_HOME=/root/java
    58번째줄 export HADOOP_HOME=/root/hadoop
    68번째줄 export HADOOP_CONF_DIR=/root/hadoop/etc/hadoop (${HADOOP_HOME}/etc/hadoop)

  • 혹시 아래처럼 22 port connection문제가 생긴다면? → hosts.allow 파일 작성하기
  • 가장 상위루트에 가서 vi etc/hosts.allow 아래와 같이 입력
  • ssh 재시작 : etc/init.d/ssh restart
  • 22포트가 열린게 확인이 되면 exit하고 나온다.
  • ssh접속테스트 : ssh 0.0.0.0

 

3. Spark설치

3-1.spark 3.1.2 버전 (without hadoop) 다운로드

# spark설치 
wget https://dlcdn.apache.org/spark/spark-3.1.2/spark-3.1.2-bin-without-hadoop.tgz
tar xvzf spark-3.1.2-bin-without-hadoop.tgz
mv spark-3.1.2-bin-without-hadoop spark

3-2. python3 설치

sudo apt install python3-pip -y
pip install numpy

3-3. Spark Path 설정

# path
sudo vim ~/.bashrc

# spark
export SPARK_HOME=/root/spark
export PATH=$PATH:$SPARK_HOME/bin
export PATH=$PATH:$SPARK_HOME/sbin
export SPARK_DIST_CLASSPATH=$(/root/hadoop/bin/hadoop classpath)

# path저장
source ~/.bashrc

3-4. Spark 환경설정

cd $SPARK_HOME/conf
root@891323fd7b49:~/spark/conf# ls
fairscheduler.xml.template  metrics.properties.template   spark-env.sh.template
log4j.properties.template   spark-defaults.conf.template  workers.template

cp spark-env.sh.template spark-env.sh
vim spark-env.sh
#아래와 같이 작성
export JAVA_HOME=/root/java
export HADOOP_CONF_DIR=/root/hadoop/etc/hadoop
export YARN_CONF_DIR=/root/hadoop/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/root/hadoop/bin/hadoop classpath)

cp workers.template workers
cp spark-defaults.conf.template spark-defaults.conf
vi spark-defaults.conf
#아래와 같이 작성
spark.master            yarn

3-5. pySpark 실행

  • pyspark가 제대로 실행이 되지 않는다면?spark를 실행하기 위해서 이전에 hadoop도 켜져 있어야한다
  • 현재 하둡관리자가 spark도 관리할 수 있도록 설정한것이기 떄문에

 

 

 

 

추가. WebUI접근하기 위한 docker의 네트워크 설정

하둡과 스파크는 웹ui를 제공해준다.

그런데 지금 나같은 경우는 도커 컨테이너에서 하둡이랑 스파크를 실행하다보니

외부에서 컨테이너에 접속이 필요하기 때문에 포트포워딩을 해줘야한다

 

1. 지금까지 구성한 컨테이너를 commit → 이미지로 저장

docker ps

docker commit [컨테이너이름] [저장할 이미지이름:태그]

컨테이너이름 : bigdata_final

이미지 : bigdata:210906

 

2. 생성된 이미지로 컨테이너 시작 → 포트포워딩 적용

docker images

docker run -it -p 9870:9870 -p 9000:9000 -p 4040:4040 -p 8088:8088

--name final_test bigdata:210906

컨테이너이름 : bigdata_final

사용이미지 : bigdata:210906

3. 시작한 컨테이너에 접속해서 hadoop실행

root@34fa4f8b4498:/# service ssh start
 * Starting OpenBSD Secure Shell server sshd

root@34fa4f8b4498:/# start-all.sh
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [34fa4f8b4498]
Starting resourcemanager
Starting nodemanagers

4.hadoop 웹 ui접속 : localhost:9870

 

5. hadoop yarn 웹 접속 : localhost:8088

running중인 pyspark 어플리케이션 확인

6.시작한 컨테이너에 접속해서 pyspark실행

 

7.spark 웹 ui 접속 : localhost:4040

도커내부 호스트이름(34fa4f8b4498)의 8088로 바뀌면서 접속이 되지 않는다............ㅠㅠ

반응형

$(document).ready(function() { var $toc = $("#toc"); $toc.toc({content: ".tt_article_useless_p_margin", headings: "h2,h3,h4"}); });