CentOS7 하둡 (Hadoop) 설치하기

HyeonKi Jo·2022년 8월 29일
1

HADOOP_SPARK_GRPC_KAFKA

목록 보기
1/1
post-thumbnail

CentOS7에 하둡 설치하기

Virtualbox에 CentOS7VM 올리기

CentOS7 이미지(.iso)로 VM생성

JAVA 확인

  • 자바 가 없음

자바 다운로드

  • https://www.oracle.com/java/technologies/downloads/#java8
  • 막무가내로 최신버전을 받아본다.
  • wget https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz
  • tar -zxvf jdk-18_linux-x64_bin.tar.gz

  • 압축해제한 폴더를 /usr/local/폴더로 옮긴다.
  • 옮긴 후, 폴더 내부를 확인해서 bin 디렉토리가 존재하는지 확인

JAVA 환경변수 설정

  • vi /etc/profile
export JAVA_HOME=/usr/local/jdk-18.0.2.1/ # 본인의 경로 넣기 
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_OPTS="-Dfile.encoding=UTF-8"
export CLASSPATH="."
  • 환경설정 후 적용 및 재부팅해준다.
    • source /etc/profile
    • reboot
  • 재부팅이 완료되면, java -version명령어로 자바 설치를 확인해준다.
  • 방금 재부팅 했지만, 성공적인 자바 설치 축하로써poweroff 후 스냅샷을 찍어준다.

하둡 설치

  • https://hadoop.apache.org/releases.html
  • 하둡은 안전하게 최신버전이 아닌 3.2.4를 사용해본다.
  • wget https://dlcdn.apache.org/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
  • tar -zxvf hadoop-3.2.4.tar.gz

압축 해제한 하둡 파일 이동

  • mv hadoop-3.2.4 /opt/hadoop
    • 압축 해제한 하둡파일을 /opt디렉토리에 hadoop이라는 이름으로 옮겨준다.

하둡 환경 변수 설정 (JAVA환경변수 설정한 곳 아래에 덧붙혀준다.)

  • vi /etc/profile
export HADOOP_HOME=/opt/hadoop     # 본인의 경로 쓰기
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

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"
  • 이후 마찬가지로 환경설정 적용 및 재부팅해준다.
  • source /etc/profile
  • reboot
  • hadoop version
  • 성공적으로 설치가 확인되었으니 스냅샷을 찍어준다.
  • poweroff

설치 잘 됬는지 확인

  • hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount $HADOOP_HOME/etc/hadoop/hadoop-env.sh wordcount_output
    • jar버전 잘 확인
    • word 카운트를 사용해서 확인해본다.
    • 위 출처 블로그에는 3.2.2버전으로 되어있어 우리가 설치한 3.2.4버전으로 내용을 바꿔서 확인해야 한다.
  • 에러
  • 성공
  • 이렇게 뭔가 길게 나온다.
  • ls -la wordcount_output/*
  • SUCCESS를 확인할 수 있다.

SSH 설치

  • yum install openssh*
    • SSH를 설치한다.
  • /usr/sbin/sshd
  • ssh-keygen -t rsa
  • 위와같은 출력을 볼 수 있다.
  • 키가 잘 생성되었다.
  • 내 스스로 ssh접속을 해보면 잘 접솔 할 수 있다.
  • 그러나 SSH Public Key를 생성했는데도 비밀번호를 물어본다.
  • ssh-copy-id root@localhost
    • Public Key를 상대 VM (여기서는 localhost)에 넘겨줌으로써 비밀번호 대신 ssh 키를 사용해 로그인한다.
  • 다시 접근하면 비밀번호를 묻지 않는다.

환경변수 수정

hadoop-env.sh 파일 수정

  • vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
    • export JAVA_HOME= 에 jdk경로를 추가한다.
  • export JAVA_HOME=/usr/local/jdk-18.0.2.1

core-site.xml수정(Namenode 세팅)

  • 영역 안에서 수정한다.
  • vi $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
</configuration>

hdfs-site.xml수정

  • 역시 영역 안에서 정한다.
  • vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
</configuration>

Namenode 포맷

  • hdfs namenode -format

하둡 클러스터 시작하기

  • start-all.sh
  • jps
  • 잘 로그인 되었고, jps에 Datanode와 Namenode가 있어야하는데 없다...?

로그 메세지 확인

  • cd /opt/hadoop/etc/hadoop/
  • cat hadoop-root-namenode-localhost.localdomain.log
2022-08-31 07:03:18,600 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]
2022-08-31 07:03:18,762 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: createNameNode []
2022-08-31 07:03:18,887 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: Loaded properties from hadoop-metrics2.properties
2022-08-31 07:03:19,062 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled Metric snapshot period at 10 second(s).
2022-08-31 07:03:19,062 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system started
2022-08-31 07:03:19,089 INFO org.apache.hadoop.hdfs.server.namenode.NameNodeUtils: fs.defaultFS is file:///
2022-08-31 07:03:19,225 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.
        at org.apache.hadoop.hdfs.DFSUtilClient.getNNAddress(DFSUtilClient.java:781)
        at org.apache.hadoop.hdfs.DFSUtilClient.getNNAddressCheckLogical(DFSUtilClient.java:810)
        at org.apache.hadoop.hdfs.DFSUtilClient.getNNAddress(DFSUtilClient.java:772)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.getRpcServerAddress(NameNode.java:555)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.loginAsNameNodeUser(NameNode.java:695)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:720)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:977)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:950)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1723)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1790)
2022-08-31 07:03:19,227 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1: java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.
2022-08-31 07:03:19,229 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost.localdomain/127.0.0.1
************************************************************/
  • fs.defaultFS에 권한이 없다.?
  • file:///에 권한이 없다는 것은 file경로가 ///로 되어잇어 그런 것 같다.
  • 경로 수정하는것을 찾아봐야 할듯 하다.

해결

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://127.0.0.1:9000</value>
  </property>
</configuration>
  • 위 코드를 복사하니 jps에서 Namenode와 Datanode가 나왔다.

Master VM클론해서 worker1,2만들어주기

  • master를 linked clone으로 worker노드 2개로 클론해줬다.
  • 각 worker노드의 컴퓨팅 자원은 CPU:1, RAM:2Gb 로 바꿔준다.

호스트이름 변경

  • hostnamectl set-hostname [변경할 호스트이름]
    • 호스트이름을 각 master, worker1, worker2로 바꿔주고, exit명령어로 연결해제 후 재연결해준다.

host setup

vi /etc/hosts

127.0.0.1 localhost
192.168.0.185 master
192.168.0.114 worker1
192.168.0.115 worker2

ping 테스트

  • 서로의 노드에게 ping이 잘 나간다.

SSH public key 복사하기

  • scp -rp ~/.ssh/id_rsa.pub root@worker1:~/.ssh/authorized_keys
  • scp -rp ~/.ssh/id_rsa.pub root@worker2:~/.ssh/authorized_keys
  • 근데 현재 Master에서 클론해온 VM들인데 이렇게 복사할 필요가 없긴 하다.
  • 퍼블릭키까지 복사되었기 때문이다.
  • 그냥 각자 ip_rsa.pub을 authorized_keys로 복사해줘도 똑같을 것이다.
  • worker1 2 모두 잘 연결되었다.

core-site.xml 수정

  • <configuration> </configuration> 영역 안에서 수정
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
  </property>
</configuration>

namenode와 datanode디렉토리 생성 (master만)

  • cd $HADOOP_HOME
  • rm -rf namenode
  • rm -rf datanode
  • mkdir namenode
  • chmod 777 namenode
  • mkdir datanode
  • chmod 777 datanode

worker1, 2에 datanode폴더 생성

  • cd $HADOOP_HOME
  • rm -rf datanode
  • mkdir datanode
  • chmod 777 datanode

hdfs-site.xml수정 (master만)

  • vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/opt/hadoop/namenode</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/opt/hadoop/datanode</value>
        </property>
</configuration>

hdfs-site.xml수정 (worker1, 2)

  • vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/opt/hadoop/datanode</value>
        </property>
</configuration>

job tracker 셋업 (모두)

  • vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

yarn-site.xml수정 (모두)

  • vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>

        <property>
                <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>

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

        <property>
                <name>yarn.application.classpath</name>
                <value>/opt/hadoop/share/hadoop/mapreduce/*,/opt/hadoop/share/hadoop/mapreduce/lib/*,/opt/hadoop/share/hadoop/common/*,/opt/hadoop/share/hadoop/common/lib/*,/opt/hadoop/share/hadoop/hdfs/*,/opt/hadoop/share/hadoop/hdfs/lib/*,/opt/hadoop/share/hadoop/yarn/*,/opt/hadoop/share/hadoop/yarn/lib/*</value>
        </property>
</configuration>

masters, workers수정 (master만 적용)

  • vi $HASOOP_HOME/etc/hadoop/masters
  • vi $HASOOP_HOME/etc/hadoop/workers

namenode 포맷 (master)

  • hdfs namenode -format

하둡 start alc process리스트 확인(모두)

  • start-all.sh
  • jps
  • 잘 나온다 ㅎㅎ
  • 여기서 master에서만 namenode가 나와야한다.
  • 잘 보면 worker1에도 namenode가 존재하는데, 이는 처음 실수로 start-all.sh를 worker1에서 해서 그렇다.
  • 재부팅한 후 다시 확인해보면 없어져있다.

텍스트파일 업로드 해보기(master)

hadoop에 있는 README.txt올려보기

profile
Talking Potato

0개의 댓글