본문 바로가기

MLOps 개발자 양성과정/bigdata

[Day-86]

HBase 설치하기

 

저사양 파일럿 환경 - Server02로 지정

HBase 재배포하기

클라우데라에서 어떤 서비스 추가했을 때 클라이언트 설정값에 변동이 발생

=> 클라이언트 재배포를 통해 변경사항을 반영해야 함!!

 

 


HBase 테스트하기

# ServerO2에 root 계정으로 로그인
# hbase 테스트

# HBase 코드를 사용할 수 있는 환경으로 넘어가야 해
$ hbase shell 
=> 약 1~2분 정도 소요 (실제 HBase는 클라우데라 쪽에 있어 로컬이 아닌)

# smartcar_test_table 테이블 생성
hbase(main):003:0>  hbase(main):001:0> create 'smartcar_test_table', 'cf'
# cf라는 필드 만들어놨어 테이블 생성 시 필드 하나는 있어야
=> Hbase::Table - smartcar_test_table

# smartcar_test_table에 데이터 삽입
hbase(main):003:0> put 'smartcar_test_table','row-key1', 'cf:model', 'Z0001'
# hbase key와 value 한 쌍

# smartcar_test_table에 데이터 삽입
hbase(main):003:0> put 'smartcar_test_table','row-key1', 'cf:no', '12345'

# smartcar_test_table의 데이터 조회
# row-key 행을 찾아놔
hbase(main):003:0> get 'smartcar_test_table','row-key1'
COLUMN                                         CELL
 cf:no                                         timestamp=1682399705880, value=12345
1 row(s)
Took 0.1168 seconds

# Test 테이블을 삭제한다.
hbase(main):003:0> Test Table Drop
NameError: uninitialized constant Drop

# smartcar_test_table의 전체 데이터 조회
hbase(main):003:0> list 'smartcar_test_table'
TABLE
smartcar_test_table
1 row(s)
Took 0.0315 seconds
=> ["smartcar_test_table"]

# smartcar_test_table 비활성화
hbase(main):003:0> disable 'smartcar_test_table'
Took 1.3322 seconds

# smartcar_test_table 삭제
hbase(main):003:0> drop 'smartcar_test_table'
Took 0.4848 seconds

# hbase shell 에서 빠져 나옴
hbase(main):003:0> exit
[root@server02 working]#

 

 

HBase 웹 관리자 화면 접속

server02.hadoop.com:1610

 

* 사용하지 않을 시 항상 HBase 서비스 정지하기

 


Redis 설치하기

 

어디에 설치할 건지 

레디스 설치

레디스는 CM의 소프트웨어 컴포넌트로 포함돼 있지 않다. 
따라서 레디스 설치 패키지를 이용해 Server02에 직접 설치


1. 레디스를 설치하기 위한 기본 환경 구성을 시작.
   Server02에 root 계정으로 로그인
    먼저 gcc와 tcl을 설치

   [root@server02 working] yum install -y gcc*
   [root@server02 working] yum install -y tcl

   # yum 설치 명령으로 관련 라이브러리가 설치되고 마지막에 “Complete!” 메시지

   # 설치 오류 발생 시, CentOS Mirror 리스트 변경

   [root@server02 working] echo "http://vault.centos.org/6.10/os/x86_64/" > /var/cache/yum/x86_64/6/base/mirrorlist.txt
   [root@server02 working] echo "http://vault.centos.org/6.10/extras/x86_64/" > /var/cache/yum/x86_64/6/extras/mirrorlist.txt
   [root@server02 working] echo "http://vault.centos.org/6.10/updates/x86_64/" > /var/cache/yum/x86_64/6/updates/mirrorlist.txt


2. 레디스 5.0.7을 내려받아 빌드 및 설치를 진행
   # 설치 파일 다운로드 위치로 이동
   [root@server02 working] cd /home/pilot-pjt/

   # 설치 파일 다운로드
   [root@server02 pilot-pjt] wget http://download.redis.io/releases/redis-5.0.7.tar.gz

   # 설치 파일 압축 풀기
   [root@server02 pilot-pjt] tar -xvf redis-5.0.7.tar.gz

   # 압축 풀린 위치로 이동 
   [root@server02 pilot-pjt] cd redis-5.0.7

   # 설치하기 위한 테스트의 일종
   [root@server02 redis-5.0.7] make
# 제대로 압축 풀렸는지 검증

   # 설치여부
   [root@server02 redis-5.0.7] make install

   # 설치 스크립트 파일위치로 이동
   [root@server02 utils] cd utils/

   # 설치 스크립트 파일에 권한 부여
   [root@server02 utils] chmod 755 install_server.sh

   # 인스톨 스크립트를 실행
   [root@server02 utils] ./install_server.sh
   => 기본값 유지 끝까지 Enter
   => Starting Redis server...
   => Installation successful!

   # vi 명령으로 레디스 서버 기동 여부를 확인
   [root@server02 utils] vi /var/log/redis_6379.log


3. 레디스가 성공적으로 설치됐는지 점검
   [root@server02 utils] service redis_6379 status

   # 레디스 서비스를 시작/종료하는 명령
   $ service redis_6379 start
   $ service redis_6379 stop

04. 레디스 서버에 원격 접근을 하기 위해 설정 파일을 열어 수정한다. 
   # 설정 파일은 /etc/redis/6379.conf에 위치
   [root@server02 utils] vi /etc/redis/6379.conf

   # 바인딩 IP 제한 해제: “bind 127.0.0.1” 부분을 주석으로 처리
   # bind 127.0.0.1

   # 패스워드 입력 해제: “protected-mode yes” 부분을 찾아 “yes” —> “no”로 변경
   protected-mode no

   # 레디스 서버를 재시작
   [root@server02 utils] service redis_6379 restart


5. 레디스 CLI를 통해 간단히 레디스 서버에 데이터를 저장(Set)/조회(Get)
   [root@server02 utils] redis-cli

   # “key:1”이라는 키로 “Hello!BigData” 값을 레디스 서버에 저장
   127.0.0.1:6379> set key:1 Hello!Bigdata

   # “key:1”이라는 키로 조회
   127.0.0.1:6379> get key:1

   # “key:1”이라는 키로 삭제
   127.0.0.1:6379> del key:1

   # 레디스 CLI 빠져 나옴
   127.0.0.1:6379> quit

   [root@server02 utils]

 

 

 

 


스톰설치

실시간 분산 처리기인 스톰을 설치

스톰도 CM에서 지원하지 않는 컴포넌트. 
따라서 직접 스톰의 설치 파일을 내려받아 Server02에 설치


1. Server02에 root 계정으로 접속해서 스톰 설치를 위한 tar 파일을 다운로드

$ cd /home/pilot-pjt/
$ wget http://archive.apache.org/dist/storm/apache-storm-1.2.3/apache-storm-1.2.3.tar.gz
$ tar -xvf apache-storm-1.2.3.tar.gz
$ ln -s apache-storm-1.2.3 storm


2. 스톰의 환경설정 파일을 수정. 
   “storm.yaml” 파일을 열어서 입력.(참고로 띄어쓰기도 정확히 입력해야 한다!!!).

$ cd /home/pilot-pjt/storm/conf
$ vi storm.yaml

-----------------------------------------
아래 부분 수정 및 추가
########### These MUST be filled in for a storm configuration
# storm.zookeeper.servers:
#     - "server1"
#     - "server2"
#
# nimbus.seeds: ["host1", "host2", "host3"]
#

# 주키퍼 서버 정보
storm.zookeeper.servers:
 - "server02.hadoop.com"

# 스톰이 작동하는 데 필요한 저장소 위치
strom.local.dir: "home/pilot-pjt/storm/data"

# nimbus : 마스터 노드에서 실행하는 데몬 
nimbus.seeds: ["server02.hadoop.com"]

# supervisor: 워커 노드에서 실행하는 데몬
# 포트의 개수만큼 멀티 워커가 만들어진다.
# 파일럿 프로젝트에서는 6700번 포트의 단일 워커만 작동.
supervisor.slots.ports:
 - 6700

# 스톰 ui를 기동 시, 포트번호
ui.port: 8088
------------------------------------------------

* 참고 : 
  데몬(daemon) 이란 서비스의 요청에 대해 응답하기 위해 오랫동안 실행중인 백그라운드(background) 프로세스
------------------------------------------------


3. 스톰의 로그 레벨을 조정

기본값이 “info”로 돼 있는데, 
스톰에서는 대규모 트랜잭션 데이터가 유입되면서 
과도한 로그로 인해 성능 저하와 디스크 공간 부족이 발생할 수 있다. 

이 같은 문제를 방지하기 위해 두 개의 파일을 수정. 
cluster.xml과 worker.xml 파일. 
해당 파일의 75번째 줄과 91번째 줄 사이의 logger 설정에서
level="info"로 돼 있는 부분을 level="error" 로 모두 변경.

$ cd /home/pilot-pjt/storm/log4j2
$ vi cluster.xml
$ vi worker.xml



4. 스톰 명령을 편리하게 사용하기 위해 root 계정의 프로파일에 스톰의 패스를 설정.
$ vi /root/.bash_profile

# “/home/pilot-pjt/storm/bin” 경로를 추가
PATH=/home/pilot-pjt/storm/bin

# 수정한 root 계정의 프로파일 정보를 다시 읽어온다.
$ source /root/.bash_profile



5. 2장에서 설정했던 자바 명령의 링크 정보가 파일럿 환경을 구성하는 도중 변경되는 경우가 있다. 
   => 여러가지 플랫폼을 설치하다 보면 플랫폼 내에서 자바 버전 링크가 수정되는 경우도 있다.
   먼저 java -version을 실행한 후 “1.8.x”가 아니면 다음 명령을 실행해 JDK 1.8 링크로 변경한다.

$ java -version

# “1.8.x”이 아닌 경우에만 !!!!!!
$ rm /usr/bin/java
$ rm /usr/bin/javac
$ In -s /usr/java/jdk1.8.0_181-cloudera/bin/javac /usr/bin/javac
$ In -s /usr/java/jdk1.8.0_181-cloud은ra/bin/java /usr/bin/java



6. 기본적인 스톰 설치가 종료. 
    이번에는 리눅스가 재시작할 때도 스톰이 자동으로 실행되도록 설정. 
    총 3개의 스톰 서비스(Nimbus, Supervisor, UI가 있고 
   3개의 자동 실행 스크립트가 필요
   - storm-nimbus , storm-supervisor , storm-ui


7. 스톰의 서비스 등록 파일은 
   C:/bigdata2nd-master/CH05/예제5.1/ 경로에 있는 
   3개의 파일(stormnimbus, storm-supervisor, storm-ui)을 활용. 
   해당 파일을 Server02에 업로드

   FTP 클라이언트 파일질라 실행
   업로드 경로: /etc/rc.d/init.d
   C:/bigdata2nd—master/CH05/예제5.1/ 경로에 있는 3개의 파일(storm—nimbus, stormsupervisor, storm-니i)을
   Server02의 /etc/rc.d/init.d 디렉터리에 업로드



8. 업로드한 세 파일의 권한을 변경.
$ chmod 755 /etc/rc.d/init.d/storm-nimbus
$ chmod 755 /etc/rc.d/init.d/storm-supervisor
$ chmod 755 /etc/rc.d/init.d/storm-ui

----------------------------------------------------------
참고 : 리눅스 권한
파일을 서버에 전송하기 전에도 역시 전송될 파일에 권한이 부여됨. 
파일을 웹서버에 업로드 하기 전에도 권한을 변경하여 업로드. 
이때 777 또는 755 등의 표기로 권한이 일반적으로 부여

권한 분류하기
일단 파일의 권한을 구분하는 경우 크게 3가지로 분류.
    1. 읽기 Reading - 4
    2. 쓰기 Writing - 2
    3. 실행 Executing - 1

위 숫자는 각각의 실행 코드로 8진수로 표현. 
예) 만약 777의 권한이 부여되었다면, 각각의 7은 (4 + 2 + 1)을 의미. 
    즉 읽고 쓰고 실행 모두 가능하다는 의미입니다.

연속된 숫자 777의 경우, 각각의 7은 첫자리부터 
    처음의 7 - 소유자 권한
    두번째의 7 - 그룹 사용자 권한
    세번째의 7 - 기타 사용자 권한
다음의 의미를 가지게 된다.

chmod 명령어를 사용하여 파일 또는 디렉토리(폴더)에 권한을 부여, 수정할 수 있다.
예) sudo -s    // root 권한 얻기
   chmod -R 777 filename
----------------------------------------------------------


09. 서비스 등록 스크립트에 대한 Log 및 Pid 디렉터리를 만들어 준다.
$ mkdir /var/log/storm
$ ls /var/log/s*

$ mkdir /var/run/storm
$ ls /var/run/s*


10. 세 파일에 대해 아래의 service/chkconfig 등록 명령을 각각 실행한다.
$ service storm-nimbus start
$ service storm-supervisor start
$ service storm-ui start


11. 아래의 명령으로 스톰이 정상적으로 구동됐는지 확인한다.
$ service storm-nimbus status
$ service storm-supervisor status
$ service storm-ui status
모두 “-is running” 상태인지 확인한다. 파일럿 개발 환경에 따라 Running 시점은 차이가 날 수 있다.

12. 스톰 UI에 접속해서 스톰의 중요 상태들을 모니터링할 수 있다.
URL: http://server02.hadoop.com:8088

http://server02.hadoop.com:8088/

 

 


HBase 서비스 시작 : CM 홈 一 [HBase]- [시작]


ServerO2에 root 접속
저사양 파일럿 환경: 리전 스플릿 수를 2로 설정한다.
리전 스플릿 개수 옵션: -c 2
#$ hbase org.apache.hadoop.hbase.util.RegionSplitter DriverCarlnfo HexStringSplit -c 4 -f cf1

$ hbase org.apache.hadoop.hbase.util.RegionSplitter DriverCarlnfo HexStringSplit -c 2 -f cf1
=> CREATE, Table Name: default:DriverCarlnfo, procId: 5 completed 확인

 


스톰 Topology 배포

스톰 Topology 배포

1. 스톰에서 사용하는 자바 프로그램 소스를 미리 컴파일해서 패키징해 놓았다. 
파일의 위치는 C:/bigdata2nd—master/CH05/bigdata.smartcar.storm—1.0.jar
이 jar 파일을 Server02에 업로드한다.

FTP 클라이언트 파일질라 실행
업로드 경로: /home/pilot-pjt/working
C:/bigdata2nd—master/CH05/bigdata.smartcar.storm—1.0.jar 파일을 
Server02의 /home/pilot—pjt/working 디렉터리에 업로드


2. 업로드한 bigata.smartcar.storm-1.0Jar 파일에 포함된 스톰의 Topology 파일을 
   storm 명령을 통해 DriverCarlnfo라는 이름으로 배포한다.
   배포하기 전 스톰 Nimbus, Supervisor, Ui 서버가 정상 실행 중인지 확인

# 아래의 명령으로 스톰이 정상적으로 구동됐는지 확인한다.
$ service storm-nimbus status
$ service storm-supervisor status
$ service storm-ui status
모두 “-is running” 상태인지 확인한다. 파일럿 개발 환경에 따라 Running 시점은 차이가 날 수 있다.

$ service storm-nimbus start
$ service storm-supervisor start
$ service storm-ui start

[root@server02 working]# service storm-nimbus status
storm-nimbus is NOT running.
[root@server02 working]# service storm-nimbus start
Starting Storm nimbus daemon (storm-nimbus):

[root@server02 working]# service storm-nimbus status
storm-nimbus is running (pid is 12576).

[root@server02 working]# service storm-supervisor start
Starting Storm supervisor daemon (storm-supervisor):

[root@server02 working]# service storm-supervisor status
storm-supervisor is running (pid is 12765).

[root@server02 working]# service storm-ui start
Starting Storm ui daemon (storm-ui):

[root@server02 working]# service storm-ui status
storm-ui is running (pid is 12841).

스톰 UI에 접속해서 스톰의 중요 상태들을 모니터링할 수 있다.
URL: http://server02.hadoop.com:8088


$ cd /home/pilot-pjt/working
$ storm jar bigdata.smartcar.storm-1.0.jar com.wikibook.bigdata.smartcar.storm.SmartCarDriverTopology DriverCarlnfo
=> " o.a.s.StormSubmitter - Finished submitting topology: DriverCarlnfo" 확인


3. 스톰 Top이ogy가 정상적으로 배포됐는지 확인. 
    크롬 브라우저를 통해 아래의 스톰 관리자 UI로 접속해서
   Topology summary의 DriverCarlnfo라는 Topology가 활성화됐는지 확인.

URL: http://server02.hadoop.com:8088


[DriverCarlnfo Topology]# 클릭하고 들어가면 
Topology 전체뿐 아니라 앞서 설명한 
카프카一Spout, 
에스퍼—B이t, 
레디스—B이t 등의 상태를 상세히 모니터링할 수 있다. 

또한 페이지 중간 정도에 있는 Topology Visualization의 [Show Visu게ization] 버튼을 클릭하면 
버튼을 활성화하면 배포한 Top이ogy의 구조부터 
데이터 처리량을 실시간으로 모니터링할 수 있다.


04. 스톰 T이oplogy를 제거해야 할 경우 다음의 kill 명령을 이용.
      storm kill “배포 시 사용했던 Topology 이름”

$ storm kill "DriverCarlnfo"

또는 스톰 관리자 UI에서 해당 Topology의 상세 보기에서 [Kill] 버튼을 클릭해서 제거할 수 있다.
그런 다음 수정한 Topology 파일을 다시 업로드하고 storm 명령을 통해 재배포.

실시간 적재 파일럿 실행 4단계 - 실시간 적재 기능 테스트


로그 시뮬레이터 작동
Server02에 접속해서 DriverLogMain을 작동
2016년 1월 3일 10대의 스마트카 운전자의 정보만 생성해 테스트
$ cd /home/pilot-pjt/working
$ java -cp bigdata.smartcar.loggen-1.0.jar com.wikibook.bigdata.smartcar.loggen.DriverLogMain 20160103 10 &
#& 백그라운드 실행

로그가 생성됨과 동시에 플럼의 수집 이벤트가 작동하면 
플럼 一 카프카 一 스톰 一 HBase 순으로 데이터가 수집 및 적재

운전자의 실시간 로그가 정상적으로 발생하는지 확인
$ cd /home/pilot-pjt/working/driver-realtime-log
$ tail -f SmartCarDriverInfo.log


HBase 적재 데이터 확인

 

HBase에 적재 데이터 확인

1. HBase 셸의 co니nt 명령으로 실시간으로 적재되고 있는 운전자 정보를 확인.

$ hbase shell
$ hbase(main):001:0> count 'DriverCarlnfo'
=> DriverCarlnfo 테이블에 적재된 데이터의 로우 수를 1000 단위로 출력
=> 로우키 값이 “타임스탬프—리버스값 + 차량번호” 형식으로 적재된 것을 확인


2. 다음의 Scan 명령으로 DriverCarlnfo 테이블에 적재된 칼럼 기반 구조의 데이터. 
    scan 명령을 내리면 모든 데이터가 조회되므로 LIMIT 옵션으로 20개 데이터만 조회하자.

$ hbase(main):001:0> scan 'DriverCarlnfo', {LIMIT=>20}


표시된 데이터 가운데 특정 로우키 하나를 선택해서 Scan 명령의 조건절을 추가
$ hbase(main):001:0> scan 'DriverCarlnfo', {STARTROW=>'00001030106102-Z0020'z LIMIT=>1}


로우키를 역변환했으므로 
검색하고자 하는 날짜 조건인 “2016년 이월 03일”을 “30106102”로 바꿔서 조회
$ hbase(main):001:0> scan 'DriverCarlnfo', {COLUMNS=>['cf1:car_number''‘cf1:area_number'],FILTER=>"RowFilter(=,'regexstring:30106102') AND SingleColumnValueFilter( 'cf1' , 'area_number' , = , regexstring:D04' )"}



3. HBase 웹관리자에 접속해서 적재한 데이터가 앞서 실행했던 Pre-Split 명령에 의해
    3개의 HRegionServer로 골고루 분산 적재됐는지 확인.
   URL: http://server01.hadoop.com:16010/
   저사양 파일럿 환경: HBase를 Server02에 설치했으므로 http://server02.hadoop.com:16010/으로 접속

적재 안됨...

플럼에서 수집한 데이터(로그 파일 안에 들어있어)

=> 카프카로 넘겨

* 이 때 로그아웃되거나 카프카 작동안되면 HBase까지 못가...

 


레디스 클라이언트 애플리케이션 작동


FTP 클라이언트 파일질라 실행
업로드 경로: /home/pilot—pjt/working
C:/bigdata2nd—master/CH05/bigdata.smartcar.redis—1.0.jar 파일을 
Server02의 /home/pilot-pjt/working 경로에 업로드


Server02에 접속해서 레디스 클라이언트 애플리케이션을 실행
$ cd /home/pilot-pjt/working
$ java -cp bigdata.smartcar.redis-1.0.jar com.wikibook.bigdata.smartcar.redis.OverSpeedCarInfo 20160103


레디스에 과속 차량 정보까지 확인됐으면 로그 시뮬레이터를 종료
$ ps -ef I grep smartcar.log
$ kill -9 [pid] [pid]

 

레디스에 과속 차량 정보까지 확인됐으면 로그 시뮬레이터를 종료
$ ps -ef I grep smartcar.log
$ kill -9 [pid] [pid]



저사양 파일럿 환경: 수집/적재 서비스를 일시 정지

6장. 7장의 탐색/분석 단계를 진행할 때 수집/적재 기능이 항상 필요하지는 않다. 
파일럿 프로젝트를 원활하게 진행하기 위해 앞으로는 수집/적재 기능들을 일부 정지시켜가며 진행. 
관련 소프트웨어로는 플럼. 카프카. 스톰. 레디스, HBase 등. 

아래 명령으로 관련 수집/적재 기능을 정지.
  플럼 서비스 CM 홈 一 [Flume] —- [정지]

  카프카 서비스: CM 홈 一 [Kafka] — [정지]

- 스톰 서비스: Server02에 SSH로 접속한 후 다음 명령을 실행
$ service storm-ui stop
$ service storm-supervisor stop
$ service storm-nimbus stop

- 레디스 서비스: Server02에 SSH로 접속한 후 다음 명령을 실행
$ service redis_6379 stop

HBase 서비스: CM 홈 一 [HBase] — [정지]

 

 

 

 

'MLOps 개발자 양성과정 > bigdata' 카테고리의 다른 글

[Day-84]  (0) 2023.04.24
[Day-83]  (0) 2023.04.21
[Day-81] 빅데이터 이해하기/파일럿 프로젝트  (0) 2023.04.18