🎁 본 글은 실무로 '배우는 빅데이터기술' 책을 따라해보고 실행하여보는 과정을 기록한 글이다.
🎁 빅데이터 처리의 전체적인 흐름과 과정을 학습하기 쉬우며 빅데이터에 관심있는 사람들에게 추천한다.
Oozie 를 이용하여 스케줄링을 해볼 것이다. (server02)
cd /home/pilot-pjt/working
프로세스를 하나 실행한다. 스마트가의 상태 로그를 만들어준다.
java -cp bigdata.smartcar.loggen-1.0.jar com.wikibook.bigdata.smartcar.loggen.CarLogMain 20240614 100 &
데이터가 쌓이는 위치에 가서 확인 해 보자.
cd /home/pilot-pjt/working/SmartCar
tail -f SmartCarStatusInfo_20240614.txt
데이터가 계속 쌓이면 시스템이 느려질 수 있으니 10분 후에 프로세스를 종료해줄 것이다.
ps -ef | grep smartcar.log
kill -9 XX XX XX
파일을 복사 해주자.
mv /home/pilot-pjt/working/SmartCar/SmartCarStatusInfo_20240614.txt /home/pilot-pjt/working/car-batch-log/
목록을 조회 해 보자.
hdfs dfs -ls -R /pilot-pjt/collect/car-batch-log/
스마트카 운전자의 운행 로그를 만들어보자.
cd /home/pilot-pjt/working
java -cp bigdata.smartcar.loggen-1.0.jar com.wikibook.bigdata.smartcar.loggen.DriverLogMain 20240614 100 &
데이터는 이곳에 저장된다.
cd /home/pilot-pjt/working/driver-realtime-log
tail -f SmartCarDriverInfo.log
10분 후 아까와 같이 해당 프로세스를 죽여주자
Hue Hbase 에서 확인 해 볼 것이다. (에러가 나면 HBase를 재시작 해주자)
오늘 14일자 데이터가 없다. 뭔가가 이상하다. 처음부터 데이터를 생성해주자.
어제 jar 파일을 수정해서 다시 만들었는데 책에서 주는 jar file을 사용해서 다시 해 보도록 하겠다.
bigdata.smartcar.storm-1.0.jar 을 아래에 업로드 하였다.
cd /home/pilot-pjt/working/
스톰 서비스를 재시작 해보자
service storm-nimbus restart
service storm-supervisor restart
service storm-ui restart
service storm-nimbus status
service storm-supervisor status
service storm-ui status
사용하던 스톰을 죽이고, 새로운 파일로 실행 시킨다.
storm kill DriverCarInfo
cd /home/pilot-pjt/working
storm jar bigdata.smartcar.storm-1.0.jar com.wikibook.bigdata.smartcar.storm.SmartCarDriverTopology DriverCarInfo
원래있던 프로세스를 죽이자 (있으면)
ps -ef | grep smartcar.log
kill -9 XX XX
자료를 생성해 보자.
cd /home/pilot-pjt/working
java -cp bigdata.smartcar.loggen-1.0.jar com.wikibook.bigdata.smartcar.loggen.CarLogMain 20240615 100 &
데이터가 생성 되었는지 확인 해 보자.
cd /home/pilot-pjt/working/SmartCar
tail -f SmartCarStatusInfo_20240615.txt
데이터를 옮기자.
mv /home/pilot-pjt/working/SmartCar/SmartCarStatusInfo_20240615.txt /home/pilot-pjt/working/car-batch-log/
플럼이 수집을 잘 하는지 확인 해주자.
cd /var/log/flume-ng
tail -f /var/log/flume-ng/flume-cmf-flume-AGENT-server02.hadoop.com.log
hdfs dfs -ls -R /pilot-pjt/collect/car-batch-log/wrk_date=20240615
진행할때
org.apache.flume.source.SpoolDirectorySource: The channel is full
이라는 문구가 많이 나왔다.
server02 를 재시작 해주고 storm 서비스들을 재 시작해준다. 그리고 혹시몰라 flume 서비스도 재 시작 해주었다.
그러고 플럼이 잘 돌아가는지 확인 하였다.
아직 무슨 내용인지는 잘 모른다.
org.apache.flume.sink.hdfs.HDFSEventSink: Writer callback called.
이라는 문구가 나오면 flume 이 데이터를 제대로 수집하고 있다고 하는데 나는 아무리 찾아봐도 없지만
15일으로 지정한 데이터가 Hue - HBase 에서 나타났다.
과속차량 조회
redis-cli
smembers 20240615
오류가 있어서 많이 늦어버렸다. 이제 정말 Oozie 를 사용 해 보자.
사용하지 않을 Spark, Flume, Kafka 를 Cloudera에서 정지.
Storm 관련 서비스들을 정지
service storm-nimbus stop
service storm-supervisor stop
service storm-ui stop
redis 관련 서비스 종료
service redis_6379 stop
(고사양 컴퓨터라면 안 꺼도 괜찮을지도..)
Hue - 메뉴 문서에 들어가서 hive_script 폴더를 만들어준다.
그 밑에 다시 5개의 폴더를 만들어준다.
workflow
-hive_script
--subject1
--subject2
--subject3
--subject4
--subject5
그 다음 쿼리로 이동하여 다음을 입력하여 준다.
create table if not exists Managed_SmartCar_Status_Info (
car_number string,
sex string,
age string,
marriage string,
region string,
job string,
car_capacity string,
car_year string,
car_model string,
tire_fl string,
tire_fr string,
tire_bl string,
tire_br string,
light_fl string,
light_fr string,
light_bl string,
light_br string,
engine string,
break string,
battery string,
reg_date string
)
partitioned by( biz_date string )
row format delimited
fields terminated by ','
stored as textfile;
성공 후 아래 쿼리도 입력 해 본다. 변수에 20240614 값을 입력 해 준다.
alter table SmartCar_Status_Info
add if not exists partition(wrk_date='${working_day}');
set 은 자료가 많으면 자동으로 파티션을 나누어 준다.
두번째 set 은 partition key가 자동으로 생성 된다.
실행 시킬때 주의 점이 있는데 Ctrl + a 로 모든 라인을 드래그하여 지정해 준 후 실행 해 주어야 한다.
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table Managed_SmartCar_Status_Info partition(biz_date)
select
t1.car_number,
t1.sex,
t1.age,
t1.marriage,
t1.region,
t1.job,
t1.car_capacity,
t1.car_year,
t1.car_model,
t2.tire_fl,
t2.tire_fr,
t2.tire_bl,
t2.tire_br,
t2.light_fl,
t2.light_fr,
t2.light_bl,
t2.light_br,
t2.engine,
t2.break,
t2.battery,
t2.reg_date,
substring(t2.reg_date, 0, 8) as biz_date
from SmartCar_Master_Over18 t1 join SmartCar_Status_Info t2
on t1.car_number = t2.car_number and t2.wrk_date = '${working_day}';
데이터를 확인 해 보자.
select *
from Managed_SmartCar_Status_Info
limit 10;
아까 만든 폴더에 파일로 만들어서 저장을 해줘야 하는데 실행 만 해 보았다. (Oozie 로 실행 예약을 해두기 위해)
suject1 에 아래의 문장을 해당 이름으로 저장 해 준다.
파일이름 : create_table_managed_smartcar_status_info.hql
create table if not exists Managed_SmartCar_Status_Info (
car_number string,
sex string,
age string,
marriage string,
region string,
job string,
car_capacity string,
car_year string,
car_model string,
tire_fl string,
tire_fr string,
tire_bl string,
tire_br string,
light_fl string,
light_fr string,
light_bl string,
light_br string,
engine string,
break string,
battery string,
reg_date string
)
partitioned by( biz_date string )
row format delimited
fields terminated by ','
stored as textfile;
아래 내용들도 저장 해 준다.
파일 이름 : alter_partition_smartcar_status_info.hql
alter table SmartCar_Status_Info
add if not exists partition(wrk_date='${working_day}');
파일이름 : insert_table_managed_smartcar_status_info.hql
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table Managed_SmartCar_Status_Info partition(biz_date)
select
t1.car_number,
t1.sex,
t1.age,
t1.marriage,
t1.region,
t1.job,
t1.car_capacity,
t1.car_year,
t1.car_model,
t2.tire_fl,
t2.tire_fr,
t2.tire_bl,
t2.tire_br,
t2.light_fl,
t2.light_fr,
t2.light_bl,
t2.light_br,
t2.engine,
t2.break,
t2.battery,
t2.reg_date,
substring(t2.reg_date, 0, 8) as biz_date
from SmartCar_Master_Over18 t1 join SmartCar_Status_Info t2
on t1.car_number = t2.car_number and t2.wrk_date = '${working_day}';
Workflow를 만들어 보자
working_day=${today}
세번째 insert 스케쥴러도 추가해주면 아래와 같은 모양이 된다.
매개 변수도 추가 해 준다.
Workflow 이름 변경 후 저장을 하자.
Hue 메인 로고를 눌러보면 워크플로우가 저장이 잘 된 것을 확인 할 수 있다.
예약을 해주자
'Subject1 - 예약' 이라는 이름으로 예약을 해줄것이다.
Workflow 선택을 눌러서 아까 저장한 Workflow를 저장 해 준다.
시간을 지정해준다.
몇일, 월, 년 같은 단위와 시간을 지정하고
언제부터 언제까지 실행할지 선택한다.
매개변수를 추가 해 준다.
당일 매개변수
${coord:formatTime(coord:dateTzOffset(coord:normalTime(),"Asia/Seoul"),'yyyyMMdd')}
아래와 같이 예약 된 것을 볼 수 있다.
즉시 실행을 하려면 Workflow에 매개변수를 다음과 같이 변경 해 준다.
working_day=20240614
변경 후 실행 버튼 클릭
모의 테스트를 해볼수도 있다.
제출을 눌러보자
다음과 같이 실행 되는 모습을 볼 수 있다.
Job 을 클릭해보면 현재 어떤 내용이 실행 되는지 확인 할 수 있다.
다되면 아래와 같이 초록색 100% 가 된 것을 볼 수 있다.
Hive 쿼리에서 데이터를 확인 해보자.
select *
from managed_smartcar_status_info
limit 100;
'빅데이터' 카테고리의 다른 글
[빅데이터] 임팔라, 스쿱, 머하웃 설치 With Cloudera, 제플린 설치 With Linux (0) | 2024.06.18 |
---|---|
[빅데이터] Oozie Workflow (0) | 2024.06.17 |
[빅데이터] 스파크를 이용한 데이터 셋 탐색 (0) | 2024.06.14 |
[빅데이터] 문제 풀이 Hive 를 이용한 데이터 탐색 (0) | 2024.06.14 |
[빅데이터] Hue 에서 Hive 명령문 사용. (1) | 2024.06.13 |