방화벽 해제
우리가 만들어준 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서버에서 문제가 생긴것입니다.
디버깅
만약 어떤 문제가 생긴다면 제가 알아본 디버깅 팁들을 사용해보시기 바랍니다.
- 네임노드를 포맷하고 각 데이터노드의 ~/hadoop-data의 내용물을 모두 지우고 다시 hadoop-run으로 구동시켜본다.
- 방화벽이 네개의 기기 모두 헤지되어있는지 확인한다.
- /etc/hosts의 호스트이름과 ip가 맞는지 확인한다.
- conf의 세개 파일 core-site.xml, hdfs-site.xml, mapred-site.xml이 모두 제대로 복사되어 동일한 내용을 담고있는지 확인한다.
- 위의 방법 모두 되지 않는다면, 각 기기에서 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/
'빅데이터 > 하둡' 카테고리의 다른 글
하둡 1.0 튜토리얼 - (7) HDFS 파일 입출력 (0) | 2019.07.14 |
---|---|
하둡 1.0 튜토리얼 - (6) HDFS 명령어 (0) | 2019.07.12 |
하둡 1.0 튜토리얼 - (4) 클러스터 구성 (0) | 2019.07.12 |
하둡 1.0 튜토리얼 - (3) 하둡 설치 (0) | 2019.07.12 |
하둡 1.0 튜토리얼 - (2) 자바 설치 (0) | 2019.07.11 |