Hadoop이 정상적이지 않은 방법으로 종료 되었을 때 발생하는 에러
정상적이지 않은 방법으로 hadoop이 꺼지게 되면, name node 가 safe모드로 이동한다.
$ hadoop dfsadmin -safemode leave
Safe mode is OFF 라는 메세지가 나온 후, 다시 구동
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를 깔끔하게 볼 수 있다.
여기는 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비트 지원은 아직 안되나보네...