Flume 의 - Nginx 로 그 를 감청 하여 Hive 표 로 보 냅 니 다.

4333 단어 Flume하 둡 생태
전재 출처 를 밝 혀 주 십시오:https://blog.csdn.net/l1028386804/article/details/98945268
환경 준비
우선, 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;

좋은 웹페이지 즐겨찾기