Hadoop Eco 스케줄링을 이용한 적재된 웹서버 로그 분석
Hadoop Eco 스케줄링 기능을 이용하여 Object Storage에 적재되는 로그를 주기적으로 분석하는 작업을 자동화합니다. 하둡의 효율적인 리소스 활용을 위하여 원하는 상황에서 하둡 클러스터 실행을 간편하게 설정할 수 있습니다.
- 예상 소요 시간: 60분
- 사용자 권장 환경
- 운영 체제: MacOS, Ubuntu
- Region: kr-central-2
- 참고 문서
사전 준비
실습을 진행하기 위해서는 액세스 키와 VM 접근용 키 페어 확인이 필요합니다.
Step 1. Object Storage에 업로드된 로그 파일 확인하기
문서에 따라 핸즈온 진행에 필요한 로그 파일 예제를 생성합니다. 해당 핸즈온 튜토리얼을 먼저 진행한 뒤, Object Storage에 예제 로그 파일이 정상적으로 업로드되었는지 확인합니다.
Step 2. Data Catalog 리소스 생성
Data Catalog는 카카오클라우드 내 조직과 사용자 데이터 자산을 파악하고 효율적으로 관리할 수 있도록 도와주는 완전 관리형 서비스입니다. 이 단계에서는 Data Catalog를 구성하는 Catalog, Database, Table을 생성해야 합니다.
-
Catalog 는 VPC 내 완전 관리형 중앙 리포지토리로, Data Catalog 서비스를 이용하기 위해 먼저 Catalog를 생성합니다.
항목 설정값 이름 hands_on VPC ${any}
Subnet ${public}
-
생성한 카탈로그의 상태가 Running이 되면 Database를 생성합니다. Data Catalog의 데이터베이스는 테이블을 저장하는 컨테이너입니다.
항목 설정값 카탈로그 hands_on 이름 hands_on_db 경로:버킷 hands-on 경로:디렉터리 nginx -
Data Catalog의 메타데이터인 Table을 생성합니다.
- 오리진 데이터 테이블
- 스키마
항목 설정값 데이터베이스 hands_on_db 테이블 이름 handson_log_original 데이터 저장 경로: 버킷 이름 hands-on 데이터 저장 경로: 디렉터리 log/nginx 데이터 타입 CSV 파티션 키 칼럼 번호 필드 이름 데이터 타입 off 1 log string on - date_id string on - hour_id string
Step 3. Hadoop Eco 리소스 생성
Hadoop Eco는 오픈 소스 프레임워크를 이용하여 분산 처리 작업을 실행하기 위한 카카오클라우드 서비스입니다. Hadoop Eco 리소스를 생성하는 방법은 다음과 같습니다.
-
카카오클라우드 콘솔에서 Hadoop Eco 서비스를 선택합니다. [클러스터 만들기] 버튼을 클릭한 뒤 아래 정보에 해당하는 클러스터를 생성합니다.
항목 설정값 클러스터 이름 hands-on 클러스터 버전 Hadoop Eco 2.0.0 클러스터 타입 Core Hadoop 클러스터 가용성 표준 관리자 아이디 ${ADMIN_ID}
관리자 비밀번호 ${ADMIN_PASSWORD}
-
마스터 노드와 워커 노드 인스턴스를 설정합니다.
구분 마스터 노드 워커 노드 인스턴스 개수 1개 2개 인스턴스 유형 m2a.xlarge m2a.xlarge 볼륨 크기 50GB 100GB -
키 페어 및 네트워크 구성(VPC, Subnet)은 사용자가 ssh 접속을 진행할 수 있는 환경에 맞게 설정합니다. 다음으로
새로운 시큐리티 그룹 생성
을 선택합니다. -
스케줄링 설정을 열고 hive를 선택한 다음 쿼리를 입력합니다. 쿼리는 nginx 기본 포맷 로그를 정제하고 사용자 요청을 연산하여 결과를 저장합니다.
-- Set the database
USE hands_on_db;
-- Repair the table
MSCK REPAIR TABLE handson_table_original;
-- Create empty refined_json table with JSON format using JsonSerDe
CREATE EXTERNAL TABLE IF NOT EXISTS refined_json (
remote_addr STRING,
request_method STRING,
request_url STRING,
status STRING,
request_time STRING,
day_time STRING)
PARTITIONED BY (date_id STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe'
STORED AS TEXTFILE;
-- Populate refined_json table
INSERT INTO refined_json PARTITION (date_id)
SELECT
split(log, ' ')[0] AS remote_addr,
split(log, ' ')[5] AS request_method,
split(log, ' ')[6] AS request_url,
split(log, ' ')[8] AS status,
split(log, ' ')[9] AS request_time,
regexp_extract(split(log, ' ')[3], '\\d{2}:\\d{2}:\\d{2}', 0) AS day_time,
date_id
FROM
handson_table_original;
-- Create empty urlcount table with JSON format using JsonSerDe
CREATE EXTERNAL TABLE IF NOT EXISTS urlcount (
request_url STRING,
status STRING,
count BIGINT)
PARTITIONED BY (date_id STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe'
STORED AS TEXTFILE;
-- Populate urlcount table
INSERT INTO urlcount PARTITION (date_id)
SELECT
request_url,
status,
count(*) AS count,
date_id
FROM
refined_json
GROUP BY
request_url,
status,
date_id; -
클러스터를 아래 조건에 맞게 설정합니다.
항목 설정값 HDFS 블록 크기 128 HDFS 복제 개수 2 클러스터 구성 설정 [직접 입력] 선택 후 아래 코드 입력 클러스터 구성 설정값 - Object Storage 연동{
"configurations": [
{
"classification": "core-site",
"properties": {
"fs.swifta.service.kic.credential.id": "${ACCESS_KEY}",
"fs.swifta.service.kic.credential.secret": "${ACCESS_SECRET_KEY}"
}
}
]
} -
모니터링 에이전트, Data Catalog 서비스 연동 등을 설정합니다.
항목 설명 모니터링 에이전트 설치 설치 안함 서비스 연동 Data Catalog 연동 데이터 카탈로그 이름 [hands_on]에서 생성한 [hands_on] 선택 -
입력한 정보를 확인한 뒤 클러스터를 생성합니다.