阿里雲大數據處理平臺數加工廠的使用總結和示例

本篇主要是樓主工作的一些心得和總結,更完整的介紹和使用還需要參考阿里雲官方文檔。另開發者們可以申請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界面

在這裏插入圖片描述
在這裏可以定向到錯誤任務,然後通過查看錯誤日誌來進行錯誤的排查。

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