网站流量日志分析--工作流调度--预处理调度--程序打包 job 编写 | 学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习网站流量日志分析--工作流调度--预处理调度--程序打包 job 编写

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第五阶段):网站流量日志分析--工作流调度--预处理调度--程序打包 job 编写】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/697/detail/12250


网站流量日志分析--工作流调度--预处理调度--程序打包 job 编写

数据预处理定时调度

数据预处理模块按照数据处理过程和业务需求,可以分为三个步骤即三个 MR 程序:数据预处理清洗,点击流模型之 pageviews,点击流模型之 visits。

并且这三个步骤之间存在明显的依赖关系,必须先把数据处理清洗好才可以生成 pageviews 模型,必须有了 pageviews 模型才可以生成 visits 模型。

而且这个预处理操作的大概会是每次周期性的执行,使用 Azkaban 定时调度执行非常方便。

怎样进行定时执行:

1.预处理 MapReduce 程序,打成可以执行的 jar 包

首先打开开发工具 idea,里边有三个之前已经写好的预处理程序,分别是preprocess,pageviews,visits。使用 mavenue 插件进行打包。

在 pom 中有一个 Maven jar plugin 指定运行组类的全路径,双击就可以打成一个可运行的 jar 包。

打包操作:

首先在桌面上创建一个新的文件夹,用来保存打好的 jar 包,命名为 weblog_preprocess。

(1)首先打第一个 jar 包-预处理的jar包

选择预处理的组类,要注意的是我们当下的这个路径是写死的,而且是本地路径,这时候我们把上面这两个参数释放开,并且把下面参数注释掉。

参数需要运行的时候动态的传参进来,输入路径 args[0] 输出路径 args[1] 这样显得程序比较灵活,如果写死,后面打包会比较麻烦。

image.png 

确保编写无误和其他地方没有错误之后,选择 main 方法所在的全路径程序入口,选择它运行,右键选择 Copy Reference 全路径复制下来。

切换到插件中,把 mainclass 替换掉,这就是我们运行组类,运行 jar 包时就可以找到这个组类,这个组类中包含 main 方法,从而找到程序入口。

打开右边 idea,点击 MavenProject,选择 Lifecycle 中的的 package,打到我们工程 Tagret 目录下-双击 package,此时就可以编译我们的 jar 包。

Target 目录下找到 example-mr-1.2jar 这就是刚才所打的预处理 jar 包。

将 example-mr-1.2jar 复制到桌面的 weblog_preprocess 文件夹中。为了方便可将其重新命名为 weblog_preprocess。

(2)打第二个 jar 包,点击流模型 -pageviews 模型。

选择 pageviews 模型运行的组类,路径不要写死,把上面这两个参数给释放开来,并且把下面参数注释掉,还是需要我们运行的时候动态的传参的形式得到输入和输出的路径。其他和之前保持一致。

拷贝 main 方法所在的全部路径,打开插件,替换。此过程注意要细心观察替换是否正确。

选择 MavenProject,选择 Lifecycle 中的 clean,再选择 package 重新打包,这样就得到了第二个打包程序。

检查没问题选择 Target 目录下找到 example-mr-1.2jar 这就是刚才所打的 jar 包。

将 example-mr-1.2jar 复制到桌面的 weblog_preprocess 文件夹中将其重新命名为 weblog_click_pageviews。

3.最后一个 jar 包-点击流模型 -visits 模型

选择 visits 模型运行的组类,代码本地测试没有问题后,不需要修改,重点是路径。

把上面这两个参数给释放开来,并且把下面参数注释掉,还是需要我们运行的时候动态的传参的形式得到输入和输出的路径。

找到 main 方法所在内的全部路径,选择 clickstreamVisit,右键选择 Copy Reference 全路径复制下来。打开插件进行替换。

选择 MavenProject,选择 Lifecycle 中的的 clean,清除一下刚才编译信息,再选择 package 重新打包,这样就得到了新的打包程序。

检查没问题选择 Target 目录下找到新的 example-mr-1.2jar 这就是刚才所打的 jar 包。

将 example-mr-1.2jar 复制到桌面的 weblog_preprocess 文件夹中。将其重新命名为 weblog_click_visit。

这样我们就完成了预处理阶段三个 MR 程序,这些MR程序运行时候会存在一个非常明显的前后依赖关系。

强调:

预处理阶段三个程序打成可以执行的 jar 包,需要指定 main class,里边输入输出路径不要写死。

配置 Azkaban 的 job 信息,尤其需要注意设置的依赖和输入输

出路径对应问题。设置依赖就是先预处理再去 pageviews 再 visit;输入输出对应问题就是预处理的输出是 pageviews 的输入,pageviews 输出是 visit 的输入。

2.为了显示这种依赖关系,打开参考资料,任务调度中,选择 weblog_workflow.rar,也可以打开软件中的 Azkaban,选择 jobs,感受如何编写。

选择 foobar,里边有三个需要设置依赖的参数。复制这三个参数。

(1)首先执行 weblog_preprocess

复制一下,重命名为 weblog_preprocess。其文件类型是 TaskScheduler,是任务的一个调度。右键编辑它。

先编辑它的名字为 weblog_preprocess.job

类型是 command,执行 MR 程序。打开配置文件寻找相关 mr 配置参数属性。课程资料,选择软件 -Azkaban-mr, 借鉴一个,随便复制一个。

进行修改。先进行 Hadoop 的环境变量的修改。打开服务器,使用 which 命令: which hadoop ,复制路径,在插件中替换。

再把 jar 包替换为 weblog_preprocess.jar,这个 jar 包需要两个程序,输入路径和输出路径,为了方便,自己来手动创建一个目录,回到根目录下,自己创建目录,放在 input 路径下,把写好的复制在后边,把参数放在后面就会动态的传参过去。

输出路径写为 preprocess

weblog _preprocess.job

type=command

command=/export/servers/hadoop-2.7.5/bin/Hadoop  jar weblog_preprocess.jar /input/preprocess

(2)预处理完成后,接着写第二个执行点击流模型的 pageviews,weblog_click_pageviews.job

编辑一下它的名字 weblog_click_pageviews.job

命令是 command,需要加一个依赖,dependencies, 依赖于 weblog_ preprocess,复制之前的 mr 配置参数。

复制之前的 Command,但是它所执行的 jar 包需要进行修改,选择weblog_click_pageviews.jar这个 jar 包进行替换。

此时要注意:输入是 preprocess,输出是 pageviews。

weblog_click_pageviews.job

type=command

dependencies= weblog _preprocess

command=/export/servers/hadoop-2.7.5/bin/Hadoop  jar weblog_click_pageviews. jar /preprocess /pageviews

(3)第三个执行的是点击流模型 -visit 模型。

重命名为 weblog_click_visit。

打开文件,右键编辑。

编辑一下它的名字 weblog_click_.job

image.png

命令是command,dependencies, 依赖于 weblog_ click _ pageviews,复制之前的mr 配置参数。

复制之前的 Command 进行修改。

它所执行的 jar 包需要进行修改,选择 weblog_click_visit.job.jar 这个 jar 包进行替换。

此时要注意:

输入路径是上一个的输出 pageviews,输出是 visit。

weblog_click_visit.job

type=command

dependencies= weblog_click_pageviews

command=/export/servers/hadoop-2.7.5/bin/Hadoop  jar weblog_click_visit. jar /pageviews/ visit

打包之前再次进行确认是否正确。此时就完成了 Azkaban 的配置。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
391 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
1月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
197 0
|
3月前
|
jenkins 持续交付
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
|
3月前
|
Linux API
在Linux中,程序产生了库日志虽然删除了,但磁盘空间未更新是什么原因?
在Linux中,程序产生了库日志虽然删除了,但磁盘空间未更新是什么原因?
|
3月前
|
数据采集 监控 Kubernetes
Job类日志采集问题之iLogtail以减小容器发现和开始采集的延时如何优化
Job类日志采集问题之iLogtail以减小容器发现和开始采集的延时如何优化
|
3月前
|
数据采集 Kubernetes Java
Job类日志采集问题之在日志中添加容器的元信息标签,如何操作
Job类日志采集问题之在日志中添加容器的元信息标签,如何操作
|
3月前
|
存储 容器
Job类日志采集问题之DaemonSet采集方式的参数以减小采集延时如何调整
Job类日志采集问题之DaemonSet采集方式的参数以减小采集延时如何调整
|
3月前
|
容器
Job类日志采集问题之ECI产品采集方式对于弹性扩缩容是如何支持的
Job类日志采集问题之ECI产品采集方式对于弹性扩缩容是如何支持的
|
3月前
|
存储 数据采集 容器
Job类日志采集问题之DaemonSet采集方式在Job日志采集上如何表现
Job类日志采集问题之DaemonSet采集方式在Job日志采集上如何表现
|
3月前
|
存储 Kubernetes 数据处理
Job类日志采集问题之为什么Job容器的日志采集要考虑容器发现速度和开始采集延时,如何理解
Job类日志采集问题之为什么Job容器的日志采集要考虑容器发现速度和开始采集延时,如何理解