ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Hadoop] Mac OS에서 의사 분산 모드로 Hadoop 실행
    DB/HADOOP 2022. 9. 7. 18:08

    해당 게시글은 비전공자이자 초보 개발자 지망생이 작성한 글로 정확하지 않을 수 있으니 참고해주시길 바랍니다! 

    피드백과 정보 정정 댓글은 환영입니다 :)

     

    요즘 강의 듣고 남는 공강 시간에 하둡 완벽가이드라는 책을 읽고 있다. 하둡에 대한 기초 지식을 잘 풀어서 설명하고 있어서 읽게 되었는데, 오늘 이 책이 나에게 첫 시련을 주었다... 하둡은 brew로 쉽게 설치했으나 의사 분산 모드로 실행하는 과정에서 엄청난 삽질을 해버렸다. 다른 사람들이 나처럼 삽질 하지 않기를 바라며 그 과정을 정리해보도록 하겠다.

     

    설치 환경: Mac Os Catalina 버전 10.15.7

     

    0. ssh 설치 확인

    ssh localhost

    해당 코드를 입력하여 ssh 설치 여부를 확인해준다. 만약 connection refused 에러 메시지가 발생하면 시스템 환경설정에서 원격 로그인을 활성화해주어야 한다. 

    그런데 나는 어찌된 이유인지 원격 로그인을 켜도 로딩중이라고만 떠서 터미널에서 다음과 같은 명령어를 활용하여 원격 로그인을 켜줬다.

    첫 줄의 코드가 ssh를 켜주는 코드이고, 아래 코드는 꺼주는 코드이다.

    sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist >> Enabling SSH
    sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist >> Disabling SSH

    원격 로그인을 킨 후에 다시 ssh localhost 명령어를 쳤을 때 비밀번호를 입력하라는 메시지가 뜬다면 hadoop을 실행할 때 permission denied 오류가 뜰 수 있기에 다음 링크를 참고하여 미리 권한을 부여해주자.

    https://velog.io/@somnode/ssh-localhost-Permission-denied-해결

     

    ssh localhost Permission denied 해결

    ssh localhost를 위해서 기본적으로 아래 과정을 진행해야 한다.이렇게 설정을 했는데도 아래와 같은 에러가 발생했다.이럴 땐 ~/.ssh 디렉터리의 권한을 700으로 변경하자.권한이 775였을 때 안 되었

    velog.io

     

    1. brew로 hadoop 설치 후 설치 경로 확인하기

    brew install hadoop >> 하둡 설치
    brew info hadoop >> 하둡 설치 경로 확인

    ssh 관련 설치가 끝났다면 해당 명령어를 작성하여 하둡을 설치한다.

    이후 하둡 설치 경로를 확인하면 /usr/local/Cellar/hadoop/3.3.4임을 알 수 있다. (뒤에 나오는 버전은 다를 수 있으니 확인 필요)

     

    2. 의사 분산 모드로 활용하기 위해 xml, sh 파일 수정

    cd /usr/local/Cellar/hadoop/3.3.4/libexec/etc/hadoop

    위의 디렉토리로 이동하여 다음 다섯가지 파일을 수정해주어야 한다. (vim 사용, vim hadoop-env.sh)

     

    1) hadoop-env.sh 

    export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc="
    export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-18.0.1.1.jdk/Contents/Home"

    위의 코드를 문서 맨 아래에 추가해준다. 설치된 자바의 경로는 다를 수 있기에 /usr/libexec/java_home 를 통해 경로를 확인 후 붙여넣을 것!


    2) core-site.xml

    <configuration>
          <property>
              <name>hadoop.tmp.dir</name>
              <value>/usr/local/Cellar/hadoop/hdfs/tmp</value>
              <description>A base for other temporary directories.</description>
          </property>
          <property>
              <name>fs.default.name</name>
              <value>hdfs://localhost:9000</value>
          </property>
    </configuration>


    3) hdfs-site.xml

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>


    4) mapred-site.xml

    <configuration>
      <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
      </property>
      <property>
        <name>mapreduce.application.classpath</name>   
    	  <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
      </property>
    </configuration>


    5) yarn-site.xml

    <configuration>
    	<property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    	</property>
    	<property>
    		<name>yarn.nodemanager.env-whitelist</name>
    		<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    	</property>
    </configuration>

     

    3. 하둡 실행

    ssh localhost 를 마지막으로 확인해보고 하둡을 실행해보자!

    cd /usr/local/Celler/hadoop/3.3.4/libexec/sbin
    ./start-all.sh
    WARNING: Attempting to start all Apache Hadoop daemons as {user_name} in 10 seconds.
    WARNING: This is not a recommended production deployment configuration.
    WARNING: Use CTRL-C to abort.
    Starting namenodes on [localhost]
    Starting datanodes
    Starting secondary namenodes [{user_name}-ui-MacBookPro.local]
    2022-09-07 16:05:53,034 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Starting resourcemanager
    Starting nodemanagers

    sbin 디렉토리로 이동 후 start-all.sh 파일을 실행시켜주면 아래와 같은 경고 메시지와 함께 네임노드, 데이터 노드가 실행되고 있음을 알려준다.

    저 경고들...은 무시해도 된다고 하여 일단 무시는 하였는데 ^^ 빠른 시간 내에 이에 대한 해답을 얻기를 바라는 중이다...

    실행 후 노드들이 잘 돌아가고 있음을 알고 싶다면 jps 를 입력해주자. 현재 돌아가고 있는 노드들을 아래와 같이 확인할 수 있다. 

    (base) {user_name}-ui-MacBookPro sbin % jps
    14291 DataNode
    14776 Jps
    14425 SecondaryNameNode
    14191 NameNode

     

    만약 하둡 작업을 종료하고 싶다면 다시 sbin 디렉토리로 이동하여 stop-all.sh 파일을 실행시켜주면 된다.

    ./stop-all.sh

     

    느낀 점

    brew에서 valgrind 설치할 때에도 정말 힘들었는데... 그거보다 더 힘들어서 중간에 포기할 뻔 했다 ^^... 그래도 요즘 세상이 좋아져서 그런가... 인터넷에 해답이 잘 나와있다.. 세상 사람들 감사해요 인류애를 느낀 순간이었다! 

    'DB > HADOOP' 카테고리의 다른 글

    [Hadoop] 빅데이터 - 하둡이란? - HDFS  (0) 2022.08.06
Designed by Tistory.