Mahout은 간단히 설명하고 빠른 설치 ㄱㄱ


1. Introduction

Hadoop환경에서 쓸 수 있는 기계학습 library모음을 제공한다. 
  또한, 관련된 Classification, Clustering, Collaborative Filtering에 관련된 기본적이고 대표적인 알고리즘들이 미리 구현되어 있다. 
  Hadoop환경이니까 당연히 Map/Reduce로 구동된다.
  2014년 1월 17일 현재 0.8버전이 최신 버전이다.


2. Installation

1) Download

$ wget http://ftp.daum.net/apache/mahout/0.8/mahout-distribution-0.8.tar.gz
역시 컴파일 따위 없다. 걍 컴파일 되어 있는거 받아서 쓰는거다.

2) Env var

$ vi ~/.bash_profile

export MAHOUT_HOME=알아서
export PATH=$PATH:$MAHOUT_HOME/bin

$ source ~/.bash_profile
$ mahout --help

3) Let's do something

(1) Data download for test

$ wget http://archive.ics.uci.edu/ml/databases/synthetic_control.data

(2) Data store to HDFS

$ hadoop fs -put synthetic_control.data /알아서HDFS/synthetic_control.data

(3) RUN!!

$ mahtout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job --input /알아서HDFS/synthetic_control.data --output /알아서HDFS/output_dir -t1 20 -t2 50 -k 5 -x 20 -ow

3. Reference

대용량 데이터 분석 및 처리를 위한 Hadoop & NoSQL / 길벗출판사
http://blog.daum.net/caisa/109

자세히 쓰자면 잡소리도 많이 들어가고 분량도 길어지니 대충 적어보자

OS : Ubuntu 12.10


1. Base

1) User setting

$ sudo groupadd hadoop
$ sudo useradd -g hadoop hadoop -s /bin/bash -m
$ passwd hadoop

2) SSH

$ ssh-keygen -t dsa -P"" -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
$ ssh localhost

3) JDK

$ sudo apt-get install openjdk-7-jdk


2. Hadoop

Pseudo-Distribute 모드로 일단 셋팅해보자

1) Install

$wget http://ftp.daum.net/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0.tar.gz
$ tar xvzf ~

컴파일 그딴거 없다 압축 풀어서 쓰자

2) Env var

$ vi ~/.bash_profile

export JAVA_HOME= 알아서
export HADOOP_HOME=알아서
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

$ source ~/.bash_profile


3) version test

$ hadoop version


4) Hadoop settings

  2.0부터 디렉토리 구조가 조금 변경되었다. conf디렉토리가 없어지고 etc/hadoop 안에 대부분의 설정 파일들이 들어있다. 하둡 서버를 실행시키는 스크립트들은 sbin/으로 들어갔다.
  설정 시작!

(1) HDFS settings

#etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9001</value>
    </property>
</configuration>


#etc/hadoop/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/알아서 하둡 파일 시스템 내부 namenode 경로</value>
    </property>
    <property>
        <name>dfs.datanode.name.dir</name>
        <value>file:/알아서 하둡 파일 시스템 내부 datanode 경로</value>
    </property>
    <property>
        <name>dfs.namenode.http-address</name>
        <value>0.0.0.0:50071</value>
    </property>
</configuration>


$ mkdir 하둡_파일_시스템_내부_namenode와_datanode_경로
$ hdfs namenode -format
$ sbin/start-dfs.sh
(hadoop-daemon.sh start namenode 같이 하나씩 start도 가능)

$ jps
NameNode
SecondaryNameNode
DataNode
Jps

(2) YARN settings

#etc/hadoop/mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>


#etc/hadoop/yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>

#빨간 부분을 꼭 언더바(_)로 작성해야 하다.


#etc/hadoop/yarn-env.sh
#파일에 맨 처음에 다음 내용 추가

export HADOOP_PREFIX=알아서 하둡 위치
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}

...

$ sbin/start-yarn.sh
(yarn-daemon.sh start {resourcemanager, nodemanager}, mr-jobhistory-daemon.sh start historyserver로 하나씩 start도 가능)


3. Let's do something

$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar pi -Dmapreduce.clientfactory.class.name=org.apache.hadoop.mapred.YarnClientFactory -libjars share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar 16 10000


4. Reference

대용량 데이터 분석 및 처리를 위한 Hadoop & NoSQL / 길벗출판사
http://raseshmori.wordpress.com/2012/09/23/install-hadoop-2-0-1-yarn-nextgen/
http://blog.daum.net/caisa/109

이거 맨날 헷갈린다 -_-;;;

자, 정리정리




실제의 결과와, 컴퓨터가 검색한 결과. 두 가지의 결과에서 총 네가지의 경우가 나올 수 있다.

TP : 컴퓨터의 맞다고 판단한 예측과 실제 결과가 맞아 떨어지는 경우

-> 결과가 나온다고 예측했는데 실제로 나온 경우

FP : 컴퓨터는 틀리다고 판단했지만 실제 결과는 그렇지 않은 경우 (예상하지 못한 결과)

-> 결과가 나오지 않을 것이라 예측했는데 실제로는 나옴

FN : 컴퓨터의 틀리다고 판단한 예측과 실제 결과가 맞아 떨어지는 경우 (결과를 놓침)

-> 결과가 나온다고 예측했는데 실제로는 나오지 않았음

TN : 컴퓨터는 맞다고 판단했지만 실제 결과는 그렇지 않은 경우 (결과가 없음을 맞춤)

-> 결과가 나오지 않을 것이라 예측했고 실제로 결과가 나오지 않았음


이 네가지 경우를 사용해 우리는 Precision과 Recall이 무슨 의미인지 알 수 있다.

Precision은 

Precision = tp / tp + fp

Recall은

Recall = tp / tp + fn

으로 나타낼 수 있다.

즉, Precision은 컴퓨터의 예측 중, 결과가 나올 것이라 예측한 값 중에 실제 결과가 나온 비율이라고 할 수 있고, Recall은 컴퓨터가 맞다고 검색한 결과 중, 실제 정답의 비율이라고 할 수 있다.

또한, Accuracy는


Accuracy = tp + tn / tp + fp + fn + tn

으로 나타낼 수 있는데 이것은 컴퓨터의 검색이 얼마만큼 정확했는지를 나타낸다.

+ Recent posts