热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

90网站点击流数据分析案例(工作流调度)

注:将整个项目的数据处理过程,从数据采集到数据分析,再到结果数据的导出,一系列的任务分割成若干个oozie的工作流ÿ

注:将整个项目的数据处理过程,从数据采集到数据分析,再到结果数据的导出,一系列的任务分割成若干个oozie的工作流,并用coordinator进行协调。


工作流定义示例

Ooize配置片段示例,详见项目工程


1.日志预处理mr程序工作流定义

<workflow-app name&#61;"weblogpreprocess" xmlns&#61;"uri:oozie:workflow:0.4">
<start to&#61;"firstjob"/>
<action name&#61;"firstjob">
<map-reduce>
<job-tracker>${jobTracker}job-tracker>
<name-node>${nameNode}name-node>
<prepare>
<delete path&#61;"${nameNode}/${outpath}"/>
prepare>
<configuration>
<property>
<name>mapreduce.job.map.classname>
<value>cn.itcast.bigdata.hive.mr.WeblogPreProcess$WeblogPreProcessMappervalue>
property><property>
<name>mapreduce.job.output.key.classname>
<value>org.apache.hadoop.io.Textvalue>
property>
<property>
<name>mapreduce.job.output.value.classname>
<value>org.apache.hadoop.io.NullWritablevalue>
property><property>
<name>mapreduce.input.fileinputformat.inputdirname>
<value>${inpath}value>
property>
<property>
<name>mapreduce.output.fileoutputformat.outputdirname>
<value>${outpath}value>
property>
<property>
<name>mapred.mapper.new-apiname>
<value>truevalue>
property>
<property>
<name>mapred.reducer.new-apiname>
<value>truevalue>
property>configuration>
map-reduce>
<ok to&#61;"end"/>
<error to&#61;"kill"/>

2.数据加载etl工作流定义

<workflow-app xmlns&#61;"uri:oozie:workflow:0.5" name&#61;"hive2-wf">
<start to&#61;"hive2-node"/><action name&#61;"hive2-node">
<hive2 xmlns&#61;"uri:oozie:hive2-action:0.1">
<job-tracker>${jobTracker}job-tracker>
<name-node>${nameNode}name-node>
<configuration>
<property>
<name>mapred.job.queue.namename>
<value>${queueName}value>
property>
configuration>
<jdbc-url>jdbc:hive2://hdp-node-01:10000jdbc-url>
<script>script.qscript>
<param>input&#61;/weblog/outpre2param>
hive2>
<ok to&#61;"end"/>
<error to&#61;"fail"/>
action><kill name&#61;"fail">
<message>Hive2 (Beeline) action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]message>
kill>
<end name&#61;"end"/>
workflow-app>

3.数据加载工作流所用hive脚本

create database if not exists dw_weblog;
use dw_weblog;
drop table if exists t_orgin_weblog;
create table t_orgin_weblog(valid string,remote_addr string,
remote_user string,
time_local string,
request string,
status string,
body_bytes_sent string,
http_referer string,
http_user_agent string)
row format delimited
fields terminated by &#39;\001&#39;;
load data inpath &#39;/weblog/preout&#39; overwrite into table t_orgin_weblog;drop table if exists t_ods_detail_tmp_referurl;
create table t_ods_detail_tmp_referurl as
SELECT a.*,b.*
FROM t_orgin_weblog a
LATERAL VIEW parse_url_tuple(regexp_replace(http_referer, "\"", ""), &#39;HOST&#39;, &#39;PATH&#39;,&#39;QUERY&#39;, &#39;QUERY:id&#39;) b as host, path, query, query_id;drop table if exists t_ods_detail;
create table t_ods_detail as
select b.*,substring(time_local,0,11) as daystr,
substring(time_local,13) as tmstr,
substring(time_local,4,3) as month,
substring(time_local,0,2) as day,
substring(time_local,13,2) as hour
from t_ods_detail_tmp_referurl b;drop table t_ods_detail_prt;
create table t_ods_detail_prt(
valid string,
remote_addr string,
remote_user string,
time_local string,
request string,
status string,
body_bytes_sent string,
http_referer string,
http_user_agent string,
host string,
path string,
query string,
query_id string,
daystr string,
tmstr string,
month string,
day string,
hour string)
partitioned by (mm string,dd string);insert into table t_ods_detail_prt partition(mm&#61;&#39;Sep&#39;,dd&#61;&#39;18&#39;)
select * from t_ods_detail where daystr&#61;&#39;18/Sep/2013&#39;;
insert into table t_ods_detail_prt partition(mm&#61;&#39;Sep&#39;,dd&#61;&#39;19&#39;)
select * from t_ods_detail where daystr&#61;&#39;19/Sep/2013&#39;;

工作流单元测试


1、工作流定义配置上传

[hadoop&#64;hdp-node-01 wf-oozie]$ hadoop fs -put hive2-etl /user/hadoop/oozie/myapps/
[hadoop&#64;hdp-node-01 wf-oozie]$ hadoop fs -put hive2-dw /user/hadoop/oozie/myapps/
[hadoop&#64;hdp-node-01 wf-oozie]$ ll
total 12
drwxrwxr-x. 2 hadoop hadoop 4096 Nov 23 16:32 hive2-dw
drwxrwxr-x. 2 hadoop hadoop 4096 Nov 23 16:32 hive2-etl
drwxrwxr-x. 3 hadoop hadoop 4096 Nov 23 11:24 weblog
[hadoop&#64;hdp-node-01 wf-oozie]$ export OOZIE_URL&#61;http://localhost:11000/oozie

2、工作流单元提交启动

oozie job -D inpath&#61;/weblog/input -D outpath&#61;/weblog/outpre -config weblog/job.properties -run

启动etl的hive工作流

oozie job -config hive2-etl/job.properties -run

启动pvs统计的hive工作流

oozie job -config hive2-dw/job.properties -run

3、工作流coordinator配置&#xff08;片段&#xff09;

多个工作流job用coordinator组织协调&#xff1a;

[hadoop&#64;hdp-node-01 hive2-etl]$ ll
total 28
-rw-rw-r--. 1 hadoop hadoop 265 Nov 13 16:39 config-default.xml
-rw-rw-r--. 1 hadoop hadoop 512 Nov 26 16:43 coordinator.xml
-rw-rw-r--. 1 hadoop hadoop 382 Nov 26 16:49 job.properties
drwxrwxr-x. 2 hadoop hadoop 4096 Nov 27 11:26 lib
-rw-rw-r--. 1 hadoop hadoop 1910 Nov 23 17:49 script.q
-rw-rw-r--. 1 hadoop hadoop 687 Nov 23 16:32 workflow.xml

config-default.xml:

<configuration>
<property>
<name>jobTrackername>
<value>hdp-node-01:8032value>
property>
<property>
<name>nameNodename>
<value>hdfs://hdp-node-01:9000value>
property>
<property>
<name>queueNamename>
<value>defaultvalue>
property>
configuration>

job.properties:

user.name&#61;hadoop
oozie.use.system.libpath&#61;true
oozie.libpath&#61;hdfs://hdp-node-01:9000/user/hadoop/share/lib
oozie.wf.application.path&#61;hdfs://hdp-node-01:9000/user/hadoop/oozie/myapps/hive2-etl/

workflow.xml:

<workflow-app xmlns&#61;"uri:oozie:workflow:0.5" name&#61;"hive2-wf">
<start to&#61;"hive2-node"/><action name&#61;"hive2-node">
<hive2 xmlns&#61;"uri:oozie:hive2-action:0.1">
<job-tracker>${jobTracker}job-tracker>
<name-node>${nameNode}name-node>
<configuration>
<property>
<name>mapred.job.queue.namename>
<value>${queueName}value>
property>
configuration>
<jdbc-url>jdbc:hive2://hdp-node-01:10000jdbc-url>
<script>script.qscript>
<param>input&#61;/weblog/outpre2param>
hive2>
<ok to&#61;"end"/>
<error to&#61;"fail"/>
action><kill name&#61;"fail">
<message>Hive2 (Beeline) action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]message>
kill>
<end name&#61;"end"/>
workflow-app>

coordinator.xml:

<coordinator-app name&#61;"cron-coord" frequency&#61;"${coord:minutes(5)}" start&#61;"${start}" end&#61;"${end}" timezone&#61;"Asia/Shanghai" xmlns&#61;"uri:oozie:coordinator:0.2">
<action>
<workflow>
<app-path>${workflowAppUri}app-path>
<configuration>
<property>
<name>jobTrackername>
<value>${jobTracker}value>
property>
<property>
<name>nameNodename>
<value>${nameNode}value>
property>
<property>
<name>queueNamename>
<value>${queueName}value>
property>
configuration>
workflow>
action>
coordinator-app>

推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
author-avatar
阿川那小子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有