Hadoop

  • 예전에 하둡을 구축한 적이 있었다. 다만, 그때는 아무것도 모를 때 주먹구구식으로 블로그에서 뒤져가며 대충 지은 집이라 설명도 이해도 참혹한 수준이었다.
  • 그리고 한동안 잊고 있었는데, 최근에 하둡을 또다시 구축할 일이 생겼다. 그래서 이번엔 그나마 조금 발전된 지식으로 하둡에 대해 다시 적어본다.
  • 분산처리 데이터 컴포넌트니, 뭐니 하는 서론은 넘기고 바로 구축부터 시작한다.

Requirements

  • Hadoop 3 이상
  • Java JDK 1.8 권장(되도록이면 라이선스 이슈가 없는 OpenJDK를 권장)
  • Linux(예시에서는 Ubuntu지만, CentOS를 추천) 1대 - 각 노드를 분산시키지 않고 전부 localhost에서 기동시킬 것이다
  • wget, openssh

하둡 프로젝트 다운로드

  • 다운로드 주소는 역사와 전통의 apache archive. ${VERSION}의 위치에 원하는 버전을 적어넣으면 된다. 예시에서는 21. 11. 05 현재 최신버전인 3.3.1버전을 다운로드
  • # https://archive.apache.org/dist/hadoop/common/hadoop-${VERSION}/hadoop-${VERSION}.tar.gz wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz tar xvfz hadoop-3.3.1.tar.gz

필요 패키지 설치 및 환경변수 설정

  • 하둡은 Java를 기반으로 하는 데이터 분산처리 프레임워크다. 당연히 자바 설치 및 세팅은 필수다.
  • 또한, 하둡은 각 노드간 SSH 기반 통신을 하므로 SSH 설치 및 포트 오픈, No password SSH 접속도 필수다.
  • export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export HADOOP_HOME=${path where you unzip} export HADOOP_PREFIX=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP export HADOOP_CONR_DIR=$HADOOP_HOME/etc/hadoop export YARN_HOME=$HADOOP_HOME export YARN_CONF_DIR=$YARN_HOME
  • ubuntu18.04 및 20.04 기준 apt로 설치했을 경우의 JAVA_HOME.
  • 해당 옵션들을 /etc/profile, 혹은 ~/.bashrc에 추가해주고 해당 파일을 source명령어로 적용시켜준다.

SSH 세팅

ssh-keygen -f ~/.ssh/id_rsa -N ' ' -t rsa
ssh-keygen -f ~/.ssh/id_dsa -N ' ' -t dsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod u+x ~/.ssh/authorized_keys
service ssh restart
  • 아까도 말했듯이, 하둡은 노드간 SSH 기반 통신을 진행하므로 SSH 기본 세팅은 필수다.
  • 해당 계정의 비밀번호가 설정되어있지 않다면 passwd로 비밀번호를 설정해준다.
  • 위 설정이 모두 끝났다면 ssh localhost로 known_hosts에 본인을 추가해주고 비밀번호를 입력하지 않고 접속이 가능한지 확인한다.

하둡 설정

  • 하둡 설정 파일은 \*.xml, \*.sh, \*.cmd의 3종류 형태이다.
  • xml계열 파일 중에서는 core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml을 수정
  • sh계열 파일 중에서는 hadoop-env.sh, yarn-env.sh를 수정
  • cmd계열 파일은 윈도우에서 사용하는 것이므로 linux 환경에서는 신경쓰지 않아도 된다.
  • 설정 파일들은 모두 HADOOP_CONF_DIR 위치에 있어야 한다.

core-site.xml

  • 하둡의 핵심이 되는 namenode 및 hdfs의 핵심 설정들을 건드리는 파일
  • 하둡을 깊게 공부한 것이 아니라면 섣불리 건드리지 말것.
  • fs.defaultFS속성이 필수이며, 추가로 hadoop.tmp.dir를 변경해주는 것이 좋다.
    <configuration>
          <property>
                  <name>fs.defaultFS</name>
                  <value>hdfs://localhost:9000</value>
                  <description>ESSENTIAL. set HDFS and namenode address and port</description>
          </property>
          <property>
                  <name>hadoop.tmp.dir</name>
                  <value>/root/tmp</value>
                  <description>default value is /tmp/hadoop-${user.name}. setting to other dir is recommended.</description>
          </property>
    </configuration>
  • hadoop.tmp.dir을 변경해주는 이유: /tmp 폴더는 일반적으로 임시 파일들을 보관하는 위치로써, 생각보다 디스크 사이즈가 크지 않아 지정된 용량이 꽉 찰 경우 데이터가 유실될 우려가 있음

hdfs-site.xml

  • 보통 제일 긴 파일.
  • hdfs의 세팅 전반 및 namenode, secondarynamenode, backupnode, datanode, webhdfs 등 HDFS 시스템을 주 목적으로 사용한다면 가장 많은 설정을 건드리게 되는 위치
  • 보통 일반적으로는 각 노드의 데이터 저장 위치나 포트, 호스트 정도를 변경해주게 된다.
    <configuration>
          <property>
                  <name>dfs.replication</name>
                  <value>1</value>
          </property>
          <property>
                  <name>dfs.permissions.enabled</name>
                  <value>false</value>
          </property>
          <property>
                  <name>dfs.namenode.name.dir</name>
                  <value>/data/namenode</value>
          </property>
          <property>
                  <name>dfs.namenode.checkpoint.dir</name>
                  <value>/data/namesecondary</value>
          </property>
          <property>
                  <name>dfs.datanode.data.dir</name>
                  <value>/data/datanode</value>
          </property>
          <property>
                  <name>dfs.webhdfs.enabled</name>
                  <value>true</value>
          </property>
          <property>
                  <name>dfs.namenode.http.address</name>
                  <value>localhost:9080</value>
          </property>
          <property>
                  <name>dfs.datanode.http.address</name>
                  <value>localhost:9090</value>
          </property>
    </configuration>
  • dfs.webhdfs.enabled옵션에 true를 주게 되면 webhdfs가 열린다. 보통 50070포트에서 웹서버가 실행되게 되는데, HDFS 파일들을 눈으로 직접 확인할 수 있기 때문에 데이터 관리에 도움을 준다.
  • dfs.namenode.http.addressdfs.datnode.http.address옵션은 각 노드의 상태나 job 실행 여부등을 웹페이지 형태로 모니터링 할수 있도록 한다.

mapred-site.xml

  • 보통 가장 건드릴 일이 없는 파일.
  • Hadoop 대신 HDFS를 목적으로 구축하게되는 경우, mapreduce.framework.name로 yarn 정도를 넣어주고 패스하게 된다.
    <configuration>
      <property>
          <name>mapreduce.framework.name</name>
           <value>yarn</value>
      </property>
    </configuration>

yarn-site.xml

  • hadoop으로 편입된 yarn 프레임워크에 리소스매니저와 노드매니저가 던져졌다.
  • 이 두 노드에 관한 설정들이 들어가는 파일.
    <configuration>
          <property>
                  <name>yarn.nodemanager.aux-services</name>
                  <value>mapreduce_shuffle</value>
          </property>
          <property>
                  <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
                  <value>org.apache.hadoop.mapred.ShuffleHandler</value>
          </property>
          <property>
                  <name>yarn.resourcemanager.hostname</name>
                  <value>localhost</value>
          </property>
          <property>
                  <name>yarn.resoucemanager.resource-tracker.address</name>
                  <value>localhost:9025</value>
          </property>
          <property>
                  <name>yarn.resourcemanager.scheduler.address</name>
                  <value>localhost:9030</value>
          </property>
          <property>
                  <name>yarn.resourcemanager.address</name>
                  <value>localhost:9040</value>
          </property>
    </configuration>

hadoop-env.sh

  • hadoop의 설정파일들을 선언해주는 파일
  • 환경변수로 넣은 값들 중 여기서 다시 선언해줘야 하는 값이 일부 존재한다.
  • JAVA_HOME. HADOOP_HOME정도가 해당
    export HADOOP_HOME=/home/hd/hadoop
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
  • 외에 JVM 관련 옵션들이 약간 있지만, 확실하게 아는 것이 아니면 건드리지 않는 것을 권장
  • 만일 본인이 root 계정으로 하둡을 구동해야 하는 경우, HADOOP_NAMENODE_USER, HADOOP_DATANODE_USER, HADOOP_SECONDARYNAMENODE_USER로 root을 선언해줘야 한다.

yarn-env.sh

  • hadoop-env.sh 파일의 yarn 버전. 하지만 hadoop-env.sh와는 다르게 따로 설정해줘야 하는 값은 거의 없다.
  • 마찬가지로 root로 진행중일 경우, YARN_RESOURCEMANAGER_USER, YARN_NODEMANAGER_USER값에 root를 선언

workers

  • 실제로 하둡 JOB이 실행될 노드들을 적어준다.
  • hdfs-site.xml파일의 dfs.replication값과 workers에 쓰인 노드의 갯수가 일치해야 한다.

하둡 클러스터 초기화

  • 실행에 앞서, 한번 하둡을 포맷해줘야 한다.
  • 각 설정파일에 참고된 노드들을 동일한 cluster ID로 묶어주고, 없는 폴더들을 생성해주는 작업.
    # HADOOP_HOME/bin
    hdfs namenode -format

하둡 실행

# HADOOP_HOME/sbin
start-dfs.sh && start-yarn.sh
  • 기본적으로 데몬 형태로 실행된다.
  • 로그를 보고 싶다면 HADOOP_LOG_DIR위치에 로그가 생성되니 참고할것. 따로 설정해주지 않았다면 위치는 HADOOP_HOME/logs
  • 만일 fg형태로 실행시켜 stdout을 지켜보고 싶다면 $HADOOP_HOME/bin 위치의hdfs ${nodename},yarn ${nodename}```... 명령으로 실행시켜보자.

'Infra' 카테고리의 다른 글

[Kafka] Kafka 3.0.0 출시 및 Kraft의 근황  (0) 2021.09.27
Nginx  (0) 2021.08.19
Hadoop - Spark 연동 - 3. Spark 설치  (0) 2021.04.23
Hadoop - Spark 연동 - 2. Hadoop 설치  (0) 2021.04.23
Hadoop - Spark 연동 - 1. 우분투 설정  (0) 2021.04.21

+ Recent posts