开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第五阶段):网站流量日志分析--工作流调度--预处理调度--程序打包 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] 这样显得程序比较灵活,如果写死,后面打包会比较麻烦。
确保编写无误和其他地方没有错误之后,选择 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
命令是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 的配置。