BLOG ARTICLE 하둡 예제 | 2 ARTICLE FOUND

  1. 2012.09.01 hadoop - PutMerge 프로그램 작성
  2. 2012.08.31 hadoop - Fully distributed Mode - 예제실행



PutMerge 프로그램


hadoop 에서는 getmerge 라는 명령어를 제공하는데 이 명령어는 HDFS 안에 있는 다수의 파일들을 로컬 머신에 복사할때 하나의 파일로 통합해주는 역활을 한다. 요번 예제는 getmerge 와는 반대인 로컬머신에 존재하는 다수의 파일을 HDFS 안에 하나의 통합된 파일로 복사하는 PutMerge 소스를 구현해보겠다. 


!! start-all.sh 로 HDFS on!!


소스 편집


[root@master hadoop-1.0.3]# vi PutMerge.java   // 소스를 생성하고 편집


import java.io.IOException;


import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FSDataInputStream;

import org.apache.hadoop.fs.FSDataOutputStream;

import org.apache.hadoop.fs.FileStatus;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;


public class PutMerge {

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


                Configuration conf = new Configuration();    

                FileSystem hdfs = FileSystem.get(conf);    //HDFS 와 인터페이스 하기 위한 클래스

                FileSystem local = FileSystem.getLocal(conf);    //LOCAL 시스템과 인터페이스 하기 위한 클래스


                Path inputDir = new Path(args[0]);

                Path hdfsFile = new Path(args[1]);

                try {

                        FileStatus[] inputFiles = local.listStatus(inputDir);    //path 객체와, 파일과 디렉터리의 메타 데이터를 저장

                        FSDataOutputStream out = hdfs.create(hdfsFile);        //HDFS 에 파일을 쓰기 위한 객체


                        for (int i = 0; i<inputFiles.length; i++) {                // 아마 파일 갯수 만큼 반복되는거 같음

                                System.out.println(inputFiles[i].getPath().getName());

                                FSDataInputStream in = local.open(inputFiles[i].getPath());  //로컬 입력 스트림 열기    

                                byte buffer[] = new byte[256];

                                int bytesRead = 0;

                                while( (bytesRead = in.read(buffer)) > 0) {        //바이트 단위로 HDFS 파일에 쓰기

                                        out.write(buffer, 0, bytesRead);

                                }

                                in.close();

                        }

                        out.close();

                } catch (IOException e) {

                        e.printStackTrace();

                }

        }

}



  테스트


위에서 짠 java 소스 파일을 컴파일!!
  
[root@master hadoop-1.0.3]# javac -cp hadoop-core-1.0.3.jar -d classes PutMerge.java

// 만약 commons 객체 를 찾지 못하는 오류가 뜬다면  아래와 같이 다시 컴파일...
[root@master hadoop-1.0.3]# javac -cp hadoop-core-1.0.3.jar:lib/commons-cli-1.2.jar -d classes PutMerge.java

// classpath 설정이 재대로 되질 않아 commons 객체를 인식하지 못하는 오류같다...


// jar 파일로 압축후 실행 

[root@master hadoop-1.0.3]# jar -cvf jars/putmerge.jar -C classes/ .
Manifest를 추가함
추가하는 중: PutMerge.class(입력 = 1822) (출력 = 930)(48%를 감소함)

// inputtext 폴더안에 두개의 txt파일을 생성하고 실행!!
[root@master hadoop-1.0.3]# hadoop jar jars/putmerge.jar PutMerge inputtext word-merge.txt 
input1.txt
input2.txt
[root@master hadoop-1.0.3]# hadoop fs -ls
Found 3 items
-rw-r--r--   1 root supergroup         25 2012-08-31 17:16 /user/root/input
drwxr-xr-x   - root supergroup          0 2012-08-31 17:26 /user/root/output
-rw-r--r--   1 root supergroup        109 2012-09-01 02:39 /user/root/word-merge.txt   // 통합된 txt파일 생성

[root@master hadoop-1.0.3]# hadoop fs -cat word-merge.txt        //두개의 txt 파일이 하나로 합쳐져서 출력된다.!!
what is Hadoop?
ok! now let's study Hadoop!!!!
a few minutes later....
What the hell !!! what does it mean?

저작자 표시
신고



Fully distributed Mode 에서 예제 실행

 


fully distributed mode 에서 하둡 예제를 실행 해보고 클러스터 상태를 모니터링 하는데 사용되는 하둡의 웹 인터페이스를 살펴보겠습니다.


하둡 완전분산모드까지 오류 없이 진행되었다는 가정하에 포스팅 할게요 ^^


일단 분산모드에서 모든 파일의 입출력관리는 모두 hdfs(hadoop file system) 안에서 이루어진다. 

예제 실행을 위해서 입력파일을 hdfs 안에 올려놔야 한다.

start-all.sh 모든 데몬들을 실행시키고 시작한다.


HDFS(hadoop file system) 


[root@master hadoop-1.0.3]# hadoop fs -put input input  // local 에서 input파일을 동일한 이름으로 hdfs 안에 저장

[root@master hadoop-1.0.3]# hadoop fs -ls                    // 검색해보면 파일이 올라갔음을 볼수 있다.

Found 1 items

-rw-r--r--   1 root supergroup         25 2012-08-31 17:16 /user/root/input


wordcount 예제 실행


[root@master hadoop-1.0.3]# hadoop jar hadoop-examples-1.0.3.jar wordcount input output

12/08/31 17:26:13 INFO input.FileInputFormat: Total input paths to process : 1

12/08/31 17:26:13 INFO util.NativeCodeLoader: Loaded the native-hadoop library

12/08/31 17:26:13 WARN snappy.LoadSnappy: Snappy native library not loaded

12/08/31 17:26:13 INFO mapred.JobClient: Running job: job_201208311703_0001

12/08/31 17:26:14 INFO mapred.JobClient:  map 0% reduce 0%

12/08/31 17:26:29 INFO mapred.JobClient:  map 100% reduce 0%

12/08/31 17:26:41 INFO mapred.JobClient:  map 100% reduce 100%

12/08/31 17:26:46 INFO mapred.JobClient: Job complete: job_201208311703_0001            // 작업완료

12/08/31 17:26:46 INFO mapred.JobClient: Counters: 29

12/08/31 17:26:46 INFO mapred.JobClient:   Job Counters

12/08/31 17:26:46 INFO mapred.JobClient:     Launched reduce tasks=1

12/08/31 17:26:46 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=13171

12/08/31 17:26:46 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0

12/08/31 17:26:46 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0

12/08/31 17:26:46 INFO mapred.JobClient:     Rack-local map tasks=1

12/08/31 17:26:46 INFO mapred.JobClient:     Launched map tasks=1

12/08/31 17:26:46 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=10384

12/08/31 17:26:46 INFO mapred.JobClient:   File Output Format Counters

12/08/31 17:26:46 INFO mapred.JobClient:     Bytes Written=8

12/08/31 17:26:46 INFO mapred.JobClient:   FileSystemCounters

12/08/31 17:26:46 INFO mapred.JobClient:     FILE_BYTES_READ=18

12/08/31 17:26:46 INFO mapred.JobClient:     HDFS_BYTES_READ=124

12/08/31 17:26:46 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=43087

12/08/31 17:26:46 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=8

12/08/31 17:26:46 INFO mapred.JobClient:   File Input Format Counters

12/08/31 17:26:46 INFO mapred.JobClient:     Bytes Read=25

12/08/31 17:26:46 INFO mapred.JobClient:   Map-Reduce Framework

12/08/31 17:26:46 INFO mapred.JobClient:     Map output materialized bytes=18

12/08/31 17:26:46 INFO mapred.JobClient:     Map input records=5

12/08/31 17:26:46 INFO mapred.JobClient:     Reduce shuffle bytes=18

12/08/31 17:26:46 INFO mapred.JobClient:     Spilled Records=2

12/08/31 17:26:46 INFO mapred.JobClient:     Map output bytes=40

12/08/31 17:26:46 INFO mapred.JobClient:     Total committed heap usage (bytes)=176623616

12/08/31 17:26:46 INFO mapred.JobClient:     CPU time spent (ms)=1660

12/08/31 17:26:46 INFO mapred.JobClient:     Combine input records=4

12/08/31 17:26:46 INFO mapred.JobClient:     SPLIT_RAW_BYTES=99

12/08/31 17:26:46 INFO mapred.JobClient:     Reduce input records=1

12/08/31 17:26:46 INFO mapred.JobClient:     Reduce input groups=1

12/08/31 17:26:46 INFO mapred.JobClient:     Combine output records=1

12/08/31 17:26:46 INFO mapred.JobClient:     Physical memory (bytes) snapshot=179654656

12/08/31 17:26:46 INFO mapred.JobClient:     Reduce output records=1

12/08/31 17:26:46 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=692523008

12/08/31 17:26:46 INFO mapred.JobClient:     Map output records=4



결과 확인


[root@master hadoop-1.0.3]# hadoop fs -ls  //output 디렉토리가 생성되어 있음

Found 2 items

-rw-r--r--   1 root supergroup         25 2012-08-31 17:16 /user/root/input

drwxr-xr-x   - root supergroup          0 2012-08-31 17:26 /user/root/output

[root@master result]# hadoop fs -ls output/   //디렉토리 안에 보면 part-r-00000 이 생성되어 잇음 (오류가 있다면 이 파일이 생기지 않음)

Found 3 items

-rw-r--r--   1 root supergroup          0 2012-08-31 17:26 /user/root/output/_SUCCESS

drwxr-xr-x   - root supergroup          0 2012-08-31 17:26 /user/root/output/_logs

-rw-r--r--   1 root supergroup          8 2012-08-31 17:26 /user/root/output/part-r-00000

[root@master result]# hadoop fs -cat output/part-r-00000      //확인해 보면 정확하게 카운팅이 되어 있음

hello   4


Web UI 로 클러스트 상태 확인하기

익스플로러 창에 http:// 자신의 IP주소:50070 엔터!!

HDFS 웹 인터페이스 HDFS 파일 시스테을 볼수 있고 각 노드의 사용 가능한 저장 용량을 확인 또한 전체적인 클러스터의 상태를 모니터링 




50030 으로 검색하면 madpreduce job 을 모니터링 할수 있다.




  특정 잡을 클리하면 자세한 성능 정보를 볼수 있다.




  여기 까지 오셨다면 hadoop 실행환경은 완벽히 만드셨다고 생각되어 집니다 ^^

  앞으로는 실제 데이타가 MapReduce 프로그램에 의해 처리되는 방식과 실제 소스 부분등 공부할 예정입니다. 

  특정 오류가 나셔서 막히시는 분 계시다면 뎃글 달아주시면 아는 한도 내에서 답글 달아 드릴게요 ^^ 


저작자 표시
신고

티스토리 툴바