본문 바로가기

Mahout

[Mahout] 하둡 M/R을 사용한 머하웃 추천 예제

머하웃 인 액션 6챕터를 보면 하둡을 사용한 추천 예제 프로그램이 나온다.

이 내용이 개인적으로는 좀 혼란스럽게 느껴져서 오해를 했었는데..

오해의 내용은 M/R을 사용하여 머하웃 추천을 돌리려면 머하웃에서 제공되는 어떤 추상클래스를 상속하여

나만의 추천기를 개발해야 한다는 오해였다.


책 내용을보면 그전 챕터까지 설명하던 머하웃의 기본적은 input file format인 (사용자,아이템,선호도)가 아닌

[사용자:아이템1 아이템2 아이템3 ..] 과 같은 형태가 갑자기 나오며

이를 분석하기 위핸 Mapper와 Combiner, Reducer를 직접 개발하는 과정이 나온다.


아무리 생각해도 이렇지는 않을 것 같은데..

기본적으로 많은 알고리즘에 대해서 M/R용 API가 있을 것 같은데.. 싶어서

이래저래 찾아보고 테스트해보니.... 역시 예상대로 너무 간단한.. -.-


책에 있는 예제는 [사용자:아이템1 아이템2 아이템3 ..]  이런 형태의 머하웃의 일반적인 포맷이 아닌 포맷에 대한 처리를 하기위한 Mapper/Reducer 예제를 보여주기 위한 것이었다.


1. 입력파일의 포맷은 CSV 포맷이면 된다.

즉, [사용자ID,아이템ID,선호도] 가 되며, 공백은 없도록 합니다.


2. 위 입력파일을 hadoop hdfs에 올립니다. keyword.txt라고 한다면

hadoop fs -put mahout_input/keyword.txt

정도가 되겠네요.


3. 실행을 합니다.

hadoop jar mahout-core-0.7-job.jar

org.apache.mahout.cf.taste.hadoop.item.RecommenderJob - Dmapred.input.dir=mahout_input/keyword.txt - Dmapred.output.dir=mahout_output --similarityClassname SIMILARITY_TANIMOTO_COEFFICIENT


4. 그외에 많은 조건들이 있습니다. --BooleanData 와 같은 조건도 있으며, --similarityClassname도 알고리즘별로 여러가지가 존재합니다.


5. 결과가 hdfs mahout_ouput 디렉토리에 저장됩니다. 이걸 별도 처리를 해서 (아마 해야겠죠.. 모두 ID값으로 변환되어있는 상태라..) 다시 DB에 넣던 해서 활용합니다.


6. 결과는 아래와 같은 형태로 노출됩니다.

-8886802455247783609    [1680471607041718408:2.7733645]

 

-8886599904625969211    [-8026017956757776395:6.483146,1534328935540736934:5.3061223,51463945656709348

32:4.4494586,6899767517892059194:4.1260405,-6385859657935360421:4.062827,3335883382715616440:3.9160233,3329489296048811200:3.8189416,3046820523972064153:3.7922337,2637933732121785305:3.7804105,81246183072882590:3.3164082]


보시면 아시겠지만 아이디 [추천아이템:점수, ....] 형태입니다.