Cloud2012.08.29 17:27
나는 이런 Hadoop 명령어 정리를 해 놓은 블로그나 웹사이트를 검색할 수 없었기 때문에 블로그로 정리해 공유하고자 한다. 


실은 이것보다도 더 큰 이유는 몇일동안 Hadoop을 공부하면서 왜 서버를 내렸다 올리면 HDFS가 실행이 안 될까? 하는 의문을 가졌기 때문이다. 구글링을 해보고 책을 봐도 특별한 해답이 보이질 않았는데, 오늘  드디어 그 비밀을 알아냈다.


하둡 설치 폴더에서 hadoop을 보면 hadoop은 스크립트 파일이다. 특정 언어로 프로그래밍한 것이 아니라, 단순한 Linux Shell Script 라는 것이다. hadoop 명령을 그냥 치면 다음과 같이 hadoop 명령어들이 나오는데, 해답은 저 명령어 안에 있었다.


그래서 오늘은 hadoop 명령어들을 한번 정리해 보도록 하겠다.


Usage: hadoop [--config confdir] COMMAND

where COMMAND is one of:

  namenode -format     format the DFS filesystem

  secondarynamenode    run the DFS secondary namenode

  namenode             run the DFS namenode

  datanode             run a DFS datanode

  dfsadmin             run a DFS admin client

  mradmin              run a Map-Reduce admin client

  fsck                 run a DFS filesystem checking utility

  fs                   run a generic filesystem user client

  balancer             run a cluster balancing utility

  fetchdt              fetch a delegation token from the NameNode

  jobtracker           run the MapReduce job Tracker node

  pipes                run a Pipes job

  tasktracker          run a MapReduce task Tracker node

  historyserver        run job history servers as a standalone daemon

  job                  manipulate MapReduce jobs

  queue                get information regarding JobQueues

  version              print the version

  jar <jar>            run a jar file

  distcp <srcurl> <desturl> copy file or directories recursively

  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive

  classpath            prints the class path needed to get the

                       Hadoop jar and the required libraries

  daemonlog            get/set the log level for each daemon

 or

  CLASSNAME            run the class named CLASSNAME

Most commands print help when invoked w/o parameters.


그림과 함께 보도록 하자. 우리의 이해를 더 높여줄 것이다. 

아래 그림은 http://hadoop.apache.org 에 있는 HDFS 아키텍처이다.



hadoop namenode -format

말 그대로 namenode을 포맷한다. hadoop은 기본적으로 namenode라는 저장공간을 가지고 있으며, 그곳에 디렉토리를 생성하기도 하고, 파일을 업로드하기도 한다. 그런데 이 명령어를 실행하면 namenode 안의 모든 내용들이 삭제된다. 그러니 처음 Hadoop을 설치했을때만 사용해야 한다.


hadoop secondarynamenode

하둡은 분산파일 시스템이라고 했다. namenode가 하나만 존재할리가 없다. master 에 존재하는 namenode 말고, 

그외의 slave 에 존재하는 namenode를 클라이언트가 접속해 사용할 수 있도록 Running 시킨다.


hadoop namenode

아래 분석이 내용이 틀리다는 사실을 오늘 알아냈다. namenode 포맷을 하면 /tmp 폴더에 hadoop namenode가 생성이 되는데 이 폴더는 서버를 내렸다가 올리면 사라진다. 그러므로 서버를 shutdown시키면 안되는 것이다. 

이 namenode 명령어는 namenode를 Running 시키는 명령어인데, start-all.sh나 start-dfs.sh를 실행하면 자동으로 함께 실행된다. 전에 서버를 내렸다가 올렸을때 namenode가 실행되지 않은 이유는 namenode 폴더가 없었기 때문이였다.

서버를 내렸다가 올리면 hdfs가 실행이 되지 않는 이유는 바로 이 명령어 때문이였다. 

서버를 재시작 했을 경우에는 namenode가 서버가 종료되면서 같이 종료가 되는지 서버를 시작하면 자동으로 올라오지 않는다. 그렇기 때문에 이 명령어를 실행시켜 꼭 master server의 namenode을 Running 시켜줘야 한다. 이 명령어가 바로 그 명령어다.


hadoop datanode

이 명령어는 실 데이터를 저장하는 datanode를 Running 시키는 명령어이다. 이 명령어는 start-all.sh나 start-dfs.sh를 실행하면 자동으로 실행이 된다.


hadoop dfsadmin

dfsadmin은 DFS Admin Web UI에서 확인할 수 있는 내용들을 linux command로 hdfs server 정보를 확인할 수 있는 명령어이다. 이 명령어에는 다양한 옵션들이 존재하는데 요건 다음 번 포스팅에서 작성하도록 하겠다.


hadoop mradmin

mradmin 명령어는  Service, Queues, UserGroup, SuperUserGroup, Node등의 정보를 다시 refresh 하는 기능들로 구성이 되어 있다.


hadoop fsck

fsck 명령어는 DFS filesystem을 체킹할 수 있는 Utility인데, 해당 Path의 파일을 move하거나 삭제, 파일 목록을 확인하는 등등의 7가지 관련 옵션들이 존재한다.


hadoop fs

우리가 가장 많이 사용하는 명령어가 바로 이 fs 명령어일 것이다. fs 명령어는 파일에 대한 모든 system 명령어를 제공한다.

그래서, 명령어 설명도 제일 잘 되어 있다. 그러므로 여기서는 설명을 생략하도록 하겠다. 


o Hadoop Shell Commands : http://hadoop.apache.org/common/docs/r0.17.2/hdfs_shell.html

o Hadoop 파일시스템 명령어 정리 : http://blog.acronym.co.kr/370


hadoop balancer

이 명령어는 hadoop cluster간의 balancing을 맞추기 위한 명령어이다.


hadoop fetchdt

fetchdt 명령어는 NameNode로부터 delegation 토큰 파일을 회수한다. 사전에는 delegation이 대표단, 파견단 이런 뜻으로 나오는데 대표 토큰 파일을 말하는것인지도 모르겠다.


hadoop jobtracker

MapReduce job Tracker node를 Running 시키는 명령어로 start-all.sh 나 start-mapred.sh 를 실행하면 자동으로 실행된다.


hadoop pipes

이 명령어는 Job을 실행시키기 위해 directory path나 jar file, java class file 등을 연결시켜 주는 명령어이다. pipes 명령어에는  이와 관련된 10개의 옵션들이 있다.


hadoop tasktracker

MapReduce task Tracker node를 Running 시키는 명령어로 start-all.sh 나 start-mapred.sh 를 실행하면 자동으로 실행된다.


hadoop historyserver

standalone 데몬의 history server를 Running 시키는 명령어인데 이 명령어 역시 start-all.sh나 start-mapred.sh를 실행하면 자동으로 실행된다.


hadoop job

현재 실행되고 있는 mapreduce job의 상태를 확인한다든가 kill 시킨다든가 job list를 확인할 때 쓰는 명령어로 관련 옵션이 13개의 command 옵션이 존재한다.


hadoop queue

job을 실행할때 사용하는 queue의 정보를 조회해 온다.


hadoop version

hadoop version은 버전 정보를 보여준다.


hadoop jar <jar>

우리가 자바로 프로그래밍한 jar 파일을 실행할 때 사용하는 명령어이다. 


hadoop distcp <srcurl> <desturl>

hdfs://A:8020/user/foo/bar 식으로 생긴 srcurl에서 desturl로 파일을 복사하는 기능인데 목적지 URL로 Overwrite 할 수 있으며, 삭제도 할 수 있다. 이외에도 다양한 옵션들이 존재한다.


hadoop archive -archiveName NAME -p <parent path> <src>* <dest> 

이 명령어 좀 복잡한데 하둡의 아카이브를 생성하는 명령어란다.


hadoop classpath

하둡에 설정되어 있는 관련 클래스패스들을 보여준다.


hadoop daemonlog

이건 하둡의 데몬의 log을 남길때 log 레벨을 설정하거나 정보를 확인할 수 있다.


hadoop CLASSNAME

이 명령어는 자바로 프로그래밍한 자바 클래스 파일을 실행시켜준다고 했는데 잘 안된다. 오류가 발생한다. 요건 나도 잘 모르겠다. 이걸 어떻게 실행하는건지 알아냈다. 다음번 포스팅에서 그 비밀을 알려주도록 하겠다.



이상으로 23개의 Hadoop 명령어를 살펴보았다. 제일 좋은건 이렇게 남이 써 놓은 글만 보지 말고 직접 실행해 보고 눈으로 확인해 보길 바란다. 그렇지 않으면 내것이 되지 않기 때문이다. 

Posted by 나리 짱!!! naleejang