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개 로 잘 나옴.
'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 |