본문 바로가기
IT/하둡

Hadoop Test (STS + Maven)

by 최고영회 2014. 3. 4.
728x90
반응형
SMALL

Hadoop 을 이용한 테스트 프로그램을 작성해 보자.

Tool : STS (이클립스도 상관 없음)

Builder : Maven (Ant 도 상관 없음)


- 파일의 단어 개수 파악 하기 프로그램

STS > New Maven Project > 프로젝트명 : ExWordCounter

package : com.pnpsecure.hadoop

Class Name : WordCounter.java


package com.pnpsecure.hadoop;

import java.io.IOException;

import java.util.Iterator;

import java.util.StringTokenizer;


import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapred.FileInputFormat;

import org.apache.hadoop.mapred.FileOutputFormat;

import org.apache.hadoop.mapred.JobClient;

import org.apache.hadoop.mapred.JobConf;

import org.apache.hadoop.mapred.MapReduceBase;

import org.apache.hadoop.mapred.Mapper;

import org.apache.hadoop.mapred.OutputCollector;

import org.apache.hadoop.mapred.Reducer;

import org.apache.hadoop.mapred.Reporter;

import org.apache.hadoop.mapred.TextInputFormat;

import org.apache.hadoop.mapred.TextOutputFormat;



public class WordCounter {


public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {

private final static IntWritable one = new IntWritable(1);

private Text word = new Text();


@Override

public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { 

String line = value.toString();

StringTokenizer tokenizer = new StringTokenizer(line);

while (tokenizer.hasMoreTokens()) {

word.set(tokenizer.nextToken());

output.collect(word, one);

}

}

}


public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {

public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {

int sum = 0;

while (values.hasNext()) {

sum += values.next().get();

}

output.collect(key, new IntWritable(sum));

}

}


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

JobConf conf = new JobConf(WordCounter.class);

conf.setJobName("wordcounter");


conf.setOutputKeyClass(Text.class);

conf.setOutputValueClass(IntWritable.class);


conf.setMapperClass(Map.class);

conf.setCombinerClass(Reduce.class);

conf.setReducerClass(Reduce.class);


conf.setInputFormat(TextInputFormat.class);

conf.setOutputFormat(TextOutputFormat.class);


FileInputFormat.setInputPaths(conf, new Path(args[0]));

FileOutputFormat.setOutputPath(conf, new Path(args[1]));


JobClient.runJob(conf);

}

}



jar 파일 생성


jar 파일 NameNode Server 에 upload


실행 방법

vi test01 생성 단어 여러개 작성 후 저장

vi test02 생성 단어 여러개 작성 후 저장

여기서 바로 테스트 진행 하면 

hadoop fs no such file or directory 와 같은 에러를 만나게 된다. 만들어 낸 파일 및 argument 로 넘어갈 디렉토리 경로등이

hdfs 에 없기 때문이다. 

hdfs 에 폴더 생성 및 생성한 test 파일 upload

폴더 생성 : hdfs dfs -mkdir /usr/hadoop/test/input

업로드 : hadoop fs -copyFromLocal /home/hadoop/test01 /usr/hadoop/test/input

업로드 잘 되었는지 확인 : hadoop fs -ls /home/hadoop/test/input/

실행 : hadoop jar ExWordCounter.jar com.pnpsecure.hadoop.WordCounter /usr/hadoop/test/input /usr/hadoop/output

실행 처리 내용이 console 에 보임

output 폴더가 생성되며 폴더 안에는 _SUCCESS와 part-00000 과 같은 파일이 생성됨

cat 을 통해 파일 확인 : hadoop fs -cat /usr/hadoop/output/*

단어 개수 확인 결과는  book 1개 echo 1개 hadoop 4개 pnp 1개 pnpsecure 1개 system 1개 test 2개 test02 1개 yhkim 1개 로 잘 나옴.


728x90
반응형
LIST

'IT > 하둡' 카테고리의 다른 글

HDFS(Hadoop Distributed File System) 아키텍처  (0) 2014.03.05
HDFS(Hadoop Distributed File System) 기초  (0) 2014.03.04
Haddop 설치  (0) 2014.03.04
Hadoop Echosystem  (0) 2014.03.04
Hadoop(하둡)  (0) 2014.03.04