阿里云大数据处理平台数加工厂的使用总结和示例

本篇主要是楼主工作的一些心得和总结,更完整的介绍和使用还需要参考阿里云官方文档。另开发者们可以申请DataWorks开发者版本免费体验。

  • DataWorks
    DataWorks是一个一站式大数据工场,助力开发者快速完成数据集成、开发、治理、服务、质量和安全等全套数据研发工作。其基于MaxCompute作为核心的计算、存储引擎,为开发者提供海量数据的离线加工分析、数据挖掘等功能。
  • MaxCompute
    原名ODPS,是一种快速、完全托管的EB级数据仓库解决方案,也就是大数据计算服务。

再通俗一点可以把MaxCompute理解为一个集存储和计算于一身的数据仓库。

MaxCompute支持的计算模型

MaxCompute支持多种计算模型,有SQL【Odps SQL】、MapReduce【Odps MR】、UDF(Java/Python)、Graph、基于DAG的处理、交互式、内存计算、机器学习等。

  • -SQL

MaxCompute以表的形式存储数据,支持多种数据类型,并对外提供SQL查询功能。您可以将MaxCompute作为传统的数据库软件操作,但其却能处理TB、PB级别的海量数据。

  • -MapReduce

MaxCompute MapReduce是MaxCompute提供的Java MapReduce编程模型,它可以简化开发流程,更为高效。您若使用MaxCompute MapReduce,需要对分布式计算概念有基本了解,并有相对应的编程经验。MaxCompute MapReduce为您提供Java编程接口。

使用心得

这里再着重分享一下楼主了解和使用这两种计算模型之后的心得,首先SQL型完全兼容Hive语法,和标准的SQL差别不大,容器上手,学习门槛低,MR型则需要对Map Reduce有一定基础,毕竟是要根据阿里云提供的SDK写Java程序,然后打包上传到Data Works的资源上,所以从操作上来说有点繁琐,最明显的是没有SQL型直观。尤其是排错的时候需要不断改代码发包【资源】,而反观SQL型只要运行后不符合预期直接改再运行就完事了。所以综合对比,SQL型无疑将会更受欢迎,毕竟MR型比SQL型的推出的早,后期的总是弥补了前者的不足之处。
如下以一个需求案例的方式从0到1来展示一个DataWorks的完整工作流程【只是DataWorks的一种应用】。
需求:将一台数据库服务中的【student表】数据导入到DataWorks中进行离线计算,然后将计算后的数据再导入到提供Mysql服务的库中的【lunch_log表】中

创建工作空间

登录Data Works控制台,创建一个工作空间
在这里插入图片描述

数据集成

数据集成UI界面

在这里插入图片描述
数据集成模块支持多种数据源,数据源信息填写完毕之后,就可以在数据开发模块写数据同步任务了。
新增一个MySQL的数据源

JDBC URL格式
jdbc:mysql://ServerIP:Port/Database

在这里插入图片描述
添加完毕
在这里插入图片描述
在MySQL数据库内创建如下表备用,稍后将此表的数据通过写数据同步任务从MySQL中导入到MaxCompute中。

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `command` varchar(30) NOT NULL,
  `spend` double(11,0) DEFAULT NULL,
  `stu_id` varchar(32) DEFAULT NULL,
  `name` varchar(100) DEFAULT NULL,
  `log_date` datetime DEFAULT NULL,
  `cmd_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

数据开发

数据开发UI界面

可以从左侧的数据开发类型中看到上边列出的计算模型类型等
在这里插入图片描述

表管理

就是离线计算的源数据和计算后的数据存储的地方,就是个数据仓库,类似于MySQL或者Hive仓库,可以在这里创建很多表。
在这里插入图片描述
创建如下表【创建的是一个分区表,分区字段是partitioned_date,格式是yyyymmdd】

CREATE TABLE `student` (
	`id` string COMMENT '主键id',
	`stu_id` string COMMENT '学号',
	`command` string COMMENT '早餐,午餐,晚餐',
	`spend` double COMMENT '花销',
	`name` string COMMENT '姓名',
	`log_date` datetime COMMENT '日期',
	`cmd_time` timestamp COMMENT '吃饭时间'
) 
 PARTITIONED BY (partitioned_date string COMMENT '分区字段');

提交表到生产环境即可
在这里插入图片描述

编写数据同步任务

需要将MaxCompute的ODPS数据源也添加到数据集成中。
在这里插入图片描述

编写同步任务

开始编写从Mysql到MaxCompute的数据同步任务,同步student表的数据。
在这里插入图片描述

字段映射如下

注意:此处的映射一定要留意,默认的映射有可能是不对的!!!【博主在这里没少踩坑】
在这里插入图片描述
因无工作流,无父节点,所以在调度任务中父节点选中项目根目录即可
在这里插入图片描述
先在Mysql数据库中造一些数据

INSERT INTO `dataworks`.`student` (`id`, `command`, `spend`, `stu_id`, `name`, `log_date`, `cmd_time`) VALUES ('1', '早餐', '9', '1001', '山治', '2019-11-03 21:16:02', '2019-11-03 13:18:11');
INSERT INTO `dataworks`.`student` (`id`, `command`, `spend`, `stu_id`, `name`, `log_date`, `cmd_time`) VALUES ('2', '午餐', '12', '1001', '山治', '2019-11-03 21:16:44', '2019-11-03 13:18:13');
INSERT INTO `dataworks`.`student` (`id`, `command`, `spend`, `stu_id`, `name`, `log_date`, `cmd_time`) VALUES ('3', '晚餐', '18', '1001', '山治', '2019-11-03 21:17:08', '2019-11-03 13:18:14');
INSERT INTO `dataworks`.`student` (`id`, `command`, `spend`, `stu_id`, `name`, `log_date`, `cmd_time`) VALUES ('4', '午餐', '13', '1002', '路飞', '2019-11-03 21:17:36', '2019-11-03 13:18:52');
INSERT INTO `dataworks`.`student` (`id`, `command`, `spend`, `stu_id`, `name`, `log_date`, `cmd_time`) VALUES ('5', '午餐', '17', '1003', '索大', '2019-11-03 21:18:28', '2019-11-03 21:18:31');

在这里插入图片描述
在MaxCompute上先查询数据
在这里插入图片描述
可以看到,此时是没有数据的,接下来开始执行数据同步任务

运行同步任务

在这里插入图片描述
在次查询临时任务,可以看到有了数据,并且还能看到每次执行任务的花费。。。
在这里插入图片描述
随便插入几条数据后,便可以开始写离线计算任务了,如果创建的是ODPS SQL计算任务,现在就可以开始编写了。

编写离线计算任务

创建一个ODPS SQL任务,编写如下代码

-- 统计每天吃了午餐且花费大于13元的人数
CREATE TABLE lunch_log AS 
SELECT partitioned_date AS log_date ,COUNT(DISTINCT s.stu_id) AS number
FROM student s
WHERE s.command='午餐' and  s.spend>=13
and s.partitioned_date=${bdp.system.bizdate}
GROUP BY s.partitioned_date

编写完毕后,设置调度日期,可以看到用了${bdp.system.bizdate}。
在这里插入图片描述
在这里插入图片描述
因为该任务是单独写的,没有建立工作流,所以直接使用根节点做父节点
在这里插入图片描述

运行离线计算任务

在这里插入图片描述
在这里插入图片描述
查看计算后的中间表数据
在这里插入图片描述
如果需要将中间表导出到MySQL中,再写同步任务即可。
如果运行失败,可以直接查看错误信息,进行修改,但是通常在工作中,这些任务都是一个工作流中,定时执行,这个错误可以在运维界面进行查看。

运维UI界面

在这里插入图片描述
在这里可以定向到错误任务,然后通过查看错误日志来进行错误的排查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章