IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据离线处理数据项目(一) 网站日志文件数据采集 日志拆分 数据采集到HDFS并进行预处理 -> 正文阅读

[大数据]大数据离线处理数据项目(一) 网站日志文件数据采集 日志拆分 数据采集到HDFS并进行预处理

简介:

这篇写的是大数据离线处理数据项目的第一个流程:数据采集

主要内容:

1)利用flume采集网站日志文件数据到access.log

2)编写shell脚本:把采集到的日志数据文件拆分(否则access.log文件太大)、重命名为access_年月日时分.log。? 此脚本执行周期为一分钟

3)把采集到并且拆分、重命名的日志数据文件采集到HDFS上

4)将HDFS上的日志数据文件转移到HDFS上的预处理工作目录

1、采集日志数据文件并拆分日志文件

安装crontab(文章最后有crontab操作指令),需要切换到root用户操作:

yum install crontabs

编写拆解日志文件脚本

#!/bin/sh
logs_path="/home/hadoop/nginx/logs/"
pid_path="/home/hadoop/nginx/logs/nginx.pid"
filepath=${logs_path}"access.log"
echo $filepath
mv ${logs_path}access.log ${logs_path}access_$(date -d '-1 day' '+%Y-%m-%d-%H-%M').log
kill -USR1 `cat ${pid_path}`

其中:

logs_path是拆分后的日志文件存放的路径

pid_path是指向nginx运行的进程文件(存放了nginx的进程id)

?filepath表示想要进行拆分的日志文件的路径

注意:重命名中这里的-1是因为:这里是离线处理,即今天处理的是昨天的数据,所以名称就需要日期-1

输入crontab配置指令(1表示每分钟)

*/1 * * * * sh /home/hadoop/bigdatasoftware/project1/nginx_log.sh

重新启动crontab服务:

service crond restart

?重新载入配置使定时任务生效:

service crond reload

启动nginx,并访问nginx下的网页a.html和b.html

此时日志数据不断产生,并且存放在access.log文件中,然后进行拆分

成功采集到日志数据并成功拆分、重命名:??

注意被拆分后的access.log是空的:

2、 把拆分成功的日志文件采集到HDFS

在flume/job目录下新建配置文件

touch job/TaildirSource-hdfs.conf

编写flume配置文件:

agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
#监控一个目录下的多个文件新增的内容
agent1.sources.source1.type = TAILDIR
#通过 json 格式存下每个文件消费的偏移量,避免从头消费
agent1.sources.source1.positionFile = /home/hadoop/taildir_position.json
agent1.sources.source1.filegroups = f1
agent1.sources.source1.filegroups.f1 = /home/hadoop/nginx/logs/access_*.log

agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = host
agent1.sources.source1.interceptors.i1.hostHeader = hostname
#配置sink组件为hdfs
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path=hdfs://hadoop121:8020/weblog/flume-collection/%Y-%m-%d/%H-%M_%{hostname}
#指定文件名前缀
agent1.sinks.sink1.hdfs.filePrefix = access_log
#指定每批下沉数据的记录条数
agent1.sinks.sink1.hdfs.batchSize= 100
agent1.sinks.sink1.hdfs.fileType = DataStream
agent1.sinks.sink1.hdfs.writeFormat =Text
#指定下沉文件按1MB大小滚动
agent1.sinks.sink1.hdfs.rollSize = 1048576
#指定下沉文件按1000000条数滚动
agent1.sinks.sink1.hdfs.rollCount = 1000000
#指定下沉文件按30分钟滚动
agent1.sinks.sink1.hdfs.rollInterval = 30
#agent1.sinks.sink1.hdfs.round = true
#agent1.sinks.sink1.hdfs.roundValue = 10
#agent1.sinks.sink1.hdfs.roundUnit = minute
agent1.sinks.sink1.hdfs.useLocalTimeStamp = true

#使用memory类型channel
agent1.channels.channel1.type = memory
agent1.channels.channel1.capacity = 500000
agent1.channels.channel1.transactionCapacity = 600

# Bind the source and sink to the channel
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1

在flume目录下启动程序:

bin/flume-ng agent --conf conf/ --name agent1 --conf-file job/TaildirSource-hdfs.conf -Dflume.root.logger=INFO,console

然后再疯狂访问a.html、b.html就完事啦?

查看最终结果如下:

?

?

3、将日志数据文件转移到预处理工作文件目录中

在/home/hadoop/bigdatasoftware/project1目录下新建脚本文件:movetopreworkdir.sh

?

编写脚本:

#!/bin/bash

#
# ===========================================================================
# 程序名称:???? 
# 功能描述:???? 移动文件到预处理工作目录
# 输入参数:???? 运行日期
# 目标路径:???? /data/weblog/preprocess/input
# 数据源  :???? flume采集数据所存放的路径: /weblog/flume-collection
# 代码审核:???  
# 修改人名:
# 修改日期:
# 修改原因:
# 修改列表: 
# ===========================================================================

#flume采集生成的日志文件存放的目录
log_flume_dir=/weblog/flume-collection

#预处理程序的工作目录
log_pre_input=/data/weblog/preprocess/input


#获取时间信息
day_01="2013-09-18"
day_01=`date -d'-1 day' +%Y-%m-%d`
syear=`date --date=$day_01 +%Y`
smonth=`date --date=$day_01 +%m`
sday=`date --date=$day_01 +%d`


#读取日志文件的目录,判断是否有需要上传的文件
files=`hadoop fs -ls $log_flume_dir | grep $day_01 | wc -l`
if [ $files -gt 0 ]; then
hadoop fs -mv ${log_flume_dir}/${day_01} ${log_pre_input}
echo "success moved ${log_flume_dir}/${day_01} to ${log_pre_input} ....."
fi

执行前:

?

执行脚本:

运行成功并查看结果:

?

自此完成!~

crontab服务操作

启动服务:service crond start

关闭服务:service crond stop

重启服务:service crond restart

重新载入配置:service crond reload

查看crontab服务状态:service crond status

手动启动crontab服务:service crond start

查看crondtab服务是否已设置为开机启动,执行命令:chkconfig --list

加入开机自启动:chkconfig --level 35 crond on

进入编辑命令:crontabs -e

进入查看运行指令:crontabs -l

删除指令:crontabs -r

配置说明

基本格式:
*  *  *  *  *  command?
分 ?时 ?日 ?月 ?周 ? ? ? 命令?
第1列表示分钟1~59 每分钟用*或者 */1表示?
第2列表示小时0~23(0表示0点) 7-9表示:8点到10点之间
第3列表示日期1~31?
第4列表示月份1~12?
第5列标识号星期0~6(0表示星期天)?
第6列要运行的命令?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:46:35  更:2021-12-01 17:46:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:08:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码