Hadoop이 정상적이지 않은 방법으로 종료 되었을 때 발생하는 에러

정상적이지 않은 방법으로 hadoop이 꺼지게 되면, name node 가 safe모드로 이동한다.


$ hadoop dfsadmin -safemode leave

Safe mode is OFF 라는 메세지가 나온 후, 다시 구동

저번엔 쉽게쉽게 됐었는데 이번엔 apt-get으로 설치하는데 많이 애를 먹었다 = =)
설치 해봅시당!

OS : Ubuntu 13.04 / 3.8.0-33-generic
       CentOS 6.4 / 2.6.32

1. Introduction

  Ganglia는 모니터링 툴로 해당 노드의 CPU, Memory, Network등의 사용량을 그래프로 나타내 준다.
  총 3개로 나눠볼 수 있다.

- gmond : 상태를 직접 모니터링하는 데몬, 각 노드에 설치해서 gmetad가 설치된 곳으로 현재 상태를 전송한다.

- gmetad : gmond에서 보내온 데이터를 모아 볼 수 있게 수집한다.

- gnaglia-webfrontend : gmetad를 설치한 곳에서 gmond를 통해 수집한 데이터를 웹을 통해 볼 수 있게 한다.


2. Base

1) Ubuntu
- apache + php
(아래는 apt-get과 yum으로 ganglia설치 할 때 의존성에 의해 같이 설치되므로 생략 가능)
- rrdtool
- libganglia1

3. Ganglia

1) Install

Ganglia meta daemon을 둘 노드 한곳과 나머지 노드를 구분하여 설치한다.
모니터링만 할 노드에는 ganglia-monitor(ganglia, gmond)만 설치하면 된다

- Ubuntu
$ apt-get install ganglia-monitor, gmetad, ganglia-webfrontend

- CentOS
 rpmforge repository 추가
$ rpm -ivh http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
$ yum install ganglia ganglia-gmetad ganglia-gmond ganglia-web

설치 중 아파치 재시작을 물어온다. 재시작 두번~
자동으로 실행된 서비스들을 내리자. 나는 스크립트가 뭔가 이상한지 start/stop이 안된다. 일단 내리자.

$ service ganglia-monitor(gmond) stop
$ service gmetad stop

2) Configuration

(1) Ganglia Meta Daemon

$ vi /etc/ganglia/gmetad.conf

data_source "Cluster" node1:8649 node2:8649 ....
....

gridname "Hadoop"
...

Ganglia는 rrdtool을 사용해서 각종 metrics를 표현해준다. 따라서 gmetad가 설치된 노드에 rrdtool을 저장할 곳의 권한이 있어야 한다.
기본값은 /var/lib/ganglia/rrdtool 인듯

(2) Ganglia Monitoring Daemon

$ vi /etc/ganglia/gmond.conf

globals {
...

user = input_user_who_use_ganglia"
...

}

cluster {
    name = "Hadoop"
    ownder = "input_user_who_use_ganglia"

}

udp_send_channel {
    host = node1
    port = 8649
    ttl = 1
}

udp_recv_channel {
    port = 8649
}

...

/* 이 아래에는 각 metric에 대해 time threshold를 수정하는 변수값들이 있다. */

- CentOS를 위한 자동 실행 설정
$ chkconfig gmond on
chkconfig gmetad on

(3) Firewall

$ vi /etc/sysconfig/iptables
    -A INPUT -m udp -p udp --dport 8649 -j ACCEPT
    -A INPUT -m udp -p tcp --dport 8649 -j ACCEPT
$ service iptables restart

(4) Hadoop-Ganglia 

hadoop관련 metrics설정 (for hadoop-2.2.0)
$ vi  /where_hadoop_located/etc/hadoop-metrics2.properties

*.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10

namenode.sink.ganglia.servers=name.mdms:8649
datanode.sink.ganglia.servers=name.mdms:8649
jobtracker.sink.ganglia.servers=name.mdms:8649
tasktracker.sink.ganglia.servers=name.mdms:8649
maptask.sink.ganglia.servers=name.mdms:8649
reducetask.sink.ganglia.servers=name.mdms:8649  


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

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

2014. 06. 18. 추가

현재는 meld랑 winmerge를 주로 사용하고 있다.
http://winmerge.org/
http://meldmerge.org/

아래는 각 블로거들의 주관적인 diff tool 성능 비교

http://bigcircle77.wordpress.com/2013/02/14/diff-%ED%88%B4-%EB%B9%84%EA%B5%90/

http://allofsoftware.net/90

그리고 진리의 스택오버플로우

http://stackoverflow.com/questions/572237/whats-the-best-three-way-merge-tool


다시 훑어보니 P4merge를 한번 써봐야겠다는 생각이 드는군....

게다가 에디터와 함께 사용할 수 있는 툴로는 sublime merge, vimdiff, emacs정도가 있는 듯
http://www.sublimerge.com


-------------------------------------------------------------------------------------

Diff 기능을 지원하는 툴을 알아보다가 알게 된 SourceGear Diff Merge.

상용 diff툴은 사용할 수 없기 때문에 찾아보다가 알게 되었다.

실험하신 분 [http://ljh131.tistory.com/143]에 의하면 상용 소프트웨어인 beyond compare와 비슷한 성능을 내주는 듯.


실제로 다운받아서 써보니 꽤 괜찮아보인다.

다운로드 : [http://www.sourcegear.com/diffmerge/downloads.php]


2014. 06. 18. 내용 추가

스핑크스랑 하나 더 있었는데......기억이 안난다.

다른 문서화 툴들이 doxygen보다 이쁜 문서를 만들 수 있다고 한다.

자세한 내용은 나중에 언젠가....생각이 나면 추가해서 포스팅해야겠당

-------------------------------------------------------------------------------------

회사에서 코드 보다가 멘탈이 날아갈 것 같아서 일단 정리해서 보고자 여기저기를 기웃거리다

가 찾았낸 doxygen을 소개한다.

옛날에 뭔가 썼던 기억은 나는데 GUI환경도 아니었고(상관없지만 귀찮다) VS2012에 addin도 안올라가고 해서 그냥 gui로 잘 되어있는 툴을 찾았다.

http://www.stack.nl/~dimitri/doxygen/

여기서 다운받아서 설치 ㄱㄱㄱ

원래는 설치할 때 path도 설정해주고 이것저것 있었던 것 같지만 지금은 GUI front-end로 나왔으므로 걍 설치만 하면 GUI환경으로 작업할 수 있다.



또, 여기서 graphviz를 설치하면 doxygen에서 call graph를 깔끔하게 볼 수 있다.

http://www.graphviz.org/


여기는 doxygen보다 가볍고 깔끔하다고 하는 doxys가 있는 곳!

http://www.doxys.dk/doxys_homepage/index.html


근데 왠지 난 안끌린다....(GUI환경 아니라 귀찮아서 그렇겠지)

직접 써봤더니 C/C++ 말고 다른 언어도 지원하고 꽤 잘 된다.


뭐 하나 해서 스샷찍어보려했더니 뭐 없네...

지금 보는건 회사문서라 안되고 -_-;;;

#pragma once

처음 솔루션을 만들면 stdafx.h 헤더파일 앞에 붙어있다.

이 명령이 없다면 컴파일을 할 때 여러군데에서 이 헤더파일을 include하고 있을 때, 매번 define 되어 중복 정의 되었다는 오류가 발생하게 된다. 이 경우 중복 정의 되지 않고 한번만 컴파일을 한번만 하게 해주는 명령이다.

중복 정의되는 것을 막기 때문에 컴파일 시간도 줄어들게 된다. 따라서 대부분의 헤더파일에 #pragma once명령을 삽입하는 것을 권장한다.

또한, #pragme는 컴파일러에 직접 명령을 전달하기 위해 사용한다고 한다.


회사에 들어와서 처음부터 다시 C++공부하느라 정신이 한개도 없다...

뭐 이런 기본적인 내용도 몰랐나 싶고 뭐 그렇다 ㅠㅠㅠㅠㅠ

같은 솔루션 내의 다른 프로젝트의 헤더파일이나 소스파일을 include하고 싶을 경우에는

프로젝트의 속성 -> C/C++ -> General 에서 Additional Include Directories의 항목에 적절한 패스를 추가해주면 된다.



갑자기 스크립트 언어가 하고 싶어져서 시작해보는 루아

윈도우에서 설치할꺼다

http://code.google.com/p/luaforwindows/ 요기서 Lua for windows 받아서 설치~

http://www.lua.org/ 리눅스 버전은 요기서 다운로드~

 

루아를 받아서 설치하고 나면 한줄씩 실행 해볼 수 있는 요런 커맨드라인과

(hello world를 띄워 보았다.)

SCiTE 라는 편집기가 설치가 된다.

 

 

하지만!! 나는 이클립스를 사랑하는 게으른 개발자.
플러그인이 있으면 따뜻하겠지....

2012년 9월 24일 현재
Lua - http://luaeclipse.luaforge.net/update-site/site.xml 사이트로 제공이 되고 있다.

이클립스에서 Window -> Install new software 로 가서 사이트를 추가하자!
그러면 아래 화면이 나온다

덮어놓고 LuaEclipse 1.2구나 해서 전체 선택한다음 설치하면 오류나니까 주의!
안에 보면 Lua Development Tool 이 두개가 있는것이 보인다.

위에 있는게 32비트용, 아래가 64비트용이다. 둘 중 맞는걸로 설치해주자.

라고 하고 설치하려고 했는데 설치가 안된다 -_-......뭐지 집에서 32비트용으로 설치할 땐 됐는데....
뭔가 문제가 있나보다 - -)

여튼 설치하고 나서 new project 해보면 루아가 있는 걸 확인할 수 있을게다

에잉 = =) 64비트 지원은 아직 안되나보네...

+ Recent posts