数据分析高级教程(三)

简介: 数据分析高级教程(三)

工作流单元测试



1、工作流定义配置上传

[hadoop@hdp-node-01  wf-oozie]$ hadoop fs -put hive2-etl /user/hadoop/oozie/myapps/

[hadoop@hdp-node-01  wf-oozie]$ hadoop fs -put hive2-dw /user/hadoop/oozie/myapps/

[hadoop@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@hdp-node-01  wf-oozie]$ export OOZIE_URL=http://localhost:11000/oozie

 

 

2、工作流单元提交启动


oozie job -D inpath=/weblog/input -D outpath=/weblog/outpre-config weblog/job.properties  -run

 

启动etlhive工作流

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

启动pvs统计的hive工作流

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

 

 

3、工作流coordinator配置(片段)


多个工作流jobcoordinator组织协调:

[hadoop@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

 

 

 

l  config-default.xml

<configuration>

<property>

<name>jobTracker</name>

<value>hdp-node-01:8032</value>

</property>

<property>

<name>nameNode</name>

<value>hdfs://hdp-node-01:9000</value>

</property>

<property>

<name>queueName</name>

<value>default</value>

</property>

</configuration>

 

 

l  job.properties

user.name=hadoop

oozie.use.system.libpath=true

oozie.libpath=hdfs://hdp-node-01:9000/user/hadoop/share/lib

oozie.wf.application.path=hdfs://hdp-node-01:9000/user/hadoop/oozie/myapps/hive2-etl/

 

l  workflow.xml

<workflow-app  xmlns="uri:oozie:workflow:0.5" name="hive2-wf">

<start  to="hive2-node"/>

 

<action  name="hive2-node">

<hive2  xmlns="uri:oozie:hive2-action:0.1">

<job-tracker>${jobTracker}</job-tracker>

<name-node>${nameNode}</name-node>

<configuration>

<property>

<name>mapred.job.queue.name</name>

<value>${queueName}</value>

</property>

</configuration>

<jdbc-url>jdbc:hive2://hdp-node-01:10000</jdbc-url>

<script>script.q</script>

<param>input=/weblog/outpre2</param>

</hive2>

<ok  to="end"/>

<error  to="fail"/>

</action>

 

<kill  name="fail">

<message>Hive2  (Beeline) action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>

</kill>

<end  name="end"/>

</workflow-app>

 

l  coordinator.xml

<coordinator-app  name="cron-coord" frequency="${coord:minutes(5)}"  start="${start}" end="${end}"  timezone="Asia/Shanghai"  xmlns="uri:oozie:coordinator:0.2">

<action>

<workflow>

<app-path>${workflowAppUri}</app-path>

<configuration>

<property>

<name>jobTracker</name>

<value>${jobTracker}</value>

</property>

<property>

<name>nameNode</name>

<value>${nameNode}</value>

</property>

<property>

<name>queueName</name>

<value>${queueName}</value>

</property>

</configuration>

</workflow>

</action>

</coordinator-app>



模块开发——数据展示




在企业的数据分析系统中,前端展现工具有很多,

l 独立部署专门系统的方式:以BusinessObjects(BO,Crystal Report),Heperion(Brio),Cognos等国外产品为代表的,它们的服务器是单独部署的,与应用程序之间通过某种协议沟通信息

 

l WEB程序展现方式:通过独立的或者嵌入式的java web系统来读取报表统计结果,以网页的形式对结果进行展现,如,100%Java的润乾报表

 

本日志分析项目采用自己开发web程序展现的方式

u Web展现程序采用的技术框架:

Jquery + Echarts + springmvc + spring + mybatis + mysql

u 展现的流程:

1.        使用sshmysql中读取要展现的数据

2.        使用json格式将读取到的数据返回给页面

3.        在页面上用echartsjson解析并形成图标

 

Web程序工程结构


采用maven管理工程,引入SSH框架依赖及jquery+echartsjs


Web程序的实现代码


采用典型的MVC架构实现

页面

HTML + JQUERY + ECHARTS

Controller

SpringMVC

Service

Service

DAO

Mybatis

数据库

Mysql

代码详情见项目工程

 

 

代码示例:ChartServiceImpl

@Service("chartService")

public class ChartServiceImpl implements IChartService {

                @Autowired

                IEchartsDao  iEchartsDao;

 

                public  EchartsData getChartsData() {

                                List<Integer> xAxiesList  = iEchartsDao.getXAxiesList("");

                                List<Integer>  pointsDataList = iEchartsDao.getPointsDataList("");

                               

                               

                                EchartsData data = new  EchartsData();

                                ToolBox toolBox =  EchartsOptionUtil.getToolBox();

                                Serie serie =  EchartsOptionUtil.getSerie(pointsDataList);

                                ArrayList<Serie> series  = new ArrayList<Serie>();

                                series.add(serie);

                               

                               

                                List<XAxi> xAxis =  EchartsOptionUtil.getXAxis(xAxiesList);

                                List<YAxi> yAxis = EchartsOptionUtil.getYAxis();

                               

                                HashMap<String, String>  title = new HashMap<String, String>();

                                title.put("text",  "pvs");

                                title.put("subtext",  "超级pvs");

                                HashMap<String, String>  tooltip = new HashMap<String, String>();

                                tooltip.put("trigger",  "axis");

                               

                                HashMap<String,  String[]> legend = new HashMap<String, String[]>();

                                legend.put("data",  new String[]{"pv统计"});

                               

                               

                                data.setTitle(title);

                                data.setTooltip(tooltip);

                                data.setLegend(legend);

                                data.setToolbox(toolBox);

                                data.setCalculable(true);

                                data.setxAxis(xAxis);

                                data.setyAxis(yAxis);

                                data.setSeries(series);

                                return data;

                }

               

                public  List<HashMap<String, Integer>> getGaiKuangList(String date)  throws ParseException{

                               

                                HashMap<String, Integer>  gaiKuangToday = iEchartsDao.getGaiKuang(date);

                                SimpleDateFormat sf = new  SimpleDateFormat("MMdd");

                                Date parse = sf.parse(date);

                                Calendar calendar =  Calendar.getInstance();

                                calendar.setTime(parse);

                                calendar.add(Calendar.DAY_OF_MONTH,  -1);

                                Date before =  calendar.getTime();

                                String beforeString =  sf.format(before);

                                System.out.println(beforeString);

                               

                                HashMap<String, Integer>  gaiKuangBefore = iEchartsDao.getGaiKuang(beforeString);

                               

                                ArrayList<HashMap<String,  Integer>> gaiKuangList = new ArrayList<HashMap<String,  Integer>>();

                                gaiKuangList.add(gaiKuangToday);

                                gaiKuangList.add(gaiKuangBefore);

                               

                                return gaiKuangList;

                               

                }

               

                public  static void main(String[] args) {

                                ChartServiceImpl  chartServiceImpl = new ChartServiceImpl();

                                EchartsData chartsData =  chartServiceImpl.getChartsData();

                                Gson gson = new Gson();

                                String json =  gson.toJson(chartsData);

                                System.out.println(json);

                               

                }

}

 

 

Web程序的展现效果


网站概况


640.jpg

640.jpg

640.jpg

 

流量分析


640.jpg


640.jpg

 

 

来源分析

640.jpg

 640.jpg

 

访客分析


640.jpg 




OVER,整个数据项目实战到此结束!

相关文章
|
6月前
|
机器学习/深度学习 算法 数据挖掘
数据分析入门系列教程-K-Means实战
数据分析入门系列教程-K-Means实战
|
10天前
|
SQL 数据挖掘 Python
R中单细胞RNA-seq数据分析教程 (1)
R中单细胞RNA-seq数据分析教程 (1)
30 5
R中单细胞RNA-seq数据分析教程 (1)
|
4月前
|
机器学习/深度学习 并行计算 数据挖掘
🎓PyTorch深度学习入门课:编程小白也能玩转的高级数据分析术
【7月更文挑战第29天】踏入深度学习世界,新手也能用PyTorch解锁高级数据分析。
44 2
|
4月前
|
数据采集 数据挖掘 数据处理
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
【7月更文挑战第14天】Python的Pandas和NumPy库是数据分析的核心工具。Pandas以其高效的数据处理能力,如分组操作和自定义函数应用,简化了数据清洗和转换。NumPy则以其多维数组和广播机制实现快速数值计算。两者协同工作,如在DataFrame与NumPy数组间转换进行预处理,提升了数据分析的效率和精度。掌握这两者的高级功能是提升数据科学技能的关键。**
48 0
|
4月前
|
数据挖掘 数据处理 决策智能
Python 数据分析工具箱:深挖 Pandas 与 NumPy 高级功能,驱动智能决策
【7月更文挑战第12天】Python的Pandas和NumPy是数据分析的基石。Pandas提供灵活的数据结构如DataFrame,用于高效处理关系型数据,而NumPy则以多维数组和科学计算功能著称。两者结合,支持数据合并(如`pd.merge`)、时间序列分析(`pd.to_datetime`)和高级数组运算。通过掌握它们的高级特性,能提升数据分析效率,应用于各领域,如金融风险评估、市场分析和医疗预测,助力数据驱动的决策。学习和熟练运用Pandas与NumPy是成为出色数据分析师的关键。
60 0
|
6月前
|
分布式计算 数据挖掘 Hadoop
《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)(下)
《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)(下)
72 1
|
6月前
|
消息中间件 数据挖掘 Kafka
《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)(上)
《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)(上)
88 1
|
6月前
|
数据采集 数据挖掘 数据处理
《Pandas 简易速速上手小册》第8章:Pandas 高级数据分析技巧(2024 最新版)
《Pandas 简易速速上手小册》第8章:Pandas 高级数据分析技巧(2024 最新版)
78 1
|
6月前
|
存储 数据挖掘 索引
Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析
Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析
53 0
Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析
|
6月前
|
存储 机器学习/深度学习 数据挖掘
提升数据分析效率:Amazon S3 Express One Zone数据湖实战教程
提升数据分析效率:Amazon S3 Express One Zone数据湖实战教程
139 1