하둡을 막상 사용하려면 좀 갑갑하다. 설치 빼고는 제대로 된 문서가 별로 없다. 그래서 간단하게 내가 만든 예제를 보여드리고자 한다.

 

두서 없이 쓰긴 하는데.. 읽다보면 알 수 있을 것이다.

 


// 하둡 내부에서 output 삭제
bin/hadoop  fs -rmr output

// 하둡 내부에 jsp grep한 결과를 output 이라는 hdfs에 저장
bin/hadoop jar hadoop-*-examples.jar grep input output 'jsp'

// hdfs에 저장된 output을 로컬로 복사
bin/hadoop fs -get output1 output

 

한번 만들어진 hdfs의 output 디렉토리는 다시 쓸 수 없다. 지워야 한다..

 

 

[handev001:/share/hadoop-0.18.3] bin/hadoop
[handev001:/share/hadoop-0.18.3] bin/hadoop dfs -mkdir source
[handev001:/share/hadoop-0.18.3] cat > source.txt
input

[handev001:/share/hadoop-0.18.3] bin/hadoop dfs -put source.txt source/

 

[handev001:/share/hadoop-0.18.3] bin/hadoop jar contrib/streaming/hadoop-0.18.3-streaming.jar -input source -output "./log_result" -mapper mapper.pl -file mapper.pl -reducer reducer.pl -file reducer.pl

 

이 때 -input 프로퍼티의 값은 source는 디렉토리를 의미한다. 즉, hdfs의 root 상대경로 인 source 디렉토리릉 의미한다. 아래를 볼 것 ..

그리고, 마찬가지로 -output이다. 하지만, 펄 스크립트는 내  local 파일에 있다.

 

/share/hadoop-0.18.3] bin/hadoop fs -ls
Found 11 items
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 14:45 /user/hadoop/input
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 17:37 /user/hadoop/log_result
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 17:39 /user/hadoop/output
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 17:41 /user/hadoop/output1
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 17:46 /user/hadoop/output2
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 18:53 /user/hadoop/output3
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 18:54 /user/hadoop/output4
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 18:58 /user/hadoop/output5
drwxr-xr-x   - hadoop supergroup          0 2009-03-04 10:11 /user/hadoop/output6
drwxr-xr-x   - hadoop supergroup          0 2009-03-04 10:26 /user/hadoop/output7
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 17:43 /user/hadoop/source


 

mapper.pl

 #!/usr/bin/perl


my $line;


while(<STDIN>)  {
$line = $_;
chomp ($line);
print $line;
break;
}

#$r = `grep -r $line /user/hadoop/input`;
print "grep -r $line /user/hadoop/input ";
print $r."\n";

 

 

reducer.pl

 #!/usr/bin/perl
while (<>) {
 print;
}

 

아래를 참조하면 좋다.

 

참고하기

http://www.cs.brandeis.edu/~cs147a/lab/hadoop-troubleshooting/

http://www.cs.brandeis.edu/~cs147a/lab/hadoop-example/

 

 

계속 쓰려고 헀지만, hadoop을 중간에 안쓴 이유가 있었다.

우선 가지고 있는 파일들이 대용량이 아니라는 점, 그리고 hadoop을 써도 아주 성능상 효과를 가지지 못한 점이었다. 그것은 로컬만 썼으니까 그랬던 것 같다.

대용량 파일, 검색이 필요할 때는, 다양하게 거기에 맞는 솔류션을 쓰는 것이 많긴 한데, 아직은 나에게는 그런 일이 적어서..^^;; 하루만에 hadoop 써본 것을 정리한다.

 

또한 Hadoop의 전문가가 쓴 아래의 글도 많은 도움을 받았다.

 

http://www.jaso.co.kr/159

 

 

Posted by '김용환'
,