[클러스터] Hadoop File System 환경 구축 하기
Hadoop File System 환경 구축 하기
작성일 : 2008년 10월 24일
작성자 : 클루닉스/ 서진우
1. 다운로드
url: http://www.apache.org/dyn/closer.cgi/hadoop/core/
에서 다운로드 가능
2. 시스템 구성 및 구축 시 유의 사항
– 시스템 구성
Hadoop 시스템 구성 시스템은 크게 3가지로 나누어 진다.
NameNode, DataNode, ClientNode
NameNode : 데이터의 메타 정보를 저장하고, 관리한다.
DataNode : 실제적인 데이터를 분산 저장 관리한다.
ClientNode : NameNode를 통해 DataNode에 저장된 데이터에 접근만 가능한 노드
– 구성 시 유의 사항
NameNode, DataNode 역시 Client 가 될 수 있고, Namenode 가 Datanode 역할을 동시에
할 수도 있다.
하지만 성능을 고려하면, Name 노드는 독립적으로 구성하는 것이 좋다. 또한 Data 노드 역시
독립적으로 구성하는 것을 권장한다. data 노드가 client가 되는 경우 네트워크에 상당한
병목이 생김으로 성능 저하의 주요 원인이 될 수 있다.
만일 Name 노드와 DATA 노드를 동일한 서버에 구성할 경우 Name 서비스 관련 정보와 Data 저장
정보는 별도의 파티션에 구성하는 것을 권장한다.
– HDFS 호스트 정보
vi /etc/hosts
————————————————————
192.168.123.151 super01 # hdfs name node
192.168.123.152 super02 # hdfs client node
192.168.123.154 tst01 # hdfs data node
192.168.123.155 tst02 # hdfs data node
192.168.123.156 tst03 # hdfs data node
2. 설치 준비
먼저 JAVA 환경이 기본적으로 구현되어 있어야 한다.
기본적으로 JRE 1.5 이상의 환경이여야 하고, 가능하면, JRE1.6 환경에서 구현하도록 하자 .
sun.com 사이트에서 jre-1.6.x 버전을 받는다.
– Jre 설치
모든 서버에 설치 한다.
rpm -Uvh jre-6u10-linux-amd64.rpm
기본적으로 /usr/java/jre1.6.0_10 위치에 설치가 되어 진다.
– hdfs(namenode,datanode) 기본 디렉토리 구조 생성
mkdir -p /scratch/hdfs/hadoop
mkdir -p /scratch/hdfs/filesystem
mkdir -p /scratch/hdfs/local
mkdir -p /scratch/hdfs/home
;; /scratch 디렉토리는 설치하는 시스템의 디렉토리 구조에 맞게 변경가능하다.
;; 단 hdfs 하위 디렉토리 구조는 일치해야 한다.
3. 설치 및 설정
모든 서버 구성 요소에 hadoop을 설치한다.
설치는 tar.gz 압축 파일을 푸는 것으로 완료된다.
tar xzvf hadoop-0.18.1.tar.gz -C /engrid
ln -sf /engrid/hadoop-0.18.1 /engrid/hadoop
모든 서버에 hadoop 패키지를 설치해도 되고, 별도의 어플리케이션 서버를 두고 NFS 디렉토리
에 설치 하여 공유하여도 된다. NFS의 안정성 보장만 되면, 패키지 관리가 편할 것이다.
이제 설정을 한다. 모든 설정 파일은 /engrid/hadoop/conf 경로에 위치한다.
cd /engrid/hadoop/conf
– 기본 환경 설정 (모든 서버)
vi hadoop-env.sh
—————————————————————-
export HADOOP_HOME=/engrid/hadoop
export JAVA_HOME=/usr/java/jre1.6.0_10
—————————————————————
vi /etc/profile.d/hadoop.sh
—————————————————————
!/bin/sh
export PATH=/engrid/hadoop/bin:$PATH
export HADOOP_HOME=/engrid/hadoop
export JAVA_HOME=/usr/java/jre1.6.0_10
—————————————————————
vi masters
super01
vi slaves
tst01
tst02
tst03
vi hadoop-site.xml
<?xml version=”1.0″?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
<!– Put site-specific property overrides in this file. –>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://super01:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>super01:9001</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/scratch/hdfs/filesystem/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/scratch/hdfs/filesystem/data</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/scratch/hdfs/filesystem/mapreduce/system</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/scratch/hdfs/filesystem/mapreduce/local</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
– ssh key 인증
ensh 통해 처리 함.
– Namenode Format
nodenode 에서 실행한다.
/engrid/hadoop/bin/hadoop namenode -format
————————————————————————
[root@super01 ~]# hadoop namenode -format
08/10/24 11:56:16 INFO dfs.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = super01/192.168.123.151
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.18.1
STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.18 -r 694836; compiled by ‘hadoopqa’ on Fri Sep 12 23:29:35 UTC 2008
************************************************************/
08/10/24 11:56:16 INFO fs.FSNamesystem: fsOwner=root,root,bin,daemon,sys,adm,disk,wheel
08/10/24 11:56:16 INFO fs.FSNamesystem: supergroup=supergroup
08/10/24 11:56:16 INFO fs.FSNamesystem: isPermissionEnabled=true
08/10/24 11:56:16 INFO dfs.Storage: Image file of size 78 saved in 0 seconds.
08/10/24 11:56:16 INFO dfs.Storage: Storage directory /scratch/hdfs/filesystem/name has been successfully formatted.
08/10/24 11:56:16 INFO dfs.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at super01/192.168.123.151
************************************************************/
– hdfs 데몬 시작
name node 에서 실행한다.
[root@super01 ~]# /engrid/hadoop/bin/start-all.sh
starting namenode, logging to /engrid/hadoop/logs/hadoop-root-namenode-super01.out
tst03: starting datanode, logging to /engrid/hadoop/logs/hadoop-root-datanode-tst03.out
tst02: starting datanode, logging to /engrid/hadoop/logs/hadoop-root-datanode-tst02.out
tst01: starting datanode, logging to /engrid/hadoop/logs/hadoop-root-datanode-tst01.out
super01: starting secondarynamenode, logging to /engrid/hadoop/logs/hadoop-root-secondarynamenode-super01.out
starting jobtracker, logging to /engrid/hadoop/logs/hadoop-root-jobtracker-super01.out
tst03: starting tasktracker, logging to /engrid/hadoop/logs/hadoop-root-tasktracker-tst03.out
tst01: starting tasktracker, logging to /engrid/hadoop/logs/hadoop-root-tasktracker-tst01.out
tst02: starting tasktracker, logging to /engrid/hadoop/logs/hadoop-root-tasktracker-tst02.out
이제 모든 서버에 hadoop 데몬이 실행되었다.
– hdfs 기본 테스트
cd /engrid/hadoop
hadoop dfs -put conf input
hadoops dfs -ls
Found 1 items
drwxr-xr-x – root supergroup 0 2008-10-24 12:02 /user/root/input
– monitoring :
iostat -d -x 2 | awk ‘{print $9}’
vi hdfs_mon.sh
—————————————————————–
#!/bin/sh
hdfs_dev=/dev/sda
DATE=`date +%y%m%d-%H%M`
while [ 1 ]
do
/usr/bin/iostat -d -x 1 2 $hdfs_dev | awk ‘{print $8,$9}’ | grep -v wkB | grep -v “^[ ]*$” | tail -n 1 > /tmp/hdfs_mon.tmp
if [ $# -eq 1 ]
then
cat /tmp/hdfs_mon.tmp >> hdfs_mon_${1}.res
else
cat /tmp/hdfs_mon.tmp >> hdfs_mon_${DATE}.res
fi
done
—————————————————————-