'하둡'에 해당되는 글 3건

  1. 2012.09.10 Hadoop HDFS 사용자 생성 파일 테스트
  2. 2012.08.29 Hadoop 명령어 정리 (3)
  3. 2012.08.23 VM Ubuntu에 Hadoop(Stand-Alone) 설치하기 (2)
Cloud2012.09.10 17:56

오랜만에 다시 Hadoop을 테스트하기 위해 Shell 창을 열어 Hadoop명령어를 치려니 왠지 뭔가 생소하게 느껴지는 것이 새롭다. 오늘은 그 동안 삽질하면서 설치한 Hadoop에 책에서 나오는 코딩 된 HDFS 소스 파일들을 컴파일하고 실행하는 방법을 남겨보고자 한다.

 

그리고, 이번 테스트를 하면서 앞에서 실수한 부분을 다시 수정하고자 한다. 앞에서 하둡을 설치할 때 나는 자바 버전을 1.7 버전으로 설치를 하였었다. 그런데, 자바파일 컴파일을 하는 과정에서 컴파일이 되지 않고 컴파일은 되었다 할지라도 실행과정에서 java version 이 맞지 않는다는 오류를 발견할 수 있었다. 그래서, 하둡 홈폴더에 있는 build.xml 파일을 확인해서 보니, 자바버전이 1.6 버전으로 되어 있다는 것을 알았고, 설치되어 있는 1.7 버전을 삭제하고 다시 1.6버전으로 재 설치하였다. 그리고 나서 다시 컴파일을 하고 실행을 하니 정상적으로 테스트해 볼 수 있었다.

 

우선, JAVA로 된 샘플 소스를 코딩 해야한다. 다음에 나와 있는 소스 샘플은 한빛미디어 “Hadoop 완벽가이드에 있는 URLCat이라는 소스로써 복사해서 붙여도 무방은 하나 그래도 이왕 공부 하는거 하나하나 타이핑을 해 보면 더 좋지 않을까?


1   import java.io.InputStream;

2   import java.net.URL;

3    

4   import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;

5   import org.apache.hadoop.io.IOUtils;

6    

7   public class URLCat {

8    

9           static {

10                  URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());

11          }

12   

13          public static void main(String[] args) throws Exception {

14                  InputStream in = null;

15                  try {

16                          System.out.println(args[0]);

17                          in = new URL(args[0]).openStream();

18                          IOUtils.copyBytes(in, System.out, 4096, false);

19                  } finally {

20                          IOUtils.closeStream(in);

21                  }

22          }

23  }


이렇게 해서 타이핑 한 소스를 하둡이 설치되어 있는 소스 폴더(사용자 임의 지정 가능)에 옮긴다. Vi 에디터를 통해 간단하게 복사해서 붙여넣기 하고 저장하면 끝난다.


~!! 이번에는 컴파일을 한번 해 보도록 하자. 아주 중요하다. 책에 나오지 않는다. 한국 웹사이트나 블로그에도 안 나온다. 해외사이트에서도 찾기 힘들다. 일본 사이트에서 가서 겨우겨우 찾아서 볼 수 있었다.

 

우선, 하둡 홈 폴더에 들어가서 build 폴더를 생성한다.

$ cd hadoop-1.0.3

$ mkdir build

$ cd build

$ mkdir classes

 

생성이 되었으면 이제 컴파일을 해보자. 컴파일 공식은 다음과 같다. 우선 클래스 패스를 지정하자. Hadoop을 사용하여 소스를 코딩 했다면 반드시 Hadoop 홈폴더에 있는 hadoop-core 파일이 필요하다. 그러므로 클래스 패스는 하둡 홈에 있는 hadoop-core 파일을 써주고, 컴파일 된 클래스 파일이 저장될 위치를 –d 옵션을 통해 지정해 준다. 이 위치는 아까 위에서 생성한 build 폴더 밑에 classes 폴더로 지정하면 된다. 다음은 컴파일 하고자 하는 자바파일명을 써주면 된다.


$ javac –classpath $HADOOP_HOME/hadoop-core-1.0.3.jar –d [class_path] [filename].java


그럼 컴파일 예제를 한번 보자.


이제 실행을 한번 해 볼까? 다음과 같이 입력하자.

$ hadoop URLCat hdfs://localhost/[경로]/[파일명]

 

나 같은 경우에는 localhost로 하지 않고 IP를 지정해주었기 때문에 지정한 IP PortURL 경로를 잡아주었다. 하둡의 웹 인터페이스로 미리 하둡에 올려둔 파일의 경로를 알아보자.


이제 테스트를 해 보면 파일에 있는 내용이 콘솔창으로 보일 것이다.



요즘 꼭 지켜줘야 할 것 같은 참조한 사이트나 블로그의 URL을 꼭 남겨주는 센스라고나 할까? 참조 블로그를 남겨본다.


참조 블로그 : http://techme.lofter.com/post/ccd6e_1dd8c8

http://caoruntao.iteye.com/blog/996120

저작자 표시 비영리 변경 금지
신고
Posted by 나리 짱!!! naleejang
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
Cloud2012.08.23 15:27

작년 10월 무렵에 하둡을 한번 설치를 해 본적이 있었다. 그때는 메뉴얼도 잘 안나와 있고, 무슨 소리인지 잘 몰라서 고개만 갸우뚱거리다가 그냥 넘어갔는데, 요번에 하둡을 다시 설치해 볼일이 생겨 구글링을 해 보니 작년하고 다르게 쉬운 메뉴얼들이 많이 나와 있었다. 그래서, 가장 간단하면서도 빠르고 쉽게 하둡을 설치할 수 있는 방법을 글로 적어보도록 하겠다.


대부분의 리눅스에는 OpenJDK가 설치되어 있다. 

하둡은 자바이기 때문에, 자바를 함께 설치를 해야하는데 sun jdk가 가장 궁합이 잘 맞는다고 한다.


그래서, 이번에는 Ubuntu에 자바 설치하는 것부터 삽질해 보았다.


1.     Sun jdk1.7을 설치한다.  Oracle jdk7을 설치해야하는줄 알았는데, 나중에 프로그래밍을 하는데 Java Version이 안 맞는다는 오류가 발생을 했다. 그래서 설치한 jdk7을 다시 다 삭제를 해야만 했다. ㅠㅠ 그래서 sun-java6-jdk를 설치해야 하는데 기가막히게 설명을 잘 해놓은 블로그를 찾았다. (http://ammoguy.springnote.com/pages/354463) 여기 들어가면 완전 친절하게 써 놓았으니 참고해서 자바를 설치하길 바란다.

$ sudo add-apt-repository ppa:webupd8team/java

$ sudo apt-get update

$ sudo apt-get install oracle-jdk7-installer 

 

2.     http://ftp.daum.net/apache/hadoop/common/stable/ 에서 hadoop-1.0.3.tar.gz 을 다운로드 받아 압축을 푼다.




3.     $HOME 디렉토리의 .profile을 열어 다음과 같은 내용을 추가한다.

export JAVA_HOME="/usr/lib/jvm/default-java"

export HADOOP_HOME="/home/nalee/hadoop-1.0.3"

 




4.     다음과 같은 명령어로 터미널창의 환경변수를 적용해 준다.

$ source ~/.profile 

 

5.     Hadoop Home > conf > hadoop_env.sh 파일을 열어서 4번에서 입력한 것처럼 JAVA_HOME을 다음과 같이 수정한다.

# export JAVA_HOME=/usr/lib/j2sdk1.5-sun

to

export JAVA_HOME=/usr/lib/jvm/default-java


6.     이제 간단하게 테스트를 한번 해 보자

-      Hadoop Version 알아보기




-      간단한 데이터 수집해 보기

$ mkdir input 

$ cp conf/*.xml input 

$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 

$ cat output/*


참조 블로그 :

http://crazia.tistory.com/742

http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html

저작자 표시 비영리 변경 금지
신고
Posted by 나리 짱!!! naleejang