HBase 는 가-분산 방식 까지 설치되어 있다고 가정하고 Hadoop 은 완전-분산 방식까지 설치되어 있다고 가정합니다. (지난 포스트들을 찾아보세요)

4대의 서버에 걸쳐서 HBase 클러스터링 설정을 하는 것으로 하겠습니다. 

nobody1 - HMaster
nobody2 - RegionServer
nobody3 - RegionServer
nobody4 - RegionServer

 




이제 설정파일들을 검토하겠습니다.  

    conf/hbase-env.sh
   

  # export JAVA_HOME=/usr/java/jdk1.6.0/
  export JAVA_HOME=/usr/lib/jvm/java-6-openjdk


를 추가해주고 (아마 되어 있을 것입니다)

 

  # export HBASE_CLASSPATH=
  export HADOOP_HOME=/home/hadoop/work/hadoop-1.0.1
  export HBASE_CLASSPATH=${HBASE_CLASSPATH}:$HADOOP_HOME/conf


를 추가해줍니다. 
 

  # Tell HBase whether it should manage it's own instance of Zookeeper or not.
  export HBASE_MANAGES_ZK=true


이제 주키퍼를 사용한다고 설정해야 하는 부분입니다. 

conf/hbase-site.xml

 1    <configuration>
 2    <property>
 3        <name>hbase.rootdir</name>
 4        <value>hdfs://nobody1:9000/hbase</value>
 5    </property>
 6
 7    <property>
 8        <name>hbase.cluster.distributed</name>
 9        <value>true</value>
10    </property>
11
12    <property>
13        <name>dfs.replication</name>
14        <value>3</value>
15    </property>
16
17    <property>
18        <name>hbase.zookeeper.quorum</name>
19        <value>nobody1,nobody2</value>
20    </property>
21
22    <property>
23      <name>hbase.zookeeper.property.dataDir</name>
24      <value>/home/hadoop/work/hbase-0.92.1/zookeeper</value>
25      <description>Property from ZooKeeper's config zoo.cfg.
26        The directory where the snapshot is stored.
27      </description>
28    </property>
29   </configuration>
   
hbase.rootdir 은 하둡의 네임노드뒤에 /hbase 를 적어줬습니다. 
hbase.cluster.distributed 는 클러스터링을 할 것인지에 관한 것입니다. true 로 적어줬습니다. 
dfs.replication 은 복제셋을 얼마나 가져갈 것인지에 관한 설정인데 3 으로 정해줬습니다. 

zookeeper
관련 설정은 꼭 해줘야 하는 부분입니다. 
hbase.zookeeper.quorum 은 클라이언트가 접속해야 하는 주키퍼를 설정해줄 수가 있습니다. nobody1 과 nobody2 에 주키퍼가 떠 있어서 클라이언트의 접속을 받을 것이라는 설정입니다. 

   conf/regionservers

   

   nobody1
   nobody2
   nobody3
   nobody4


   
이것은 실제적으로 데이타가 저장이 되는 리젼 서버(Region Server)들이 저장되는 곳입니다. 여기에 쓰여져 있는대로 리젼서버들이 구동됩니다. 

이제 설정이 끝나고 설정을 복사해 줄 차례입니다. 

   

   $ cd ~/work/hbase-0.92.1
   $ rsync -av . hadoop@nobody2:/home/hadoop/work/hbase-0.92.1/
   $ rsync -av . hadoop@nobody3:/home/hadoop/work/hbase-0.92.1/
   $ rsync -av . hadoop@nobody4:/home/hadoop/work/hbase-0.92.1/


   이제 다 설정 되었으니 하둡을 먼저 구동시키고 HBase 를 구동시킵니다. 
   

   $ cd ~/work/hbase-0.92.1
   $ bin/start-hbase.sh 




EDIT: 실제로 HDFS 가 저장되는 디렉토리를 지정해줘야 합니다. 지정 안해주면 기본적으로 /tmp 밑에 파일이 생기는 데 리부팅(rebooting) 하게 되면 파일이 사라져서 두번째 부터는 네임노드 (namenode)가 구동하지를 않습니다.


저번 포스트 (누름) 에서 Stand Alone 방식에 대해서 알아봤습니다. 이번에는 가 분산 방식입니다. 

'가 분산' 방식은 한대의 컴퓨터에서 하둡 파일시스템 (hdfs) ,잡 트랙커 (Job Tracker),와  네임노드 (NameNode), 데이타노드 (DataNode) , 태스크트래커 (TaskTracker) 를 띄우는 방식입니다. 마치 분산을 풀로 하는 것처럼 보이지만 실은 한대에서만 돌리는 것이지요. 그래서 '가 분산' (Pseudo Distribuiton) 방식이라고 합니다. 

저번 StandAlone 방식까지 따라 했다는 전제하에 이어서 하겠습니다. 처음부터 여기를 접하셨다면 저번 포스트 부터 따라하시고 오면 됩니다. 

각각의 파일을 열어서 다음과 같이 설정 작업을 해줍니다. 

conf/core-site.xml:

<configuration>
     <property>
         <name>fs.default.name</name>
         <value>hdfs://localhost:9000</value>
     </property>
</configuration>

conf/hdfs-site.xml:

<configuration>
     <property>
         <name>dfs.replication</name>
         <value>1</value>
     </property>
    <property>      <name>dfs.name.dir</name>      <value>/home/crazia/work/hadoop-1.0.0/name</value>    </property>

   <property>      <name>dfs.data.dir</name>      <value>/home/crazia/work/hadoop-1.0.0/data</value>    </property>
 </configuration>


EDIT: 붉은색으로 칠해진 부분은 이번에 추가 된 부분으로 자신의 하둡이 설치되어 있는 디렉토리를 표기해준다.


conf/mapred-site.xml:

<configuration>
     <property>
         <name>mapred.job.tracker</name>
         <value>localhost:9001</value>
     </property>
</configuration>

이는 각각 네임노드 (NameNode) , 레플리케이션 횟수, 잡트래커를 설정해주는 것입니다. 이와 같이 설정작업을 해 주었다면 이제는 ssh 설정 작업을 해주어야 하는 시간입니다. 

$ ssh localhost


만약 위와 같이 입력했는데 접속하지 않는 다면 , 위에서 했던 'sudo apt-get install ssh' 를 다시 한번 해봐서 이미 패키지가 설치되어 있다면 
문제 없이 될 것이고, 만약 그렇게 했는데도 안된다면 다음과 같은 명령을 실행합니다. (그런데 보통 이것은 필요 없을 수도 있습니다.)

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys


EDIT: 2012-02-29
위 과정은 ssh 를 패스워드 없이 접속하기 위해서 해주는 작업으로 필수 과정입니다. 단 위 버젼은 Virtual-Box 에서만 가능하고 독립머신에 설치된 리눅스 버젼에서 작업이 가능할려면 아래 내용을 추가해 줍니다.

$ chmod 644 ~/.ssh/authorized_keys




다시 한번 다음 명령을 실행합니다.

$ ssh localhost


접속이 성공했으면 다음 명령을 써서 다시 원래대로 돌아간다. 

$ exit 


 $HADOOP_HOME 으로 이동해서 distributed-filesystem 을 포맷해줍니다.

$ bin/hadoop namenode -format 



그리고 이제 모든 프로세스들을 띄워야 하는 순간이 왔습니다. 

$ bin/start-all.sh


위와 같은 명령을 실행시켜주고 실제로 네임노드 (NameNode) 와 잡-트랙커(Job-tracker) 가 잘 띄워져 있는지 확인합니다. 하둡에서는 웹페이지로 확인할 수 있게 제공하고 있습니다.

 - 네임노드 : 분산 파일 시스템에 위치한 파일들에 대한 위치정보를 포함하는 정보. 일반적으로 파일시스템                    에서 표현되는 파일명과 디렉토리 위치에 해당한다고 보면 이해가 빠를 것이다. 

 - 잡-트랙커 : 분산 환경에서 작업을 분산시키는 스케쥴 작업을 하는 부분. 

  • NameNode - http://localhost:50070/
  • JobTracker - http://localhost:50030/

  • 위와 같이 제공됩니다. 페이지들이 정상적으로 뜬다면 하둡-분산 파일 시스템이 잘 동작하고 있다는 증거다. 그러면 실제로 잘 동작하는지 간단한 계산을 시켜보기로 하겠습니다.  스탠드얼론 방식에서 했던 테스트를 파일 시스템을 가지고 하는 것입니다. 
     

    $ bin/hadoop fs -put conf input


    위 명령은 하둡-파일 시스템 안으로 conf 에 있는 내용들을 input 이라는 이름으로 집어넣으라는 명령입니다. 자 이제는 실제로 실행을 시켜보져

    $ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'


    시간이 생각보다는 좀 걸립니다. 그리고 결과를 보고 싶으면 

    $ bin/hadoop fs -get output output 
    $ cat output/*


    하둡-파일 시스템 안에 있는 실행결과를 밖으로 꺼내 오는 것입니다. 하둡-파일시스템 안으로 넣을때는 -put , 꺼낼때는 -get 을 쓰는 것에 유의 하시면 됩니다. 
    또 하둡 파일 시스템 안에 있는 결과를 직접 볼 수도 있습니다. 

    $ bin/hadoop fs -cat output/*


    유닉스 명령과 비슷한 명령 (여기서는 -cat ) 을 지원한다. 

    $ bin/stop-all.sh


    위와 같은 명령으로 하둡 파일 시스템을 내릴 수 있습니다. 마치 웹서버 구동과 정지와 비슷합니다. (start-all , stop-all)

     
     
    아파치 와 톰캣7.0(Tomcat 7.0) 을 연동시키는 방법에 관한 글입니다. 많은 분들이 당연히 연동 시켜야 한다고 
    생각할지 모르지만 톰캣 자체에 웹서버가 포함되어 있기 때문에 꼭 해줄 필요는 없습니다. 

    그렇다면 왜 해주는 것인가? 하는 의문이 들 수 있습니다. 톰켓 자체는 서블릿과 JSP 해석에 일을 집중시키고 아파치 자체는 html 과 그외 나머지 리소스를 처리하게 해주는 식으로 분산 시켜주는 효과가 있습니다. 고작 저 따위 이유로  많은 분들이 설정하느라고 고생한다고 합니다. 

    그래서 손쉽게 따라하기로 연동시켜보기로 합니다. 

    1. 아파치 설치하기 

    $ sudo apt-get install apache2


    2. 톰캣 설치하기 

    $ sudo apt-get install tomcat7 tomcat7-docs tomcat7-admin tomcat7-examples


      설치해두면 언젠가는 쓸모가 있으니 한꺼번에 설치해줍니다. 

    3. 제대로 설치됐는지 확인해보기 

       http://localhost  와 http://localhost:8080 

      으로 페이지가 제대로 뜨는지 확인해 줍니다. 만약 페이지가 제대로 뜬다면 apache2 와 tomcat7 은 제대로 설치된 것입니다. 

    4. 톰캣 과 아파치를 연결시켜주는 커넥터(Connector) 설치하기

    $ sudo apt-get install libapache2-mod-jk


    5. 커넥터 설정 

    $ sudo emacs /etc/libapache2-mod-jk/workers.properties


       로 열어서 안의 내용을 보면 

    workers.tomcat_home=/usr/share/tomcat6


       이것을 실제로 톰캣이 깔려 있는 곳으로 바꾸어 줍니다. tomcat7 에는 

      workers.tomcat_home=/var/lib/tomcat7


      로 바꼈습니다. 그리고 worker.list=ajp13_worker 이 항목을 기억하셔야 합니다. 

    6. 톰캣 에서 커넥터와 연결시키기 

    $ sudo emacs /var/lib/tomcat7/conf/server.xml 


       에서 


           <!-- Define an AJP 1.3 Connector on port 8009 -->
           <!--
           <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
           -->


       로 되어 있는 부분에서 주석을 제거해서 

     

         <!-- Define an AJP 1.3 Connector on port 8009 -->
           <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


       로 변경합니다. 이것은 포트 8009 로 날라오는 프로토콜(protocol)이 AJP/1.3 인 것은 8443 포트로 넘기라는 것입니다.  8443은 톰캣 서버가 처리를 하는 포트라고 보시면 됩니다. 
     

    7. 아파치 에서 톰캣 연결시키기 

    $ sudo emacs /etc/apache2/sites-available/default 


       이 부분에 대한 언급이 없어서 제일 어려웠던 부분입니다. 위의 파일을 열어서 


     

           DocumentRoot /var/www
      <Directory />
        Options FollowSymLinks
    AllowOverride None
      </Directory>
      <Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
     </Directory>


      인 부분을 찾아서 


    DocumentRoot /var/lib/tomcat7/webapps/ROOT
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    <Directory /var/lib/tomcat7/webapps/ROOT/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    </Directory>

        JKMount /*.jsp ajp13_worker


     로 바꾸어 줍니다. 즉 /var/www 을 /var/lib/tomcat7/webapps/ROOT 로 바꾸어 주는 것입니다. 그리고 아래쪽에 

     JKMount /*.jsp ajp13_worker 

    를 추가해줍니다. 부연 설명을 하자면 아파치(apache)가 바라보고 있는 DocumentRoot 와 톰캣이 바라보고 있는 webapps/ROOT 를 같은 곳을 바라보게 해주는 것입니다. 그리고 맨 아래에 추가해 준것은 jsp 로 끝나는 파일은 ajp13_worker 를 통하라는 뜻인데  ajp13_worker 를 통해서 톰캣으로 전송하는 것입니다. 

    8. 테스트페이지를 만들어 봅니다. 

    $ sudo emacs /var/lib/tomcat7/webapps/ROOT/hello.jsp 


       내용은 

     

    <HTML>
      <BODY>
      Hello!  The time is now <%= new java.util.Date() %>
      </BODY>
      </HTML>


      로 채우고 저장합니다. 

    9. 톰캣과 아파치 재시작 (Restart)

    $ sudo /etc/init.d/tomcat7 restart
      $ sudo /etc/init.d/apache2 restart



    10. 브라우저에서 
     
        http://localhost  와 http://localhost/hello.jsp 로 테스트 해봅니다. 




     

    무엇인가를 해 볼려면 역시 설치부터!! 정말 하둡 초 간단 따라하기 식 설치에 대해서 알아봅니다. 

    시작전에 환경세팅이 필요합니다. 어떤 OS 기반위에 설치할 것인가를 정해야 하는데 저는 그냥 리눅스로 정했습니다. 환경세팅자체도 쉽고 하둡도 리눅스를 추천하고 있기 때문입니다. 그래서 가장 최근에 릴리즈된

    우분투 11.10 (Ubuntu 11.10) - 다운로드 페이지

    로 정했습니다.

    하둡 설치 형태는 3가지로 나뉩니다.

    1. StandAlone
     - 하둡 파일 시스템을 띄우지 않은 상태에서 동작하는 것만 테스트 해 볼 수 있는 상태이다. 
     

    2. Pseudo Distribution
     - 하둡 파일 시스템을 구동시키고 한 컴퓨터에서 모든 데몬들을 띄워서 동작하는 것을 테스트 해볼 수 있는    상태 

    3. Cluster
     - 
    실제로 파일 시스템을 만들고 각 클러스터가 독립적인 기계로 동작하는 방식 

     
    이중 StandAlone 과 Pseudo Distribution 을 싱글노드 (Single - Node ) 방식이라고 합니다. 즉 한대의 컴퓨터에서 설치해서 동작시킬 수 있기 때문입니다.  이중 정말 간단한 StandAlone 방식으로 설치해 보겠습니다.

    Linux 에서 '터미널' 프로그램을 실행한 후에 

    $ sudo apt-get install ssh 
    $ sudo apt-get install rsync


    위와 같이 입력해서 SSH 서버와 Rsync 를 설치해줍니다. Rsync 는 일반적으로 설치가 되어 있습니다. 기본 준비가 되어 있으면 다음은 하둡을 설치해줄 시간입니다. 

    http://ftp.daum.net/apache//hadoop/common/stable/

    위 주소를 클릭해서 다운을 받습니다. 최신버젼을 안 쓰고 안정화 버젼을 쓰는 것은 어찌보면 당연합니다. 어디서 문제가 생길지 모르는 버젼보다는 이미 많이 밝혀져서 안정화 버젼을 쓰는 것이 정신 건강상 좋기 때문입니다.

    하둡을 실제로 실행하기 전에 환경 변수를 챙겨줘야 합니다. $HOME 에 있는 .profile 파일을 열어서 다음과 같은 내용을 추가해줍니다.

    export JAVA_HOME="/usr/lib/jvm/default-java"
    export HADOOP_HOME="/home/crazia/work/hadoop-0.20.203.0"


    HADOOP_HOME 에서  'crazia' 는 본인의 아이디로 대체 합니다. 
    그리고 다시 '터미널' 창에서 다음과 같이 입력해서 변경점을 적용해줍니다. 

    $ source ~/.profile 


    그리고 $HADOOP_HOME/conf/hadoop-env.sh 파일을 열어서 

    # export JAVA_HOME=/usr/lib/j2sdk1.5-sun


    위와 같은 부분을 찾아서 그 밑에 

    export JAVA_HOME=/usr/lib/jvm/default-java


    라고 추가해 줍니다. 이제 여기까지 따라 했으면 준비가 끝났습니다. 간단하게 테스트 해보기로 하겠습니다.

    터미널 프로그램에서 $HADOOP_HOME 으로 이동해서 
     

    $ mkdir input 
    $ cp conf/*.xml input 
    $ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 
    $ cat output/*


    위와 같이 입력해. 그리고 결과를 확인해 봅니다. 만약 결과가 나온다면 설치는 성공한 것입니다.

    사실 여기까지는 정말 별거 아닙니다. 다음 설치를 위한 준비과정이라고 생각하시면 됩니다. 그냥 부담 없이 처음부터 끝까지 쭈욱 따라가기만 하면 설치됩니다. 그리고 다시 한번 개발을 위해서라면 리눅스(Linux) 특히 그중에 우분투( Ubuntu )를 강력 추천합니다.


      
     
      
     


    + Recent posts