매번 버젼이 바뀔때 마다 쓰는 것이 지겨워서 한동안 안쓰고 있었는데 예전에 설치하던 시절하고 너무 많이 바껴서 정리를 할 필요가 있겠더군요.

http://rocksea.tistory.com/282

위의 링크는 제자가 열심히 정리한 버젼입니다. 이번 포스트는 저 포스트에서 부족한 부분을 채우는 식으로 정리할려고 합니다.

1 준비 사항

  • HOST OS: OSX Yosemite
  • 가상 컴퓨터 소프트웨어: VMWare 7.0 (아니면 Virtual Box)
  • Linux Ubuntu 14.04 LTS (Server Version)

1.1 버추얼 박스(Virtual Box)

굳이 버추얼 박스가 아니라도 괜찮습니다. VMWare 나 Parallel 도 괜찮습니다. 버추얼 박스는 공짜기 때문에 제목으로 달아논 것이고 저는 실제로 VMWare Fusion 을 썼습니다.

  • Guest OS 를 우분투로 세개 설치해줍니다. 저는 14.04 LTS 를 이용했습니다. 그리고 세개를 다 깔아주면 불편하기 때문에 한개를 깔고 기본적인 설정을 해주고 그 Guest OS 파일을 복사해주고 Mac Address 를 바꿔주는 식으로 설치해줬습니다.

1.2 네트워크를 고정 아이피로 설정해주기

고정 아이피로 만들면 이후에 세팅에서 엄청나게 편해집니다.

m/s hostname id
master cloud0 cloud
slave cloud1 cloud
slave cloud2 cloud


위와 같은 형태로 서버들을 구성할 예정입니다. 따라서 다음 부분은 각각의 Guest OS 에 전부 적용해 주어야 합니다.

1.2.1 DHCP 로 받아오는 부분을 static 으로 변경해서 파일을 변경해준다. /etc/network/inteface 를 열어서 다음 부분을 바꾸어 준다.

auto etho0
iface eth0 inet dhcp

이 부분을 커멘트 처리해주고 ('#' 을 맨 앞 라인에 써준다)

auto eth0
iface eth0 inet static 
address 172.16.242.100
netmask 255.255.255.0
gateway 172.16.242.2

와 같은 식으로 적어준다. dhcp 가 static 으로 바뀌고 address , netmask , gateway 를 상황에 맞게 써주는 것을 잊지 않는다. 위의 것은 어디까지 나의 경우에 예에 해당하는 것입니다.

1.2.2 /etc/resolvconf/resolv.conf.d/base 의 수정

예전에는 /etc/resolv.conf 를 수정했으나 이 파일이 이제 서버가 리스타트 될 때마다 리셋이 된다. /etc/resolvconf/resolv.conf.d/base 를 열어서

nameserver 8.8.8.8

를 추가해주고

$ sudo resolvconf -u

로 새로 만들어 주면 된다. 이 작업은 cloud0 , cloud1, cloud2 각각의 상황에 맞게 작성해줘야 합니다.

그리고 /etc/hosts 파일에

172.16.242.100 cloud0
172.16.242.101 cloud1
172.16.242.102 cloud2

와 같이 추가해 줍니다. 역시나 각각의 cloud0, cloud1, cloud2 에서 작업해줘야 합니다. 주어진 ip 는 제 경우입니다.

1.3 password 없이 각각의 서버에 접속할 수 있게 만들기

master 에서 slave 들에만 접속할 수 있게 만들면 됩니다. 즉 cloud0 -> cloud1 , cloud2 로 연결되어야 하니 cloud0 에서 다음과 같은 작업을 해 줍니다.

$ ssh-kegen -t rsa 

$ ssh cloud@cloud1 mkdir -p .ssh
$ ssh cloud@cloud2 mkdir -p .ssh

$ cat ~/.ssh/id_rsa.pub | ssh cloud@cloud1 'cat >> ~/.ssh/authorized_keys'
$ cat ~/.ssh/id_rsa.pub | ssh cloud@cloud2 'cat >> ~/.ssh/authorized_keys'

1.4 add-apt-repository 을 사용할 수 있게 만들어 주기

우분투(Ubuntu) 를 쓰면서 한번도 add-apt-repository 가 동작 안하는 것을 상상해 본적이 없어서 당황스러웠습니다. 우분투 server 로 설치하면 add-apt-repository 를 사용하기 위해서 필요한 패키지가 있습니다.

$ sudo apt-get install software-properties-common

이것을 설치해 줘야 합니다.

1.5 Java 설치

Java 의 버젼은 상관 없다고들 합니다. 그런데 계속해서 테스트 했던 버젼이 oracle java 이기 때문에 그것을 설치하기로 합니다. 이래저래 귀찮으니까 apt-get 을 이용해서 설치해 주기로 합니다. 뭐니 뭐니 해도 쉬운게 최고입지요.

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

질문 나오는 것에 모두 YES 해서 설치해주면 됩니다. 참고로 이건 cloud0, cloud1, cloud2 에서 다 설치해줘야 합니다.

2 하둡 (Hadoop) 설치

Guest OS 세대에 전부 Ubuntu Server 를 설치해주고 네트워크 까지 설치했다면 본격적으로 설치를 시작할 시간입니다. master 로 설정할 cloud0 에서 작업을 시작합니다.

2.1 하둡 다운로드

http://ftp.daum.net/apache/hadoop/core/stable2/hadoop-2.6.0.tar.gz

위의 파일을 다운 로드 받아서 게스트 (Guest) 에 밀어 넣던지 아니면 게스트에서 (인터넷이 된다는 가정하에)

$ cd ~/
$ wget http://ftp.daum.net/apache/hadoop/core/stable2/hadoop-2.6.0.tar.gz

같은 방식으로 다운 받으시면 됩니다. 그리고 rsync 를 이용할 것이기 때문에 master 인 cloud0 에서 작업을 진행하면 됩니다. 최근의 spark 는 2.4.1 대의 하둡을 지원합니다. 그러나 어느날 갑자기 옛날 버젼의 하둡이 사라졌습니다. 현재의 stable2 는 바로 hadoop 2.6.0 버젼입니다. 나중에 spark 는 따로 컴파일을 해줘야 할 것입니다. 아니면 2.6.0 대로 맞춘 버젼이 나오길 기다립시다.

적당한 곳에 풀어줍니다.

$ cd ~/
$ tar xvzf hadoop-2.6.0.tar.gz

$HADOOP_HOME = ~/hadoop-2.6.0 이라고 가정합니다.

2.1.1 실제 데이타 저장 디렉토리 생성

실제로 데이타가 저장될 디렉토리를 만들어 줍니다. cloud0, cloud1, cloud2 에서 모두 만들어줘야 합니다.

$ sudo mkdir -p /data/hadoop/tmp $ sudo mkdir -p /data/hadoop/dfs/name $ sudo mkdir -p /data/hadoop/dfs/data $ sudo chown -R cloud:cloud /data/hadoop

/data/hadoop 의 owner 를 cloud 로 바꿔주는 것을 잊으면 안됩니다. 이 작업을 안해주면 나중에 hadoop 이 포맷하고 실제로 네임노드 , 데이터노드가 실행시 에러가 발생합니다.

2.1.2 $HADOOP_HOME/etc/hadoop/core-site.xml 수정

다음과 같이 수정해줍니다.

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://cloud0:9000</value>
  </property>
  <property>
   <name>hadoop.tmp.dir</name>
   <value>/data/hadoop/tmp</value>
  </property>
</configuration>

fs.defaultFS 는 하둡 파일시스템의 진입점을 보통 지정합니다. master 를 가르키는게 일반적입니다.

2.1.3 $HADOOP_HOME/etc/hadoop/hdfs-site.xml 수정

다음과 같이 수정합니다.

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/data/hadoop/dfs/name</value>
        <final>true</final>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/data/hadoop/dfs/data</value>
        <final>true</final>
    </property>

    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
</configuration>

dfs.replication 은 HDFS 내에서 몇개의 블록을 복사해서 유지할 것인가 하는 것입니다. 숫자가 커질수록 안정도는 올라가지만 속도는 저하됩니다. 우리는 그냥 2로 정합니다. dfs.namenode.name.dirdfs.datanode.data.dir 은 위에서 지정해 준 디렉토리를 지정해줍니다.

2.1.4 $HADOOP_HOME/etc/hadoop/mapred-site.xml 수정

아마 파일이 없으면 만들어 주시면 됩니다.

<configuration>
  <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
  </property>
  <property>
    <name>mapred.local.dir</name>
    <value>/data/hadoop/hdfs/mapred</value>
  </property>
  <property>
    <name>mapred.system.dir</name>
    <value>/data/hadoop/hdfs/mapred</value>
  </property>
</configuration>

mapreduce.framework.name 이 중요합니다. 최근 하둡은 맵리듀스 관리를 얀(YARN) 으로 합니다. 꼭 지정해 줘야 합니다.

2.1.5 $HADOOP_HOME/etc/hadoop/yarn-site.xml 수정

<configuration>
<!-- Site specific YARN configuration properties -->
  <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>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>cloud0:8025</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>cloud0:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>cloud0:8035</value>
  </property>
</configuration>

cloud0 로 쓰여진 부분은 각자 자신의 환경에 맞춰주면 됩니다.

2.1.6 $HADOOP_HOME/etc/hadoop/masters

마스터 (master) 서버가 어떤건지 지정해주는 파일입니다.

cloud0

cloud0 로 지정해주면 됩니다.

2.1.7 $HADOOP_HOME/etc/hadoop/slaves

datanode 로 사용할 서버들을 적어주면 됩니다.

cloud1
cloud2

전체 3대를 사용할 꺼기 때문에 master 를 제외한 나머지를 적어주면 됩니다.

2.1.8 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 수정

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

와 같은 식으로 자바 위치만 정해주면 됩니다.

2.1.9 rsync 를 이용한 복사

cloud0 에서 다음과 같이 실행해 줍니다.

$ rsync -avz ~/hadoop-2.6.0 cloud@cloud1:/home/cloud/
$ rsync -avz ~/hadoop-2.6.0 cloud@cloud2:/home/cloud/

이러면 모든 노드(Node) 의 설정이 동일해집니다. 나중에 따로 생각해 내서 하기 힘들기 때문에 이 부분을 스크립트(script)로 만들어서 노드가 추가되면 스크립트에 추가된 노드분만 추가해 주는 식으로 관리해 주는것이 편할것 같습니다.

2.2 하둡(Hadoop) 실행

사용하기 전에 HDFS 를 포맷해줄 필요가 있습니다.

$ hadoop namenode -format

그리고 분산파일 시스템과 맵리듀스 시스템을 구동시켜주면 됩니다. $HADOOP_HOME 에서

$ sbin/start-dfs.sh
$ sbin/start-yarh.sh

를 실행시켜주면 됩니다. 제대로 동작하고 있는지 확인을 위해서는 cloud0 (즉 마스터) 에서

$ jps

를 입력해서 namenode (dfs 관련 서버) 와 resourcemanager (yarn 관련) 가 구동되어 있는지 확인하면 되고 cloud1 와 cloud2 에서도 마찬가지로

$ jps

를 입력해서 datanode(dfs 관련 서버) 와 nodemanager (yarn 관련)이 구동되어 있는지 확인하면 됩니다.


아래와 같이 파일을 열어서

$ emacs ~/.Xresources


다음과 같은 내용을 추가해 줍니다.

Emacs.font: Consolas-12
emacs.FontBackend: xft


그리고 다음과 같이 터미널에서 입력해 줍니다.

$ xrdb -merge ~/.Xresources


우분투에 Consolas 폰트를 설치하는 방법은 예전 포스트 에서 참조하세요.


EDIT: 2014-02-04

위 방법은 민트 리눅스 (Mint Linux) 마야 (Maya) 버젼에서도 동일하게 동작합니다.  

 
정말 예전 포스트 에서 민트 리눅스 (Mint Linux) 를 추천한 적이 있었습니다. 간만에 그 노트북이 생각나서 꺼내서 사용하니 OS 설치한지 오래되서 지원이 끊겼습니다. 민트 리눅스도 기반이 우분투(Ubuntu) 인지라 우분투의 지원주기랑 같습니다. 즉 우분투가 LTS (Long Term Support) 버젼이면 민트도 LTS 가 되는 것이지요. 따라서 우분투 LTS 버젼의 최근 것이 12.04 니까 민트도 거기에 해당하는 버젼이 민트 13 마야 (Mint Linux 13 Maya) 가 되는 것이지요. 

http://www.linuxmint.com/release.php?id=18

위 링크를 클릭하시면 민트 리눅스를 받을 수 있습니다.  저사양 노트북에는 씨나몬 (Cinnamon) 보다는 메이트 (Mate) 가 낫다고 하더군요. 기능성은 조금 떨어지지만 더 가볍다고 합니다. 그리고 제 빌어먹을 소니 노트북은 32비트 CPU 기 때문에 32 비트 버젼 Mate 를 설치해줍니다. 

다운로드 받은 iso 파일이 있다면 이제 이것을 USB 스틱에다 넣어서 부팅이 가능하도록 만들어 줘야 하는데 몇가지 방법이 있습니다. 그러나 제 경험으로는 몇가지 방법이 있다고는 하지만 되는 방법은 별로 없었습니다.

제 추천은 Universal-USB-Installer 를 이용하는 것을 추천드립니다.  


만약 윈도우에서 Linux 계열의 부팅이 가능한 USB 스틱을 만드는 경우라면 위의 프로그램을 이용하는 것이 가장 편했습니다.

그후에 시키는대로 대충 누르시면 설치가 됩니다. (민트 리눅스를 설치하는 방법은 여러군데서 찾을 수 있을 뿐더라 설치 자체도 쉽습니다)

설치후에 해야 할 일

사실은 이 부분이 더 중요합니다.  먼저 민트 리눅스 마야 (Maya) 는 LTS 인 12.04를 기반으로 하긴 하지만 이 버젼 자체가 옛날에 나온 것이기 때문에 소프트웨어 업데이트를 해줘야 합니다. 하지만 소프트웨어를 가져오는 소스 기반이 해외로 되어 있기 때문에 안그래도 시간이 걸리는 업데이트가 하루종일이 걸릴 수가 있습니다. 

1. 소스 레파지토리 (Source Repository) 한국으로 변경해주기 

$ sudo vi /etc/apt/sources.list


커맨드 라인에 위처럼 입력하시고 비밀번호를 입력하시면 나오는 상태에서

:1,$s/archive.ubuntu.com/ftp.daum.net/g


 로 입력하시면 병경이 됩니다. 그리고 

deb http://packages.medibuntu.org/ precise free non-free 



이 주소는 더 이상 사용되지 않는 것 같더군요. 원활한 진행을 위해서 맨 앞에 # 를 추가해서 막아줍니다. 

$ sudo apt-get update 



를 커맨드 라인에 입력하셔서 업데이트 해 줍니다.

그리고 왼쪽 하단의 'Menu' 버튼을 클릭하시고 '패키지 관리자'를 실행해 줍니다. (아마 한글이 안 깔린 상태라면 'Package Manager' 란 이름일 것입니다) 

 
이런게 뜨면  '설정' - '저장소' 를 눌러서 화면을 띄웁니다. 그러면 나오는 화면에서 



 위처럼 클릭하시고 나온 화면에서 



이렇게 선택하시고 '서버 선택' 버튼을 클릭하시면 됩니다. 그리고 다시 '소프트웨어 소스' 화면에서 두번째 '기타 소프트웨어'탭을 클릭하셔서 http://packages.medibuntu.org 항목을 체크 해제 하거나 지워주세요. 


위 그림처럼 해주면 되지만 실은 이 부분은 커맨드 라인에서 해주는 작업하고 동일합니다. 만약 커맨드 라인 작업을 먼저 하셨다면 이 부분은 필요 없을  수도 있습니다. 

여기까지 마치셨으면 오른쪽 하단의 방패 마크를 클릭하셔서 나오는 화면에서 


 '새로 고침'을 눌러서 저장소 업데이트 해주고 위 그림처럼 '업데이트 설치' 를 눌러서 긴 시간동안 설치해주시면 최신 소프트웨어로 업데이트 됩니다. 

2. 한글 설정

아직 한글이 제대로 설정이 안되는 경향이 있습니다. 이것은 1번 작업을 했다면 손 쉽게 해결할 수가 있습니다.  왼쪽 하단의 'Menu' 버튼을 클릭하시고 '제어판'을 클릭하시면 (한글 디스플레이 표기 전이라면 Control Pannel 일 것입니다. 아마도..) 


에서 위 그림과 같이 'Language Support' 를 클릭하셔서 나오는 화면에서 무엇인가를 설치하겠냐고 물어보면 설치한다고 대답하시고 나오는 화면에서 

 


위 그림 처럼  저 버튼 (다시 말씀드리지만 한글 디스플레이가 안되는 상황이면 영어 일 수가 있습니다) 을 클릭하셔서 나온 화면에서 

 
위 그림처럼 선택해서 (제 경우에는 영어 표시였고 Korean 을 선택해 줬습니다) '바뀐 내용 적용' 을 클릭해서 적용하면 됩니다.

여기까지면 한글 언어 팩이 설정된 것이고 이제 한글 입력기를 설치할 차례 입니다. 한글 입력기는 우분투에서 쓰이는 기본인 iBus 가 민트에서는 제대로 동작 안됐던 기억이 있습니다. 아마 소소한 버그였는데 고쳐졌을 지도 모르지만 한번 디인 상태라 모험하긴 싫더군요. 따라서 나비 (nabi) 를 설치해 주기로 합니다.

$ sudo apt-get install nabi



라는 마법의 키워드 한번만 입력해 주면 설치 완료 입니다.  한글이 적용되는 것을 확인하기 위해서 'Log out' 했다가 다시 'Log in' 하면 적용 된 모습을 확인 하실 수 있습니다. 

참고로 이 포스트는 그 설치된 민트 리눅스 마야 버젼에서 작성되었습니다. (화면 캡쳐도 물론 입니다. 이 버젼에 포함된 화면 캡쳐  프로그램 정말 쓸만하군요. @.@ )  

  최근 각광받고 있는 Linux Mint 를 설치해봤습니다. 결론은 대 만족입니다.  우분투 또는 리눅스 OS 를 메인으로 사용하고 싶은 사람에게 강력하게 추천합니다.
 
  곁들여서 제 환경을 조금 이야기 하자면 저는 컴퓨터가 5대 있습니다. 집에서 쓰는 데스크탑 1대와 서버 1대 , 그리고 노트북 3대 입니다. 노트북은 각각 Macbook-Air , Macbook-Pro , Sony VAIO 입니다.

제가 컴퓨터를 고르는 기준은 일단 데스크탑은 'Power' 입니다. 강력해야만 합니다. 노트북을 고르는 기준은 '이쁨' 입니다. 진짜 수년동안 노트북을 써왔지만 작고 이쁜게 최고 입니다. 그래서 VAIO 를 사용했었는데 최근 아시는 분은 아시겠지만 돈값을 못합니다. 그래서 애플로 갈아탔습니다. 작고 이쁜 소니에서 작고 이쁜 맥으로 갔을뿐입니다. (저는 애플을 좋아하지는 않습니다)

 
  DeskTop - Windows 7
  Server - Ubuntu 12.04
  MacbookPro - Lion
  Macbook Air - Lion
  Sony VAIO - Ubuntu 12.04


  소니는 도저히 느려서 Windows 7을 사용할 수가 없더군요. CPU 가 무려 셀러론입니다. 이걸 160만원이나 받아 쳐(!)먹다니  소니는 망해야합니다. 60만원대의 사양에 100만원의 디자인 마진을 붙이다니 (이쁘긴 이쁩니다) 제정신이 아닙니다. 그에 비해 애플은 20-30만원정도의 디자인 마진을 붙이더군요. (용서해줄만 합니다)

OS 는 게임을 하고 문서작업을 할 때는 Windows 가 최고로 편하더군요. (제 개인 기준입니다) 그리고 개발을 할 때는 Debian 계열의 리눅스를 따라올 OS 가 없다고 감히 말씀드리고 싶습니다. Weblock 이라고 제가 참여하는 오픈 소스 프로젝트 개발 환경을 윈도즈 계열에서 세팅한 적이 있었는데 8시간 정도 걸리더군요. 그러나 우분투에서 딱 3분 정도 걸리더군요. 이걸 비교를 할 수야 있을까요?
 
  OSX 는 이쁘고 개발환경 세팅도 중간 정도고 몇개 게임은 돌아가는 딱 중간정도의 OS 입니다. 그래서 딱히 애플을 좋아하거나 OSX 를 좋아하지는 않지만 자주 애용을 해주고 있습니다.

  우분투 (Ubuntu)는 정말 많이 이뻐지고 많이 편해졌습니다. 그러나 OSX 를 사용하다가 사용하면 왠지 '구려'보이는 것을 참을 수가 없었습니다. 그런 의미에서 Mint 는 정말 최적의 OS 입니다. Debian 계열의 빠른 개발환경!! OSX 에 필적하게 이쁜 UI !! 두마리 토끼를 훌륭하게 따라잡았습니다.

간단하게 캡쳐를 떠 봤습니다.



  그래서 Sony VAIO 에 Ubuntu 를 밀고 Mint 를 설치해줬는데 저사양에도 불구하고 깔끔하게 동작하더군요. 다시 한번 만족했습니다. 저사양에서 윈도우 (Windows) 에 질려서 좀 색다른 OS 를 사용해보고 싶은분들 Mac 은 비싸고 또 새로 사야 해서 귀찮은 분들을 위해서 가지고 있는 '고물형' 노트북에도 완벽하게 깔리는 Mint 를 추천합니다. 게다가 Windows 를 사용하시던 분들을 포섭하기 위해서 Windows  같은 UI 도 존재합니다.


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)

     
     
    원문은 아래의 URL 에서 확인이 가능합니다.

      http://hbase.apache.org/book.html#quickstart

    위의 페이지를 살펴보면 간단하게 시작할 수가 있습니다. 영어가 싫은 분들을 위해서 조금 사족을 덧 붙이자면

    1. Hbase 를 다운 받는다.

       http://ftp.daum.net/apache/hbase/stable/

       여기에서 hbase-0.92.0.tar.gz 를 다운 받습니다. 안정화 (stable) 버젼이고, 0.92.0 버젼 입니다.

    2. 적당한 곳에 압축을 풀어 준다.
      
    $ tar xvf hbase-0.92.0.tar.gz
    $ cd hbase-0.92.0/

    3. conf/hbase-site.xml 파일을 열어서 다음과 같이 수정합니다.

    <configuration>
      <property>
        <name>hbase.rootdir</name>
        <value>file:///home/crazia/work/hbase-0.92.0/hbase-${user.name}/hbase</value>
      </property>
    </configuration>


     제 설정에서 HBASE 가 설치된 곳이

     $HBASE_HOME = /home/crazia/work/hbase-0.92.0

     이니 자신의 상황에 맞게 변경해 주시면 될 것입니다. (붉게 칠해진 부분을 자신의 환경에서 Hbase 가 설치된 곳으로 변경)

    4. HBase 구동 시킨다

      
    $ ./bin/start-hbase.sh

       만약, 여기서 구동이 안된다면 sun 사의 java 로 바꿔주실 필요가 있습니다.
       지난 아티클 참조 , 지지난 아티클 참조

    5. HBase 쉘 (Shell) 로 제대로 동작하는지 확인

      
    $ ./bin/hbase shell


       로 shell 을 구동시킵니다.

    hbase(main):003:0> create 'test', 'cf'
    0 row(s) in 1.2200 seconds
    hbase(main):003:0> list 'test'
    ..
    1 row(s) in 0.0550 seconds
    hbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1'
    0 row(s) in 0.0560 seconds
    hbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2'
    0 row(s) in 0.0370 seconds
    hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3'
    0 row(s) in 0.0450 seconds


    간단하게 test 라는 테이블에 cf 라는 컬럼을 생성하고 간단하게 값을 입력하는 예제입니다. 여기까지만 해봐서 문제가 없으면 정상적으로 동작하는 것입니다. 기타 자세한 사항은 QuickStart 부분에서 테스트 해 볼 수가 있습니다.

    hbase(main):012:0> disable 'test'
    0 row(s) in 1.0930 seconds
    hbase(main):013:0> drop 'test'
    0 row(s) in 0.0770 seconds

    만들어 봤던 테이블을 지워줍니다.

    hbase(main):014:0> exit


    그리고 쉘을 종료합니다.

    6.  HBase 중단시키기
    $ ./bin/stop-hbase.sh


    만약 정상적으로 동작이 안되는 상황이 발생하면 ..

    $HBASE_HOME/logs/hbase*master*.log 파일을 열었을 때

    2012-02-20 13:12:49,478 WARN org.apache.hadoop.hbase.master.AssignmentManager: Unable to find a viable location to assign region -ROOT-,,0.70236052

    이런 경고가 발생한다면 제대로 Hbase 가 구동되는 것이 아닙니다.

    해결방법은

    우분투 (Ubuntu) 에서  /etc/hosts 파일 열었을 때

    127.0.0.1       localhost
    127.0.1.1      crazia-VirtualBox                                              
    127.0.0.1      ubuntu.ubuntu-domain ubuntu  


    되어 있는 파일을

    127.0.0.1       localhost
    #127.0.1.1      crazia-VirtualBox                                              
    127.0.0.1       crazia-VirtualBox
    #127.0.0.1      ubuntu.ubuntu-domain ubuntu  


    라고 바꿉니다. 핵심은 127.0.1.1 로 되어 있는 부분에 대한 처리만 신경 써 주시면 됩니다.


    우분투(Ubuntu) 에 자동으로 포함되어 있는 openjdk 와 sun 의 jdk 가 미묘하게 차이가 있는 것을 알고 있습니까? 실은 저도 못 느껴본 차이긴 하지만 있다고 합니다.

    무엇인가를 개발할 때 특히나 오픈소스(Open Source)를 가져다 쓸 때는 환경 문제가 특히나 중요한데, 지금 할려는 작업이 sun-jdk 를 설치해야만 하는 일입니다. 저번 포스트에서는 무지 간단하게 썼지만 막상 sun-jdk 를 설치하는 일은 한줄로 되지는 않습니다. 다섯줄 입니다.

    $ sudo apt-get install python-software-properties
    $ sudo add-apt-repository ppa:ferramroberto/java
    $ sudo apt-get update
    $ sudo apt-get install sun-java6-jdk sun-java6-plugin


    패키지를 가져오는 소스 주소를 추가해 주고 레파지토리 (repository)를 업데이트 해줍니다. 그리고 가볍게 설치를 해 줍니다. 설치가 끝났다면 이미 설치되어 있는 자바를 관리해 줄 필요가 있습니다.

    $ sudo update-alternatives --config java


      Selection    Path                                      Priority   Status
    ------------------------------------------------------------
    * 0            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      auto mode
      1            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      manual mode
      2            /usr/lib/jvm/java-6-sun/jre/bin/java       63        manual mode

    Press enter to keep the current choice[*], or type selection number: 2

    기본으로 쓸 자바를 어떤것을 선택할 것인지 지정해 주는 작업입니다. java-6-sun 을 골라주시면 되겠지요.

    $ java -version


    으로 검사해 보면 됩니다.



    $ apt-get install java


    로 한방에 끝이 납니다. 그러나 게스트OS 에서 인터넷을 쓸 수 없는 지금은 모든것을 수동으로 깔아줘야 합니다.

    다음으로 이동해서 라이센스에 동의 하시고

    http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u31-download-1501634.html

    jdk-6u31-linux-i586.bin 를 다운 받습니다.

    $ sudo mkdir /usr/java
    $ sudo cp jdk-6u31-linux-i586.bin /usr/java
    $ sudo su -

    루트 계정으로 변경합니다.

    # cd /usr/java
    # ./jdk-6u31-linux-i586.bin
    # exit

    다시 본래 계정으로 돌아와서

    $ emacs $HOME/.bash_profile

    아래와 같은 내용을 맨 아래에 추가해 줍니다. (제 경우에는 파일을 새로 만들었습니다)

    export JAVA_HOME=/usr/java/jdk1.6.0_31
    export PATH=$PATH:$JAVA_HOME/bin

    저장하고 파일을 닫고

    $ source $HOME/.bash_profile
    $ java -version

    결과 값이

    java version "1.6.0_31"
    Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
    Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing)

    나오면 됩니다.

    이상으로 쉬운일을 어렵게 풀어나가고 있는 광이랑입니다.


    지금 일하는 곳이 버추얼박스 (VirtualBox) 에서 네트워크 드라이버가 안잡히게 하는 멋진 보안 환경 때문에 공유폴더를 이용해서 파일을 복사하여 수동으로 설치하게 되어 있습니다. 따라서 GTK 를 써야만 하는 X 를 지원하는 Emacs 는 엄두도 못 내고 , Console 모드로 컴파일 해서 사용할려고 하다가 에러가 발생해서 해결하는 방법을 알아보겠습니다.

    Emacs (23.4) 를 우분투 (11.10) 에서 수동으로 컴파일 할때 발생하는 문제입니다.

    make[1]: *** No rule to make target `/usr/lib/crt1.o', needed by `temacs'.  Stop.


    crt1.o 때문에 에러가 발생한 것임을 알 수가 있습니다.

    $ gcc -print-file-name=crt1.o
    /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o

    이렇게 위치 확인을 해주고

    $ ./configure --without-x --with-crt-dir=/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/


    이런식으로 crt 가 위치하는 디렉토리를 포함시켜서 configure 를 다시 실행해주고

    $ make
    $ sudo make install

    하면 됩니다. 열악한 환경에서 서버 개발을 하는 모든 개발자들 분 파이팅!!




    + Recent posts