2 분 소요

MacBook Pro (M1) 로컬 환경에서 하둡(Hadoop)과 스파크(Spark)를 설치하고 의사 분산(Pseudo-distributed) 모드로 구동하는 과정을 정리한다. JDK 설치부터 SSH 설정, HDFS/YARN 기동 확인, Spark 연동까지 4단계로 진행한다.

구성 요소 버전
Java (JDK) 19.0.1
Hadoop 3.3.4
Spark 3.3.0
환경 macOS (Apple Silicon arm64)

1. 자바(JDK 19) 설치

  • 하둡은 자바 기반의 오픈 소스 프레임워크이므로, 자바를 먼저 설치해줘야 한다.
  • [ORACLE JAVA 19] 링크로 가 Arm 64 DMG Installer를 다운로드한다.
  • 스크린샷

    image

  • 또는 Azul의 Zulu OpenJDK도 맥 m1칩용을 제공한다. 둘 중 아무거나 받아도 상관없다.
  • [AZUL Java 19(STS)] 링크로 가 macOS arm64버전을 다운로드한다.
  • 스크린샷

    image

  • 그 후 vi ~/.zshrc 명령어를 통해 파일을 연 뒤, 아래처럼 java 경로를 export 해준다.
    • 또는 ~/.bashrc
  • 완료 후, source ~/.zshrc 명령어를 통해 파일을 실행한다.
export JAVA_HOME="/Library/Java/JavaVirtualMachines/zulu-19.jdk/Contents/Home"
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar
export PATH=${PATH}:$JAVA_HOME/bin
  • java -version 명령어로 아래처럼 나오면 정상적으로 설치가 됐다.

    image

2. ssh 설정

  • 하둡은 네임(마스터) 노드에서 여러 개의 데이터(워커) 노드와 서버 접속이 가능하게 해야 되기 때문에 ssh 통신에 사용할 키 교환을 수행해야 한다.
  • ssh localhost 명령어를 통해 ssh 설치 여부를 확인할 수 있다.
  • 키 생성은 다음과 같다.
    • 인증키를 미리 생성해서 ssh에 로그인할 때 비밀번호 대신 사용하는 방식이다.
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

3. 하둡 설치

  • 맥에서 brew를 통해 쉽게 설치가 가능하지만, 나중에 리눅스 등 다른 OS에서도 원활히 설치하기 위해 하둡 홈페이지에서 설치를 진행해본다.
  • 마찬가지로, 해당 [Apache Hadoop - Download] 링크로 가 binary 파일을 다운받는다.
  • 스크린샷

    image

  • 보통 Downloads 경로에 다운로드 받아지므로 이를 root 경로로 변경해준다.
  • mv hadoop-3.3.4 ~/hadoop-3.3.4

  • 자바 경로처럼 하둡도 ~/.zshrc로 가 경로를 설정해준다.
    • 이는 하둡을 실행하기 전에 자바가 설치된 위치를 하둡에 알려주어야 하기 때문이다.
    • 하둡 데몬을 실행하는 스크립트는 sbin 디렉토리에 있다. 하둡 데몬을 로컬 컴퓨터에서 실행하려면 이 디렉토리를 PATH에 추가해줘야 한다.
export HADOOP_HOME="/Users/hyunseokjung/hadoop-3.3.4"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

설정 파일을 만들기 전에, 하둡 데몬이 HDFS 안에서 어떤 역할을 맡는지 공식 문서의 도식으로 확인해두자.

HDFS 아키텍처 - NameNode, DataNode, 블록과 클라이언트의 관계

출처: HDFS Architecture (https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html)

3.1 그 외 환경설정

  • 하둡의 각 구성요소에 대한 설정은 XML 파일을 이용한다.
    • etc/hadoop/core-site.xml : 공통 속성
    • etc/hadoop/hdfs-site.xml : HDFS 속성
    • etc/hadoop/mapred-site.xml : 맵리듀스 속성
    • etc/hadoop/yarn-site.xml : YARN 속성
  • 가상 분산(Pseudo-Distributed) 모드는 모든 하둡 데몬을 로컬 머신에서 실행하는 방법이다. 지금은 이 모드를 사용해본다.
    • 하둡 데몬을 여러 대의 머신으로 구성된 클러스터에서 실행하는 방법은 추후에 쓰겠다.
  • etc/hadoop 디렉토리에 다음 내용이 담긴 환경 설정 파일을 만든다.

  • core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
  • hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
  • mapred-site.xml
<configuration>
  <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
  </property>
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:8021</value>
  </property>
</configuration>
  • yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

3.2 HDFS 파일시스템 포맷하기

  • HDFS를 사용하기 전에 먼저 파일시스템을 포맷해줘야 한다.
$ bin/hdfs namenode -format

3.3 데몬 시작과 중지

  • HDFS, 맵리듀스, YARN 데몬을 각각 구동하기 위한 명령어는 다음과 같다.
$ sbin/start-dfs.sh ## HDFS
$ sbin/mr-jobhistory-daemon.sh start historyserver ## 맵리듀스
$ sbin/start-yarn.sh ## YARN
  • http://localhost:9870 웹 UI를 통해 데몬 프로세스를 확인할 수 있다.
  • 결과

    image

  • 또한, 자바의 jps 명령어를 사용해 데몬 동작 여부를 파악할 수 있다.

  • 데몬 중지는 다음과 같다.
$ sbin/stop-dfs.sh ## HDFS
$ sbin/mr-jobhistory-daemon.sh stop historyserver ## 맵리듀스
$ sbin/stop-yarn.sh ## YARN

3.4 사용자 디렉토리 생성

  • 다음 명령어를 통해 홈 디렉토리를 생성한다.
$ hadoop fs -mkdir -p /user/hyunseokjung 

4. 스파크 설치

  • 스파크(Apache Spark)는 빅데이터 처리를 위한 오픈 소스 분산 시스템이다.
  • 하둡과 마찬가지로 [Apache Spark Homepage - Download] 링크로 가 최신 버전을 설치해준다.
  • 스크린샷

    image

  • 보통 Downloads 경로에 다운로드 받아지므로 이를 root 경로로 변경해준다.
  • mv spark-3.3.0-bin-hadoop3 ~/spark-3.3.0
  • 그리고 ~/.zshrc 로 가 spark에 대한 환경설정을 해준다.
export SPARK_HOME="/Users/hyunseokjung/spark-3.3.0"
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export SPARK_LOCAL_HOSTNAME=localhost

그 외 스파크에 대한 자세한 내용은 Category - SPARK 링크로 가 참조하면 된다.

5. 한계와 트레이드오프

  • 공식 단일 노드 문서는 이 구성을 “간단한 작업을 빠르게 수행”하기 위한 것으로 소개한다. 노드 한 대에 모든 데몬을 올린 구성이므로 내결함성, 노드 수에 따른 확장성, 클러스터 규모의 처리량은 여기서 재현되지 않는다.
  • dfs.replication을 1로 두었으므로 블록의 복제본이 하나뿐이다. 디스크가 손상되면 해당 블록은 복구할 수 없다.
  • fs.defaultFS를 hdfs://localhost:9000으로 고정했으므로 다른 호스트에서는 이 클러스터에 접속할 수 없다.
  • 공식 지원 매트릭스는 Hadoop 3.3 이상에 대해 Java 8과 Java 11(런타임)을 명시한다(Hadoop Java Versions). 이 글의 JDK 19 조합은 문서가 보증하는 범위 밖이므로, 버전을 바꿔 설치할 때는 동작 차이를 확인해야 한다.
  • 단일 노드 문서는 GNU/Linux와 Windows를 대상으로 서술한다. macOS(Apple Silicon) 설치는 문서에 명시되지 않은 경로이므로 배포판별 차이는 각자 확인해야 한다.

References

댓글남기기