1장. 하둡 개발 준비

1) 실행모드 결정
- 가상머신 2대 : VMware Workstation 12 Pro 12.1.1 build-3770994
- OS :  CentOS 6.8
- 네트워크 : NAT(192.168.0.0/24 대역)
  노드1 IP : 192.168.10.66/24, hostname : hdstudy01
  노드2 IP : 192.168.10.67/24, hostname : hdstudy02
  게이트웨이 : 192.168.10.2 (VM NAT구성)
- 유저 : hduser


2) 리눅스 서버준비
 - CentOS 6.8 다운 www.centos.org Everything 버전
http://centos.mirror.cdnetworks.com

3) 하둡 다운로드
 - 홈페이지 : http://hadoop.apache.org/
 - Stable1 버전의 tar.gz 파일 다운
https://archive.apache.org/dist/hadoop/common/stable1/hadoop-1.2.1.tar.gz

4) 하둡 실행 계정 생성
# useradd hduser
# passwd hduser

5) 호스트 파일 수정
#vi /etc/hosts

127.0.0.1       hdstudy01 localhost (노드2에서는 hdstudy02)
192.168.10.66    hdstudy01
192.168.10.67    hdstudy02

6) 인코딩 방식 설정
# su  - hduser
$ echo $LANG (또는 #locale)
 ko_KR.UTF-8
로 나오는지 확인 후 아닐경우,
# su -
# vi /etc/sysconfig/i18n
LANGUAGE=ko_KR.UTF-8:ko
LANG=ko_KR.UTF-8
로 변경 저장종료
#source /etc/sysconfig/i18n
로 스크립트 실행

7) 자바 설치
- 오라클 홈페이지 자바다운로드 페이지 접속
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- OS 아키텍처 비트수 확인하여 다운로드
# getconf WORD_BIT
# getconf LONG_BIT
 Java SE Development Kit 8u131
You must accept the Oracle Binary Code License Agreement for Java SE to download this software.
Thank you for accepting the Oracle Binary Code License Agreement for Java SE; you may now download this software.
Product / File DescriptionFile SizeDownload
Linux ARM 32 Hard Float ABI77.87 MB  jdk-8u131-linux-arm32-vfp-hflt.tar.gz
Linux ARM 64 Hard Float ABI74.81 MB  jdk-8u131-linux-arm64-vfp-hflt.tar.gz
Linux x86164.66 MB  jdk-8u131-linux-i586.rpm
Linux x86179.39 MB  jdk-8u131-linux-i586.tar.gz
Linux x64162.11 MB  jdk-8u131-linux-x64.rpm
- FTP 전송프로그램으로 자바설치파일 이동
  /home/hduser 경로로 ftp 전송

- 자바 설치
#cd /home/hduser
#rpm -Uvh jdk-8u131-linux-x64.rpm
#cd /usr/java/latest (설치 확인)
- 환경변수 설정
#vi /etc/profile (환경변수 수정)
(아래 내용 추가)
export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin
export CLASS_PATH="."
# . /etc/profile (환경변수 적용)
# java -version (환경변수 정상적용확인)

8) SSH 설정
# su - hduser
[hduser@hdstudy01]$ cd .ssh
[hduser@hdstudy01 .ssh]$ ssh-keygen -t rsa
[hduser@hdstudy01 .ssh]$ ssh-copy-id -i /home/hduser/.ssh/id_rsa.pub hduser@hdstudy02
[hduser@hdstudy01 .ssh]$ ssh hduser@hdstudy02            
(hdstudy02노드에서도 동일하게 진행)

9) 하둡 설치 및 심볼릭링크 생성 (hdstudy01에서만 진행)
- FTP 전송프로그램으로 하둡압축파일 이동
  /home/hduser 경로로 ftp 전송
- 압축 해제(hduser로 진행)
$ tar xvfz hadoop-1.2.1.tar.gz
$ ln -s hadoop-1.2.1/ hadoop

10) 하둡 환경설정 6개파일 수정
* 환경변수 설정
$ cd /home/hduser
$ vi .bash_profile
(아래 내용 추가/변경)
export HADOOP_HOME=/home/hduser/hadoop
PATH=$PATH:$HOME/bin:$HADOOP_HOME/bin
export PATH
unset USERNAME

$ cd ./hadoop/conf
* 하둡 환경설정
$ vi hadoop-env.sh
 - 자바홈 경로
export JAVA_HOME=/usr/java/latest
 - 하둡홈 경로
export HADOOP_HOME=/home/hduser/hadoop
 - 하둡홈 WARN SUPPRESS 옵션 (하둡 홈 경로 패스설정시 오류 방지)
export HADOOP_HOME_WARN_SUPPRESS="TRUE"
- 추가 설정
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
export HADOOP_CONF_DIR=$HADOOP_HOME/conf

- 네임노드 옵션
export HADOOP_NAMENODE_OPTS="-Dcom.sum.management.jmxremote $HADOOP_NAMENODE_OPTS"
- 네임노드 병렬가비지컬렉션 수행 옵션
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC $HADOOP_NAMENODE_OPTS"
- 네임노드의 최대 힙사이즈 변경 옵션
export HADOOP_NAMENODE_OPTS="-Xmx2048m $HADOOP_NAMENODE_OPTS"
- 보조네임노드 옵션
export HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS"
- 보조네임노드도 힙사이즈 네임노드와 동일하게 설정해야함
export HADOOP_SECONDARYNAMENODE_OPTS="-Xmx2048m $HADOOP_SECONDARYNAMENODE_OPTS"
- 데이터노드 옵션
export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote  $HADOOP_DATANODE_OPTS"

*masters / slaves 파일
$ vi masters
hdstudy01
$ vi slaves
hdstudy02
※ 보조네임노드로 사용할 서버를 한줄에 하나씩 입력

* core-site.xml
$vi core-site.xml
<configuration>
     <property>
          <name>fs.default.name</name>
          <value>hdfs://hdstudy01:9000</value>   (이 값을 통해 네임노드주소를 알고 heartbit나 blockreport를 보냄)
     </property>
     <property>
          <name>hadoop.tmp.dir</name>
          <value>/home/hduser/hadoop-data</value> (하둡에서 발생한 임시데이터를 저장하는 공간, 디렉토리는 생성해 주어야함)
     </property>
     <property>
          <name>dfs.permissions</name>
          <value>false</value>
     </property>
</configuration>

* hdfs-site.xml 설정
$vi hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name> (hdfs에 저장될 데이터 복제본 개수)
        <value>1</value>
    </property>
    <property>
      <name>dfs.data.dir</name>
      <value>~/hadoop/dfs/name/data</value>
      <final>true</final>
   </property>
   <property>
      <name>dfs.name.dir</name>
      <value>~/hadoop/dfs/name</value>
      <final>true</final>
   </property>
    <property>
        <name>dfs.http.address</name> (name노드용 웹서버의 주소값)
        <value>hdstudy01:50070</value>
    </property>
    <property>
        <name>dfs.secondary.http.address</name>(보조name노드용 웹서버의 주소값)
        <value>hdstudy02:50090</value>
    </property>
</configuration>

*mapred-site.xml 설정
$ vi mapred-site.xml
<configuration>
    <property>
        <name>mapred.job.tracker</name> (맵리튜스 작업 요청 주소)
        <value>hdstudy01:9001</value>
    </property>
</configuration>

* 네임노드 하둡디렉토리 → 데이터노드 복사
$ cd ~
[hduser@hdstudy01 ~]$ tar cvfz hadoop.tar.gz hadoop-1.2.1
[hduser@hdstudy01 ~]$ scp hadoop.tar.gz hduser@hdstudy02:/home/hduser
[hduser@hdstudy02 ~]$ tar xvfz hadoop.tar.gz
[hduser@hdstudy02 ~]$ ln -s hadoop-1.2.1/ hadoop

11) 하둡 실행
※방화벽 확인
$ su -
# service iptables stop
# chkconfig iptables off

- 네임노드 초기화
# su - hduser
$ hadoop namenode -format

- 하둡 관련 데몬 시작
$ start-all.sh
(모든 데몬 중지시, $ stop-all.sh)
(별도로 실행/중시시, $ hadoop-daemon.sh start(stop) tasktracker

- 데몬 확인
[hduser@hdstudy01 ~]$ jps
66901 Jps
66628 JobTracker
66461 NameNode

[hduser@hdstudy02 ~]$ jps
54240 TaskTracker
54066 DataNode
54155 SecondaryNameNode
54366 Jps

※ hdstudy01 네임노드 웹브라우저에  hdstudy01:50070/dfshealth.jsp 입력
hdfs용량, 데이터노드 개수, 기본적인 hdfs 상태 정보, 네임노드의 하둡로그, hdfs에 저장된 파일 조회 가능

12) 예제 실행
$ hadoop fs -put ~/hadoop/conf/hadoop-env.sh ~/hadoop/conf/hadoop-env.sh
(여기서 안되면 포트가 닫혀있을 가능성이 있으므로, 방화벽 다시 확인)

$ hadoop jar hadoop-examp*.jar wordcount ~/hadoop/conf/hadoop-env.sh wordcount_output

13) 이클립스 설정
- 이클립스 다운로드
http://www.eclipse.org/downloads/

14) 프로젝트 빌드
- 프로젝트 생성
-jar파일 가져오기


- build.xml 파일 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?xml version="1.0" encoding="utf-8"?>
<project name="Hadoop-Examples" default="build">
     <!-- version info -->
     <property name="major-version" value="1" />
     <property name="minor-version" value="0" />
     <property name="build-number" value="0" />
     <property name="version" value="${major-version}.${minor-version}.${build-number}" />
     <!-- name info -->
     <property name="company-name" value="alzio" />
     <property name="project-name" value="hadoop-examples" />
     <property name="general-lib" value="${company-name}-${project-name}.jar" />
     <property name="general-src" value="${company-name}-${project-name}-src.zip" />
     <!-- source directory info -->
     <property name="build-Path" location="." />
     <property name="src.dir.src" location="${build-Path}/src" />
     <property name="src.dir.bin" location="${build-Path}/bin" />
     <property name="src.dir.build" location="${build-Path}/build" />    
    
     <!-- build info -->
     <target name="build" depends="build-lib, build-src" />
    
     <target name="clean-all" depends="clean-lib, clean-src" />
    
     <target name="clean-lib">
         <delete file="${src.dir.build}/${general-lib}" />
     </target>
     <target name="clean-src">
         <delete file="${src.dir.build}/${general-src}" />
     </target>
     <target name="build-lib" depends="clean-lib">
         <jar destfile="${src.dir.build}/${general-lib}" basedir="${src.dir.bin}">
             <manifest>
                 <attribute name="${project-name}-Version" value="${version}" />
             </manifest>
         </jar>
     </target>
     <target name="build-src" depends="clean-src">
         <zip zipfile="${src.dir.build}/${general-src}" basedir="${src.dir.src}">
         </zip>
     </target>
</project>
cs




- build.xml 파일 빌드

-완료

댓글

가장 많이 본 글