Flume 의 - Nginx 로 그 를 감청 하여 Hive 표 로 보 냅 니 다.
환경 준비
우선, Hadoop 환경 구축 에 관 해 서 는 블 로그 의 을 참고 하 실 수 있 습 니 다. Nginx 의 설치 와 설정 에 관 한 것 은 블 로그 의, Hive 의 설치 와 설정 을 참고 하 실 수 있 습 니 다.'Hive 의 - hive 로 컬 모드 설정, my sql 데이터베이스 - Hive 2.3.3 + Hadoop 2.9.0 + MySQL 5.7.18' 과 연결 합 니 다.Flume 의 설 치 는 비교적 간단 합 니 다. Flume 을 다운로드 한 후 압축 을 풀 고 시스템 환경 변 수 를 설정 하면 됩 니 다.Flume 을 다운로드 하면 아래 명령 을 입력 할 수 있 습 니 다.
wget http://mirror.bit.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
2. 서비스 시작
# Hadoop
start-dfs.sh
start-yarn.sh
# Nginx
/usr/local/nginx/sbin/nginx
# Hive
hive
3. Hive 데이터베이스 와 테이블 구축
1. 다음 명령 을 입력 하여 hive 라 는 이름 을 만 듭 니 다.nginx_log 데이터베이스.
hive> create database hive_nginx_log;
2. Nginx 의 로그 형식 을 보십시오. 다음 과 같 습 니 다.
192.168.175.10 - - [31/Jul/2019:21:19:39 +0800] "GET /test/sharding HTTP/1.1" 200 798 "http://192.168.175.200/" "Mozilla/5.0 (Windows NT 10.0; WOW64) Forefix/537.36 (KHTML, like Gecko) Forefix/65.0.3325.181 Forefix/537.36"
3. 데이터베이스 에 hivenginx_log 에서 데이터 시트 nginx 만 들 기log。
use hive_nginx_log;
CREATE TABLE nginx_log(
client_ip STRING,
remote_login_name STRING,
remote_oauth_user STRING,
request_time_utf STRING,
request_method_url STRING,
status_code STRING,
send_bytes_size STRING,
source_access STRING,
client_info STRING)
partitioned by (dt string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
)
STORED AS TEXTFILE;
4. 새로 만 든 Flume 프로필 flume - hiv - nginx - log. conf, Nginx 로 그 를 감청 하고 Nginx 로 그 를 Hive 표 nginx 로 보 냅 니 다.로그 중.
# agent , source、channel、sink
myagent.sources = r1
myagent.channels = c1
myagent.sinks = k1
# Source
myagent.sources.r1.type = exec
myagent.sources.r1.channels = c1
myagent.sources.r1.deserializer.outputCharset = UTF-8
#
myagent.sources.r1.command = tail -F /usr/local/nginx/logs/access.log
#
myagent.sources.s1.deserializer.maxLineLength =1048576
myagent.sources.s1.fileSuffix = .DONE
myagent.sources.s1.ignorePattern = access(_\d{4}\-\d{2}\-\d{2}_\d{2})?\.log(\.DONE)?
myagent.sources.s1.consumeOrder = oldest
myagent.sources.s1.deserializer = org.apache.flume.sink.solr.morphline.BlobDeserializer$Builder
myagent.sources.s1.batchsize = 5
# channel
myagent.channels.c1.type = memory
myagent.channels.c1.capacity = 10000
myagent.channels.c1.transactionCapacity = 100
# sink
myagent.sinks.k1.type = hdfs
#%y-%m-%d/%H%M/%S
# hive
myagent.sinks.k1.hdfs.path = hdfs://binghe100:9000/user/hive/warehouse/test_flume.db/nginx_log/%Y-%m-%d_%H
myagent.sinks.k1.hdfs.filePrefix = nginx-%Y-%m-%d_%H
myagent.sinks.k1.hdfs.fileSuffix = .log
myagent.sinks.k1.hdfs.fileType = DataStream
#
myagent.sinks.k1.hdfs.rollCount = 0
#HDFS 128M
myagent.sinks.k1.hdfs.rollSize = 2914560
myagent.sinks.k1.hdfs.useLocalTimeStamp = true
# source、channel、sink
myagent.sources.r1.channels = c1
myagent.sinks.k1.channel = c1
5. Flume 시작
flume-ng agent --conf conf --conf-file /usr/local/flume-1.9.0/conf/flume-hive-nginx-log.conf --name myagent -Dflume.root.logger=INFO,console
6. Nginx 를 방문 하여 브 라 우 저 에 입력http://192.168.175.200시작 후 출력 에 접근 하 는 정 보 는 다음 과 같 습 니 다.
hdfs://binghe200:9000/user/hive/warehouse/test_flume.db/nginx_log/2019-07-31_23/nginx-2019-07-31_23.1564589089324.log
7. Flume 을 시작 할 때 출력 하 는 정 보 를 통 해 알 수 있 듯 이 현재 Hive 표 의 파 티 션 을 / user / hiv / warehouse / test 로 가리 킬 수 있 습 니 다.flume.db/nginx_log/2019-07-31_23 목록.그러므로 Hive 명령 행 에서 다음 명령 을 수행 합 니 다.
ALTER TABLE nginx_log ADD IF NOT EXISTS PARTITION (dt='2019-07-31_23') LOCATION '/user/hive/warehouse/test_flume.db/nginx_log/2019-07-31_23/';
8. Hive 표 nginx 보기로그 의 데이터
hive> SELECT * FROM nginx_log;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Flume Processorsactive 상태 프로세스가 죽어야 다른 작업이 바뀔 수 있습니다.그 많은sink가 도대체 누가 먼저 일을 하는지, 권중에 따라 누구의 권중이 높은지, 누가 먼저 일을 하는지, 일반적인 고장 전이를 하면 2개sink...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.