• 험난한 HBASE 설치기

    2018. 7. 17. 15:24

    by. 위지원





    파일 다운로드와 압축풀기.
     
    다운로드 사이트에 가서 src말고 bin버전으로 다운 받아준다.


    HBASE의 최신 release 버전은 https://hbase.apache.org/downloads.html 에서 받을 수 있다.




    하둡의  최신 릴리즈는 http://hadoop.apache.org/releases.html 에서 확인할 수 있다.


    주키퍼의 최신 릴리즈는 https://archive.apache.org/dist/zookeeper/ 에서 확인할 수 있다.




    다운로드 받은 파일은 원하는곳에 tar 명령어를 이용하여 압축을 풀어준다

     

    $tar -xzvf 파일명

    환경변수 설정하기.


    vi /etc/profile


    #hbase
    export HBASE_HOME=HBASE가 설치된 경로
    export PATH=$PATH:$HBASE_HOME/bin


    #hadoop
    export HADOOP_HOME=하둡이 설치된 경로
    export PATH=$PATH:$HADOOP_HOME/bin

    #zookeeper
    export ZOOKEEPER_HOME=주키퍼가 설치된 경로
    export PATH=$PATH:$ZOOKEEPER_HOME/bin

    source /etc/profile


    노드 추가와 SSH설정하기


    다 설치해놨으니 분산을 위해 노드를 추가하고  ssh 공개키 설정을 하자.


    우선 노드를 복사하자. 버츄어 머신이 있는 폴더로 들어가서 그냥 그 폴더를 통째로 복사한다.

    (나중에 할때는 그냥 새로 create vm을 한 뒤 scp로 파일을 전송하는 방법을 하는게 나을 것 같다. 실제로 이렇게 복사하니 뭔가 ,, 정확한 이유는 모르지만 커넥션이 자꾸 끊기는 문제가 발생했고 그래서 vm을 전부 밀어버리고 하나하나 재설치하니 하루만에 설치가 완료되었다..;;)







    그런 다음에 아래와 같이 vmware에서 opren a virtual machine을 선택하고 복사한 폴더의 파일을 열어준다.




    그러면 새로 가상머신이 생긴다(이름이 똑같이 생기니 rename으로 수정해주자) 그런다음 실행하면 아래와 같은 창이 뜨는데 이때 I Copied It을 클릭해야 설정을 새로 세팅한다.





    이제 공개키를 보내서 서로 친밀한 관계를 만들어주자


    * 시작전에 사용자를 먼저 adduser [이름]으로 생성하고 시작하자. 사용자 추가 후 발생하는 에러에 대해서는 파일이나 폴더의 권한을 먼저 확인해보자.


    먼저 각 서버의 호스트 네임을 설정해준다.


    $hostnamectl set-hostname 호스트명


    $vi /etc/hosts에 위에서 생성한 호스트들을 저장해준다


    ip주소   호스트명

    ip주소-2 호스트명-2

    ip주소-3 호스트명-3

    ip주소-4 호스트명-4


     [ip주소] namenode

     [ip주소] secondnode

     [ip주소] datanode01

     [ip주소] datanode02



    출처: http://weejw.tistory.com/142 [위지원의 블로그]

    [ip주소] namenode

     [ip주소] secondnode

     [ip주소] datanode01

     [ip주소] datanode02



    출처: http://weejw.tistory.com/142 [위지원의 블로그]

     [ip주소] namenode

     [ip주소] secondnode

     [ip주소] datanode01

     [ip주소] datanode02



    출처: http://weejw.tistory.com/142 [위지원의 블로그]

    $ssh-keygen을 이용해서 공개키를 생성한다음




    $ssh-copy-id -i ~/.ssh/id_rsa.pub 계정@호스트명 으로 해서 공개키를 배포한다.


    * https://stackoverflow.com/questions/7439563/how-to-ssh-to-localhost-without-password

    이 곳을 참고하여 localhost에 대해서도 설정해주자


    그럼 이제 비밀번호 입력없이 ssh로 접속이 가능하다.


    HADOOP과 ZOOKEEPER 그리고 HBASE 설정하기


    HADOOP은 http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html 에가면 어떻게 설정해야하는지 나와있다.


    1.우선 모든 에서 masters와 slaves 파일 두가지를 수정한다 (masters는 없으면 생성하면 된다)

    1)masters에는 master의 호스트를 작성한다.

    2)slaves에서는 slave의 호스트를 작성한다.


    2.etc/hadoop/core-site.xml,etc/hadoop/hdfs-site.xml 두가지를 수정해서 모든 노드가 가지고 있도록 해준다.

    1)core-sit.xml



    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://네임노드호스트명:9000/</value>
    </property>

    2)hdfs-site.xml


     <property>
          <name>dfs.namenode.name.dir</name>
          <value>로컬에서 네임노드의 데이터가 있을 경로</value> ex) /usr/local/hadoop/data/namenode
     </property>
     <property>
          <name>dfs.datanode.data.dir</name>
          <value>로컬에서 데이터노드의 데이터가 있을 경로</value> ex) /usr/local/hadoop/data/datanode
     </property>


    3)hadoop-env.sh에서 java_home= 경로를 설정해준다.


    설정이 다 된 파일은 scp 명령어로 각 노드로 보내준다.


    다 되면 $haddop namenode -format $./start-all.sh로 확인해본다.  이상없음!

    **yarn을 아직 설정안했으니 star-dfs.sh로 하는게 더 깔끔하다.






    UI로 실행시켜 보자  http://호스트명:50070





    *data 파일은 먼저 만들면 안되고, 그리고 만약 Live node가 없는 오류가 나면 data파일을 모든 노드에서 삭제후 namenode format후 다시 시도해볼 것!



    Zookeerper는

    1. cp zoo_sample.cfg zoo.cfg로 복사 한뒤 아래 내용을 작성 (dataDir 경로에 data폴더를 생성해줘야 한다.)


    dataDir=/usr/local/zookeeper/zookeeper-3.4.13/data
    server.1=h:2888:3888  *h는 호스트명
    server.2=h2:2888:3888
    server.3=h3:2888:3888


    2. 그리고 주키퍼가 있는 각 서버에 data폴더로 정해준곳 아래에 myid라는 파일을 작성한 후

    위에서 설정한대로 1,2,3을 각각 넣어준다


    예를 들면


    hbase 서버에는 myid파일에 1

    hbase-2서버에는 myid파일에 2
    hbase-3서버에는 myid파일에 3


    zoo.cfg를 scp로 각 서버로 전송한 후


    각 서버에서 bin/zkServer.sh start로 실행하고 확인하면 아래와 같이 모든 서버에서 확인 가능하다.




    *zookeeper가 에러가 나면 myid가 있는 폴더 아래에 version이라는 폴더가 생겼을텐데 이를 삭제한 뒤 다시 시도해보자.


    HBASE는 완전분산 방식기준으로


    1) hbase-site.xml 파일을 열어 작성한다.

    <configuration>
            <property>
                    <name>hbase.rootdir</name>
                    <value>hdfs://h:9000/hbase</value>
            </property>
            <property>
                    <name>hbase.master</name>
                    <value>h:6000</value>
            </property>
            <property>
                    <name>hbase.cluster.distributed</name>
                    <value>true</value>
            </property>
            <property>
                    <name>hbase.zookeeper.quorum</name>
                    <value>h,h2,h3</value>
            </property>
            <property>
                    <name>hbase.zookeeper.property.dataDir</name> *myid 파일이 있는 경로
                    <value>/usr/local/zookeeper/zookeeper-3.4.13/data</value>
            </property>
    </configuration>


    2) hbase-env.sh에서 자바경로를 작성해준다.


    export JAVA_HOME=/usr/local/java/jdk1.8.0_171


    3) regionservers 파일에 regionserver가 될 친구들의 호스트명을 작성해준다.




    hbase UI를 실행시켜보자










    주키퍼, hadoop, hbase를 모두 실행 시킨 결과



    hbase가 마스터가 안나와서 했던 것들


    hbase shell에서 zk_dump명령어를 치면 아래와 같이 문구가 뜬다. 또한 마스터에서 HMaster도 안보인다.

    Active master address: <<FAILED LOOKUP: Can't get master address from ZooKeeper; znode data == null>>

    해봤던 시도1.  hbase-site.xml에서 아래 값을 추가

    <property>
                   <name>zookeeper.znode.parent</name>
                   <value>/hbase-unsecure</value>
    </property>


    해봤던 시도2. hbase-site.xml에 오타 수정
            <property>
                    <name>hbase.rootdir</name>
                    <value>hdfs://h:9000/hbase</value> *원래 h/hbase:9000으로 순서가 바뀌어있었음
            </property>


    해봤던 시도3. hdfs dfs -mkdir /hbase로 파일을 만들어놓아봄 (나중에 삭제하고서 다시 켜도 되는거보니 이건 가능성이 좀 낮음


    해봤던 시도3.방화벽 죄다 껐다가 켜봄(근데 hadoop이 제대로 연결되는데 이건 문제가 될리가,,?)


    해봤던 시도4.hdbs-env.sh에서 아래 값 변경함

    export HBASE_MANAGES_ZK=true *원래는 false였음


    3번과 4번은 내가 vm을 죄다 밀어버리고 다시 설치할때 설정한부분이였고 이게 직접적인 연관이 있었는지는 모르겠지만 이때는 성공했다.


    *구글링 결과 그냥 껐다 키라는 말도 있다.


    Hmaster가 그냥 꺼진다 물논 리전서버들과 함께 사라진다.



    내가 참 바보지 HRegionServer 프로세스가 안생겨서 log를 확인해보니 아래와 같은 에러가 떳다.


    quorum.QuorumCnxManager: Cannot open channel to 2 at election address h3/203.255.77.165:3888
    java.net.ConnectException


    1) 바보같이 노드 복사해놓고 myid 값을 수정안했다 ^^...


    2) 끈줄 알았던 방화벽이 살아있었다 $systemctl status firewalld (centOs7기준)로 확인해보자 꺼진 방화벽도 다시 확인!



    hbase가 안켜지는 이유는 주키퍼가 오류가 많이 생겨났다. hbase가 오류가 나니까 hbase문제라고 생각하고 hbase log만 본게 문제였고, 실제로 zookeeper에 jps를 했을때 프로세서가 떴지만 실제 log를 확인했을때는 연결 오류가 생겼다는 log가 남아있었다. jps에 떳다고 해결되었다 생각말고 log를 봐야한다.


    그리고 마지막으로,, 일단 방화벽부터 의심하는게 최고다 ^-^* 방,,ㅋ,화,,벽,,찡.,,


    HBASE.,,,,2주만에 설치완료,,


    아래와 같은 master is initializizing 오류는 그냥 기다리면 된다.^^ 커피한잔의 여유