# ysoftman
# 분산 소프트웨어 플랫폼으로 대량의 데이터를 처리할때 사용
# 비슷한 플랫폼으로 구글의 GFS(분산 파일 시스템), MapReduce(분산 데이터 처리), BigTable(분산 데이터베이스)
# Hadoop 의 기본 아이디어인 MapReduce 개념을 Google 에서 논문으로 처음 소개
# Apache 검색엔진(Lucene & Nutch) 개발자에 의해 Hadoop 개발 시작
# Yahoo 에서 Hadoop 사용, Google 내 검색 처리를 위해서 MapReduce 기법 적용
# 2,000개의 노드들을 클러스터로 구성해 시연, 앞으로 10,000개의 노드들을 클러스터로 운영하는 것을 목표
# 안정적으로 PetaByte 단위의 자료를 저장하고 처리
# 일반 컴퓨터 클러스터 간의 데이터를 분산하고 처리
# 데이터를 분산시켜 데이터가 위치한 노드들을 병렬로 처리
# 자동으로 데이터 복사본을 유지하여 문제 발생시 재배치 수행
# Hadoop 의 구성 요소
# Hadoop Common : Hadoop 을 사용하는 모든 요서에서 공통으로 필요로 하는 요소
# HDFS(Hadoop Distributed File System) : 대량의 데이터를 분산저장하는 파일 시스템
# MapReduce : 대량의 데이터를 분산 처리할 수 있는 프레임워크
# 연관된 프로젝트
# Avro, Chukwa, HBase, Mahout, Pig, ZooKeeper
[Hadoop 설치]
32bit 일때(hadoop-0.19_32bit.tar.gz , jdk-6u10-linux-i586.bin , fuse-2.7.4.tar.gz) 파일을 기준
64bit 일때(hadoop-0.19_64bit.tar.gz , jdk-6u10-linux-x64.bin , fuse-2.7.3.tar.gz) 파일을 기준
1. root 상태에서 hadoop 계정을 만든다.(useradd hadoop, 홈디렉토리는 /home1/hadoop 이 된다.)
2. hadoop-0.19_32bit.tar.gz 압축을 /home1/hadoop 에 푼다.
3. jdk-6u10-linux-i586.bin 실행한다.(실행 안될 경우 chmod +x jdk-6u10-linux-x64.bin)
4. mv jdk1.6.0_10/ /usr/java/ (jdk 를 /usr/java/ 밑으로 옮긴다)
5. hadoop 계정의 .bashrc를 다음과 같이 만든다.
# .bashrc
# User specific aliases and functions
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
export JAVA_HOME=/usr/java/jdk1.6.0_10
export PATH=$JAVA_HOME/bin:$PATH
[hdfs 공간 만들기]
# 예) ysoftman 이라는 서버에 hdfs 공간 만들기
# hadoop 으로 로그인
cd ~/hadoop-0.19
# JAVA_HOME 환경변수가 설정되어 있으면 굳이 하지 않아도 된다.
vi conf/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.6.0_10
# 최신버전에는 core-site.xml, hdfs-site.xml, mapred-site.xml 로 분할되었다.
vi conf/hadoop-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://ysoftman.com:9000</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home1/hadoop/filesystem/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/data1,/data2</value>
</property>
<property>
<name>dfs.http.address</name>
<value>ysoftman.com:50070</value>
<description>
The address and the base port where the dfs namenode web ui will listen on.
If the port is 0 then the server will start on a free port.
</description>
</property>
<property>
<name>mapred.job.tracker</name>
<value>ysoftman.com:9001</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/home1/hadoop/filesystem/mapreduce/system</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home1/hadoop/filesystem/mapreduce/local</value>
</property>
</configuration>
# HDFS 마스터 서버 명시
conf/master
# HDFS 슬레이브 서버 명시
conf/slaves
# masters 서버와 slaves서버 모두 데이터로 사용될 디렉토리의 권한을 hadoop으로 설정한다.
chown -R hadoop:hadoop /data1
chown -R hadoop:hadoop /data2
# hadoop file system 공간 포맷하기
bin/hadoop namenode -format
# jps 를 실행하여 NameNode SecondaryNameNode DataNode JobTracker TaskTracker 등이 나타나면 정상작동하는 것이다.
jps
# 마스터와 슬레이브 서버들간에 ssh 자동로그인 하도록 설정한다(ysoftman 포스트 참고)
# hdfs 중지하기
bin/stop-all.sh
# hdfs 가동하기(start-dfs.sh 와 start-mapred.sh 가 모두 실행된다.)
bin/start-all.sh
# ysoftman.com 이 10.10.10.1 이라면 다음의 주소로 hadoop cluster 정보를 확인 할 수 있다.
http://10.10.10.1:50070/
# ysoftman.com 이 10.10.10.1 이라면 다음의 주소로 hadoop map/reduce 작업 현황을 확인 할 수 있다.
http://10.10.10.1:50030/
#####
[hdfs 마운트]
# hdfs 공간을 만들었으면 그 hdfs 공간을 현재 시스템에서 마운트하여 사용한다.
# 예) server1 의 /home1/hdfs 에 만들기
# root 로 로그인해서
tar xvf fuse-2.7.4.tar.gz
configure
make && make install
# fuse 장치 권한 변경
chmod 777 /dev/fuse
# /etc/fuse.conf 파일생성해서 내용추가
vi /etc/fuse.conf
user_allow_other
# fuse
/sbin/modprobe fuse
# hdfs 를 마운트해서 사용할 디렉토디를 생성
mkdir /home1/hdfs
chown -R hadoop:nobody /home1/hdfs
# hadoop 권한에서 fuse 마운트 실행
su hadoop
cd /home1/hadoop/hadoop-0.19/src/contrib/fuse-dfs/src/
./fuse_dfs_wrapper.sh dfs://server1.ysoftman.com:9000 /home1/hdfs
# 만약 libjvm.so 파일이 없다고 나오면 아래의 경로를 /etc/ld.so.conf 에 추가하고 /sbin/ldconfig 실행
/usr/java/jdk1.6.0_10/jre/lib/i386/server/ (32bit OS)
/usr/java/jdk1.6.0_10/jre/lib/amd64/server/ (64bit OS)
[hdfs 마운트 후 작업폴더 설정]
# 예) /home1/hdfs 에 마운트 후 ocr 계정 디렉토리만들고 소유권 넘기기
# hadoop 로그인 상태에서마운트 된곳(/home1/hdfs)에서 작업폴더 만들기
mkdir ocr
# 이렇게 되면 소유자는 hadoop.hadoop 상태가 된다.
# 여기서 소유자 ocr 로 바꾸려면 아래와 같이 한다.(현재 hdfs 마운트되어 /home1/hdfs 가 루트디렉토리가 된다.)
~/hadoop-0.19/bin/hadoop fs -chown -R ocr:ocr /ocr
#####
[Map Reduce 테스트]
# MapReduce 예제 : 두개의 파일로 부터 word count
# 입력 파일 작성
cat > ysoftman1.txt
apple banana milk lemon
cat > ysoftman2.txt
lemon cheese apple coffee
# HDFS 로 복사하기(dfs : hdfs 사용, -put : 복사명령)
./bin/hadoop dfs -put ysoftman1.txt input/ysoftman1.txt
./bin/hadoop dfs -put ysoftman2.txt input/ysoftman2.txt
# hadoop 에 포함된 예제 프로그램 word count 실행
./bin/hadoop jar hadoop-0.20.0-dev-examples.jar wordcount input output
# word count 결과 확인(dfs 대신 fs (일반 file system 사용)을 사용해도 됨)
./bin/hadoop dfs -cat output/part-00000
apple 2
banana 1
cheese 1
coffee 1
lemon 2
milk 1
# mapreduce 작업 모든 상태보기
bin/hadoop job -list all
# mapreduce 로 작업중인 작업 강제 종료하기
bin/hadoop job -kill 작업ID