빅데이터/하둡

하둡 1.0 튜토리얼 - (5) 하둡 실행

_금융덕후_ 2019. 7. 12. 15:39
728x90
반응형

 

방화벽 해제

우리가 만들어준 4개의 VM은 각각 통신을 해야합니다. 따라서 각 기기의 방화벽을 해제해주도록 하겠습니다.

(VM을 사용하지 않고 호스트 기기에서 접속을 하신다면, 이전 포스팅에서 했던 ssh-copy-id를 사용해 호스트의 ssh 키를 각 VM에 복사하시면 비교적 편하게 작업하실 수 있습니다.)

> systemctl stop firewalld

이렇게 하면 root의 비밀번호를 요구하고, 방화벽이 멈추게 됩니다.

 

하둡 실행

이제 doop01기기에서 하둡을 실행해보도록 하겠습니다.

먼저 하둡을 쉽게 실행할 수 있도록 몇가지 명령어 alias를 등록하겠습니다.

홈 디렉토리에서 .bashrc파일을 열어보겠습니다.

위와같은 텍스트 파일이 나와야합니다. 이 파일 역시 .bash_profile과 비슷한 일종의 설정파일입니다.

이 파일의 가장 밑에 다음 세개의 alias를 등록하겠습니다.

alias hadoop="~/hadoop/bin/hadoop"
alias hadoop-format="~/hadoop/bin/hadoop namenode -format"
alias hadoop-run="~/hadoop/bin/start-all.sh"
alias hadoop-stop="~/hadoop/bin/stop-all.sh"

그리고 고쳐준 .bashrc파일을 시스템에 적용해줍니다.

> source .bashrc

위에서 등록해준 명령은 위에서부터 각각

  • 하둡 명령어 등록
  • 하둡 네임노드 초기화
  • 하둡 전체 기기 시작
  • 하둡 전체 기기 스탑

 

이제 등록해준 alias로 하둡의 네임노드를 초기화합니다.

> hadoop-format

그럼 다음과같은 로그가 나올것입니다.

19/07/12 01:23:28 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = doop01/192.168.1.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 1.2.1
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
STARTUP_MSG:   java = 1.8.0_211
************************************************************/
19/07/12 01:23:28 INFO util.GSet: Computing capacity for map BlocksMap
19/07/12 01:23:28 INFO util.GSet: VM type       = 64-bit
19/07/12 01:23:28 INFO util.GSet: 2.0% max memory = 1013645312
19/07/12 01:23:28 INFO util.GSet: capacity      = 2^21 = 2097152 entries
19/07/12 01:23:28 INFO util.GSet: recommended=2097152, actual=2097152
19/07/12 01:23:28 INFO namenode.FSNamesystem: fsOwner=doop
19/07/12 01:23:28 INFO namenode.FSNamesystem: supergroup=supergroup
19/07/12 01:23:28 INFO namenode.FSNamesystem: isPermissionEnabled=true
19/07/12 01:23:28 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
19/07/12 01:23:28 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
19/07/12 01:23:28 INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 0
19/07/12 01:23:28 INFO namenode.NameNode: Caching file names occuring more than 10 times 
19/07/12 01:23:29 INFO common.Storage: Image file /tmp/hadoop-doop/dfs/name/current/fsimage of size 110 bytes saved in 0 seconds.
19/07/12 01:23:29 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/tmp/hadoop-doop/dfs/name/current/edits
19/07/12 01:23:29 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/tmp/hadoop-doop/dfs/name/current/edits
19/07/12 01:23:29 INFO common.Storage: Storage directory /tmp/hadoop-doop/dfs/name has been successfully formatted.
19/07/12 01:23:29 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at doop01/192.168.1.1
************************************************************/

여기서 주의해야할 점은 NameNode의 host가 doop01/192.168.1.1으로 잘 설정되어 있는가 입니다.

(192.168.1.1은 제가 임의로 설정해놓은 ip이고 본인의 VM doop01의 ip가 나와야합니다.)

설정이 되어있지 않으면 처음부터 다시 포스팅을 보시면서 어떤 부분이 틀렸는지를 찾아보셔야합니다.

 

초기화가 끝났으면 하둡을 구동시켜줍니다.

> hadoop-run

제대로 동작을 한다면 doop01~doop04까지 설정해준 모든 서비스를 구동시키는 로그가 나옵니다.

 

JPS

하둡이 제대로 동작하고 있는지 확인하는 방법은 두가지가 있습니다.

각 VM에서 다음 명령어를 입력해봅니다.

> jps

각각의 VM의 응답이 달라야합니다.

doop01 doop02 doop03 doop04
9361 JobTracker
9180 NameNode
9485 Jps
8116 Jps
7957 SecondaryNameNode
7851 DataNode
8045 TaskTracker
6865 Jps
6773 TaskTracker
6669 DataNode
6946 TaskTracker
7026 Jps
6826 DataNode

위의 프로세스들 중 Jps를 제외한 나머지 프로세스들이 의미있는 프로세스들입니다.

만약 시간이 어느정도 지났을 때 위의 프로세스가 제대로 나오지 않는다면 무슨 문제가 있는것입니다.

 

하둡 모니터링

이제 호스트 시스템의 웹브라우저에서 다음과같은 url로 접속해봅니다.

(192.168.1.1은 본인의 doop01의 ip로 대체하시기 바랍니다.)

192.168.1.1:50070

만약 하둡 클러스터링이 제대로 구동되고있다면 다음과같은 페이지가 나와야합니다.

또한 위의 화면에서 Live Node 옆에 3이라는 숫자가 꼭 나와야합니다.

이는 지금 클러스터에 포함된 Datanode가 3개가 있다는 의미입니다.

이 숫자가 하나라도 적으면 어떤 Datanode서버에서 문제가 생긴것입니다.

 

디버깅

만약 어떤 문제가 생긴다면 제가 알아본 디버깅 팁들을 사용해보시기 바랍니다.

  1. 네임노드를 포맷하고 각 데이터노드의 ~/hadoop-data의 내용물을 모두 지우고 다시 hadoop-run으로 구동시켜본다.
  2. 방화벽이 네개의 기기 모두 헤지되어있는지 확인한다.
  3. /etc/hosts의 호스트이름과 ip가 맞는지 확인한다.
  4. conf의 세개 파일 core-site.xml, hdfs-site.xml, mapred-site.xml이 모두 제대로 복사되어 동일한 내용을 담고있는지 확인한다.
  5. 위의 방법 모두 되지 않는다면, 각 기기에서 logs밑에있는 .log파일들을 확인해 디버깅한다.

예제 실행

워드카운트 예제 실행

하둡과 맵리듀스가 잘 동작하는지 확인하기 위해 예제를 실행해 보도록 하겠습니다.

먼저 하둡의 파일시스템 안에 하나의 파일을 넣어주겠습니다. 아래의 커맨드를 실행하려면 hadoop디렉토리 안에 있어야 합니다.

> hadoop fs -put conf/hadoop-env.sh conf/hadoop-env.sh

다음 포스팅에서 더 자세하게 알아볼 것이지만, 위는 로컬파일인 conf/hadoop-env.sh파일을 하둡의 파일시스템 안의 conf/위치에 hadoop-env.sh파일로 넣어주라는 명령입니다.

 

파일이 성공적으로(문제없이) 들어갔으면 아래의 커맨드를 실행해 기본 예제를 돌려줍니다.

> hadoop jar hadoop-examples-1.2.1.jar wordcount conf/hadoop-env.sh wordcount_output

이 예제는 하둡의 helloworld같은 예제로 conf/hadoop-env.sh파일의 단어를 맵리듀스를 사용해 세어주는 예제입니다.

하둡 내부의 jvm에서 하둡이 기본적으로 제공하는 예제의 jar파일을 돌려주는 예제입니다.

실행을 하면 맵리듀스가 돌아가는 모습을 보실 수 있습니다.

(실행하지 못하고 자바 형식의 에러를 냈다면 위의 디버깅 방법들을 다시 해보시기 바랍니다.)

 

워드카운트 결과확인

맵리듀스가 제대로 실행이 되었다면 결과를 확인할 차례입니다.

hadoop fs -cat wordcount_output/part-r-00000

위의 명령을 실행하면 haoop-env.sh파일 안의 단어와 갯수가 쭉 나오는 것을 볼 수 있습니다.

 

이제 하둡 설치를 성공적으로 마쳤습니다.

 

참고자료

이 포스팅은 "시작하세요! 하둡 프로그래밍" 책의 예제를 무작정 따라해본 포스팅입니다.

https://wikibook.co.kr/beginning-hadoop-programming-2rev/

 

728x90
반응형