IT 꿈나무의 일상

Hadoop 완전분산모드로 설치하기 (2) 본문

IT 관련

Hadoop 완전분산모드로 설치하기 (2)

viera 2021. 4. 4. 16:02
반응형

 

0. 하둡 환경변수 설정

 

vim .bash_profile 에 다음과 같은 환경변수 설정

export HADOOP_HOME=/usr/local/hadoop
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 HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_PID_DIR=${HADOOP_HOME}/pids
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/lib/*

 

 

 

1. fully-distributed configuration 환경 구성

 

하둡으로 완전분산환경 설정 (값들을 수정하며 하둡설정 바꿔야 한다)

 

1) core-site.xml 파일 수정

파일 경로 : $HADOOP_HOME/hadoop-2.8.3/etc/hadoop/core-site.xml

  •  core-site는 하둡을 실행시켰을때, 개괄적인 정보를 보여주는 website
  • <value>안에 값을 hdfs://server-hostname:9000(혹은9001port) 로 설정

 

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

 

or

 

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

 

 

2) hdfs-site.xml 파일 수정

 

파일 경로 : $HADOOP_HOME/hadoop-2.8.3/etc/hadoop/hdfs-site.xml

 

  • dfs.replication : hadoop 과정시 복제되는 파일의 개수 (default : 3) 
  • dfs.namenode.name.dir / dfs.namenode.checkpoint.dir / dfs.datanode.data.dir                                               - 하둡이 실행될때 각 노드들의 정보를 저장해놓는 파일 (경로는 user마다 다르게 정의 )
  • dfs.http.address / dfs.secondary.http.address                                                                                           - hostname:50070(50090)으로 설정 (하둡실행 시 접속가능, 각각 현제하둡시스템 정보)
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    
    <property> 
   <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/hadoop/hadoop-2.8.3/data/dfs/namenode</value>
    </property>

    <property>
        <name>dfs.namenode.checkpoint.dir</name>
        <value>/home/hadoop/hadoop/hadoop-2.8.3/data/dfs/namesecondary</value>
    </property>

     <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/hadoop/hadoop-2.8.3/data/dfs/datanode</value>
    </property>

    <property>
        <name>dfs.http.address</name>
        <value>master:50070</value>
    </property>

    <property>
        <name>dfs.secondary.http.address</name>
        <value>slave1:50090</value>
    </property>
</configuration>

 

 

3) mapred-site.xml 파일 수정

파일경로 : $HADOOP_HOEM/hadoop-2.8.0/etc/hadoop/mapred-site.xml

- 맵리듀스의 설정 관리 파일

 

- map-reduce에 활용하는 memory의 양을 설정 

- mapreduce.map.memory.mb    : map작업시 활용하는 메모리

- mapreduce.reduce.memory.mb : reduce작업시 활용하는 메모리

- mapreduce.map.java.opts.max.heap / mapreduce.reduce.java.opts.max.heap : map/reduce 작업시 활용하는 heap memory 최대사이즈 (mapreduce.map.memory.mb * 0.8이 적당) 

- mapreduce.map.java.opts / mapreduce.reduce.java.opts : 위와 같은설정, jvm 실행옵션

 

# 파일 이름 변경

mv mapred-site.xml.template mapred-site.xml
<configuration>
   <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
   </property>

   <property>
      <name>mapreduce.map.memory.mb</name>
      <value>1024</value>
   </property>

   <property>
      <name>mapreduce.reduce.memory.mb</name>
      <value>1024</value>
   </property>

   <property>
      <name>mapreduce.map.java.opts.max.heap</name>
      <value>819</value>
   </property>

   <property>
      <name>mapreduce.reduce.java.opts.max.heap</name>
      <value>819</value> 
   </property>

   <property>
      <name>mapreduce.map.java.opts</name>
      <value>-Xmx819m</value>
   </property>

   <property>
      <name>mapreduce.reduce.java.opts</name>
      <value>-Xmx819m</value>
   </property>
</configuration>

  

4) yarn-site.xml 파일 수정

파일경로 : $HADOOP_HOME/hadoop-2.8.0/etc/hadoop/yarn-site.xml 

 

-yarn map-reduce만으로 승부해오던 기존의 하둡이 가지는 문제점들을 해결하기 위해서 만들어진 하둡의 서브 프로젝트 (리소스 할당 문제, spark등의 새로운 플랫폼 출현)

 

- yarn.app.mapreduce.am.resource.mb : 어플리케이션 마스터의 Container를 위한 메모리 (default :1536)

- yarn.nodemanager.vmem-check-enabled : 컨테이너에 대한 가상 메모리 제한이 있는지 확인

- yarn.nodemanager.pmem-check-enabled : 컨테이너에 대한 물리 메모리 제한이 있는지 확인.

  (false : memory check에 대한 error를 방지하기 위함)

- yarn.nodemanager.vmem-pmem-ratio : 컨테이너의 실제 메모리 대비 가상 메모리 사용 비율 (default 2.1)

- yarn.nodemanager.resource.memory-mb : 각 노드매니저가 컨테이너 할당에 사용할 메모리 크기

- yarn.scheduler.minimum-allocation-mb / yarn.scheduler.maximum-allocation-mb : ResourceManager가 하나의 컨테이너 할당에 필요한 최소/최대 메모리 크기 

- yarn.scheduler.maximum-allocation-mb yarn.nodemanager.resource.memory-mb 속성값의 이하로 설정

 

<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.nodemanager.local-dirs</name>
    <value>/home/hadoop/hadoop/hadoop-2.8.3/data/yarn/nm-local-dir</value>
</property>

<property>
    <name>yarn.resourcemanager.fs.state-store.uri</name>
    <value>/home/hadoop/hadoop/hadoop-2.8.3/data/yarn/system/rmstore</value>
</property>

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
</property>

<property>
   <name>yarn.nodemanager.vmem-check-enabled</name>
   <value>false</value>
</property>

<property>
   <name>yarn.nodemanager.pmem-check-enabled</name>
   <value>false</value>
</property>

<property>
   <name>yarn.nodemanager.vmem-pmem-ratio</name>
   <value>2.1</value>
</property>

<property>
   <name>yarn.nodemanager.resource.memory-mb</name>
   <value>2048</value>
</property>

<property>
   <name>yarn.scheduler.minimum-allocation-mb</name>
   <value>1024</value>
</property>

<property>
   <name>yarn.scheduler.maximum-allocation-mb</name>
   <value>2048</value>
</property>
</configuration>

 

5) slaves 파일 수정

파일 경로 : $HADOOP_HOME/hadoop-2.8.0/etc/hadoop/slaves

 

# slave로 사용할 OS hostname을 추가한다

# add slave host name

slave1

 

 

2. 파일배포

Server 에서 작업한 Hadoop Configuration을 압축하여 다른 OS에게 전송

 

1) 동일 파일명 삭제

rm -rf hadoop-2.8.3.tar.gz

 

2) 압축

tar cvzf hadoop-2.8.3.tar.gz hadoop-2.8.3

 

3) home dir로 이동

sudo scp –r /home/hadoop/hadoop/hadoop-2.8.3.tar.gz hadoop@IP_주소:~/

 

 

4) ( slave에서) hadoop 파일 생성 후 

mkdir hadoop                     --> hadoop dir생성
mv hadoop-2.8.3.tar.gz hadoop    --> 파일옮기기

 

5) 압축해제

cd hadoop
tar xvzf hadoop-2.8.3.tar.gz

 

## hadoop-env.sh_JAVA_HOME 수정 

- JAVA_HOME 경로 지정

# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/local/lib/jdk1.8.0_261

  

 

3. Hadoop 실행

 

1) 네임노드 포맷

bin/hadoop namenode -format
--> ~/hadoop-2.8.3에 data ditectory 생성

 

2) 하둡 시작

- 나중에 하둡 실행시 start-all.sh 파일만 실행시 한번에 하둡 구동이 됩니다.

sbin/start-dfs.sh      # datanode , namenode on             --> HDFS 실행
sbin/start-yarn.sh    # resource manager on                 --> 맵리듀스 실행
sbin/start-all.sh                                           --> HDFS & 맵리듀스 실행

 

3) 하둡 종료

- 나중에 하둡 실행시 stop-all.sh 파일만 실행시 한번에 하둡 구동이 됩니다.

sbin/stop-dfs.sh
sbin/stop-yarn.sh
sbin/stop-all.sh

 

4) 잘 켜졌는지 확인

jps

 

# 올바르게 작동하는 예시

- 마스터 노드와 슬레이브 노드에 jps를 입력시 다음과 같이 출력되면 정상적으로 하둡이 동작하고 있는겁니다.00 

 

[Master]

19696 NameNode
20673 Jps
20180 ResourceManager


[Slave1]
9749 SecondaryNameNode 
9990 Jps 
9643 DataNode
9836 NodeManager

 

 

##error 사항 / 해결방안

 

1) Master Node에 네임노드가 안뜨는 경우

하다보면 마스터 노드에 네임노드가 정상적으로 뜨지 않는 경우가 있는데 다음과 같이 해결하였습니다. 

##namenode format하고 다시 시작
bin/hadoop namenode -format -Y

 

 그래도 안된다면? 

- 하둡홈에 data와 logs 디렉토리를 삭제한 후 다시 namenode 포맷후 1~2분뒤에 다시 하둡 구동 

- 단, stop-all.sh로 하둡 구동을 종료한 후 실행

 

 

2) binding error 발생 시

log정보확인 후 프로세스 죽이기

 

- 해당포트 사용중인 프로세스 확인하기

netstat -nap | grep 50070

- 죽이기

kill -9 [PID]

-  namenode format하고 다시 시작

bin/hadoop namenode -format -Y

 

반응형
Comments