빅데이터

[빅데이터] 실시간 적재 기능 구현 HBase, Redis

allempty_sheep 2024. 6. 12. 16:58
반응형
🎁 본 글은 실무로 '배우는 빅데이터기술' 책을 따라해보고 실행하여보는 과정을 기록한 글이다.

🎁 빅데이터 처리의 전체적인 흐름과 과정을 학습하기 쉬우며 빅데이터에 관심있는 사람들에게 추천한다.

 

HBase 테이블 생성

DriverCarInfo 라는 이름의 테이블을 생성 할 것이다.

hbase org.apache.hadoop.hbase.util.RegionSplitter DriverCarInfo HexStringSplit -c 2 -f cf1

 

CREATE, Table Name: default:DeiverCarInfo 라는 명령어가 보일 것이다.

테이블 확인은 16010 포트에서 조회 할 수 있다.

 

파일을 하나 업로드 해 준다.

cd /home/pilot-pjt/working

 

 

스톰을 이용하여 배포

storm jar bigdata.smartcar.storm-1.0.jar com.wikibook.bigdata.smartcar.storm.SmartCarDriverTopology DriverCarInfo

 

다음 메세지가 나오면 완료 된 것이다.

 

 

http://server02.hadoop.com:8088/
Topology Summary 에서
DriverCarInfo 이름이 조회 되면 된다.

 

스마트카 정보 생성을 확인 해보자

cd /home/pilot-pjt/working
java -cp bigdata.smartcar.loggen-1.0.jar com.wikibook.bigdata.smartcar.loggen.DriverLogMain 20240612 10 &

 

데이터가 제대로 만들어지고 있는지 확인 해본다.

cd /home/pilot-pjt/working/driver-realtime-log
tail -f SmartCarDriverInfo.log

 

현제 실행된 데이터들은 HBase로 들어가고 있을 것이다 확인 해보자

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

Topology Summary 에서
DriverCarInfo 이름을 눌러본다.

Show Visualization 을 클릭한다.

데이터가 쌓이는것을 간략적으로 보여준다.

쉘에 들어가서 데이터들을 확인 할 수 있다.

hbase shell
count 'DriverCarInfo'

48614개의 데이터가 생성되었다.

 

조건을 걸어서 20개의 데이터만 조회 해보자

scan 'DriverCarInfo',{LIMIT=>20}

20개의 데이터만 뽑아 와본다.

 

너무 많은 데이터가 쌓이지 않게 프로세스를 정지 할 수도 있다.

ps -ef | grep smartcar.log

kill -9 XX

 

scan 으로 데이터를 조회하는 방법은 여러가지가 있다.

특정한 번호의 데이터만 조회 해보자

scan 'DriverCarInfo',{STARTROW=>'00001021604202-Z0008',LIMIT=>1}

 

지역번호가 F07 인 지역의 차 운행 정보 중 차 번호와 지역 번호를 가져온다.

scan 'DriverCarInfo',{COLUMNS=>['cf1:car_number','cf1:area_number'],FILTER=>"RowFilter(=,'regexstring:21604202') AND SingleColumnValueFilter('cf1','area_number',=,'regexstring:F07')"}

 

 

Redis 데이터 확인

redis-cli
smembers 20240612

 

오늘일자 과속 차량 정보를 10초간격으로 가져오는 프로그램을 실행 해 볼 것이다.

Redis 에 사용할 jar 파일을 업로드하자

cd /home/pilot-pjt/working

 

java -cp bigdata.smartcar.redis-1.0.jar com.wikibook.bigdata.smartcar.redis.OverSpeedCarInfo 20240612

 

다음과 같이 실시간 정보를 10초 간격으로 계속 가져온다.