沈琦,陳博
(北京工業大學 北京 100124)
基于大數據處理的ETL框架的研究與設計
沈琦,陳博
(北京工業大學 北京100124)
針對傳統抽取、轉換、裝載(ETL)架構在數據處理過程控制方面和數據產品開發效率方面的不足,提出一種基于大數據處理的ETL架構。通過分析主流的ETL工具--Datastage的工作原理和ETL過程的特點,設計ETL元數據描述模塊、ETL任務描述模塊、配置解析模塊和數據任務調度模塊等。使用該框架處理數據任務時,以配置文件的方式開發,使工作效率得到了極大的提升。基于該設計思想開發一款基于大數據處理的ETL工具,在對數據處理過程(E、T、L)的控制方面得到了改進,同時也可以使數據開發人員從大量重復的操作中解脫出來,將更多的精力放在數據的邏輯處理方面。
大數據處理;數據抽取;數據轉換;數據加載;ETL框架
信息是現代企業的重要資源,是企業運用科學管理、決策分析的基礎。目前,大多數企業花費大量的資金和時間來構建聯機事務處理OLTP的業務系統和辦公自動化系統,用來記錄事務處理的各種相關數據。據統計,數據量每2~3年時間就會成倍增長,這些數據蘊含著巨大的商業價值,而企業所關注的通常只占在總數據量的2%~4%左右。因此,企業仍然沒有最大化地利用已存在的數據資源,導致浪費了更多的時間和資金,也失去制定關鍵商業決策的最佳契機。于是,企業如何通過 各種技術手段,并把數據轉換為信息、知識,已經成了提高其核心競爭力的主要瓶頸。而ETL[2]則是主要的一個技術手段。
DataStage[3]包括設計、開發、編譯、運行及管理等整套工具。通過運用DataStage能夠對來自一個或多個不同數據源中的數據進行析取、轉換,再將結果裝載到一個或多個目的庫中。通過DataStage的處理,最終用戶可以得到分析和決策支持所需要的及時而準確的數據及相關信息。DataStage支持不同種類的數據源和目的庫,它既可以直接從Oracle、Sybase等各種數據庫中存取數據,也可以通過ODBC接口訪問各種數據庫,還支持Sequential?file類型的數據源。這一特性使得多個數據源與目標的連接變得非常簡單,可以在單個任務中對多個甚至是無限個數據源和目標進行連接。DataStage自帶了超過300個的預定義庫函數和轉換,即便是非常復雜的數據轉換也可以很輕松的完成。它的圖形化設計工具可以控制任務執行而無須任何腳本。
DataStage整體上還是按照ETL任務處理思想進行數據集成,不過它的并行處理技術使用分區處理技巧,將大型的整合工作切割為分區(分割并行處理)并將這些分區同時傳送給所有處理器(管道并行處理)。管道與分區并行處理的組合可提供完整的并行處理功能(效能提升與處理器數量成正比),并讓硬件成為性能的唯一決定性因素。不過下游的處理可能需要以不同方式分區數據。透過自動重新分區數據的功能,使用者便可根據下游處理數據分割的需求重新分區處理流程上的數據,而不需要將數據儲存在磁盤上。其具體工作流程如圖1所示。

圖1 Datastage的工作流程圖Fig.1 The flow chart of Datastage
DataStage的可執行應用的最小單位為ETL任務。而這些任務是通過DataStage Designer、DataStage Manager、DataStage Director來完成的。DataStage Designer是ETL任務開發的核心環境。DataStage Designer的主要功能可以概括為以下3個方面:ETL任務的開發、ETL任務的編譯、ETL任務的執行。DataStage Manager主要用來管理項目資源[4]。DataStage Director主要有以下兩個功能:監測ETL任務的運行狀態、設置何時運行ETL任務。
現今企業每天都會產生大量的數據,這些數據絕大部分都會存儲于日志文件中,而我們的ETL框架的功能就是需要將這些日志文件進行數據抽取、再對抽取出來的數據進行處理和轉換、最終導入到為上層應用服務的DB中。hadoop分布式集群,其提供了hdfs文件系統可以為ETL工具提供技術支持。Hive是基于hadoop的一個數據倉庫管理技術,可以方便我們對HDFS上的文件進行轉換處理操作。因此,文中提供的ETL框架的運行環境為:hadoop、hive(數據倉庫管理工具)、mysql(目標數據庫)、python(主語言,還需要用到少量的shell腳本)。ETL的整體架構[5],如圖2所示。

圖2 ETL架構圖Fig.2 ETL architecture diagram
由ETL的整體框架可以看出ETL操作[6]主要是在數據從底層數據源到上層應用數據庫過程中進行。為了能更好地完成這些操作我們需要為這些操作設計良好的任務語法,使我們編寫的數據任務腳本可以高效地處理在HDFS上的文件,還能使開發人員從繁重的代碼中解脫出來,將重心轉移到任務的邏輯上面;與此同時,還要為這些語法,編寫相應的解析程序,支撐本框架的語法體系;最后,要為任務處理過程中的一些常用操作提供公共工具接口,以方便全局調用。
2.1任務語法設計
任務語法是指我們在用本文提供的框架開發數據任務時,如何才能清晰地區分E、T、L 3個步驟;在每一步的配置文件中我們又該以什么樣的格式編寫,才能被本文設計的框架識別。設計任務語法,不僅可以使我們的任務邏輯清晰,而且還有利于團隊開發,極大的提高了開發效率。
由于框架的主語言是python,并且python對.yaml這種配置文件有很好的解析技術支持,所以本框架的任務配置文件選擇用.yaml文件。按照ETL任務的一般處理過——程數據抽取、轉換和加載(Extract、Transform、Load),因此我們可以將每個ETL任務都設計成E、T、L 3個子任務。每個任務的配置信息寫在相應目錄下的task.yaml中,每個子任務目錄下還可以有一些其他的腳本,具體任務文件的編寫和腳本的相關規則將在下文做詳細介紹。
ETL(extract,transform,load)是在建設數據倉庫過程中對一份數據的整個處理流程,大致過程為把數據從源系統抽取(E)出來,經過一系列的處理(T),然后加載到目標庫中(L)。下面是一個任務的配置文件task.yaml的大致框架:
parent:[parent_task_name]#父任務名稱,用來繼承
task_name:[task_name]#任務名稱
[phase_name]:#執行的階段
-step:[plugin_name].[module_name]#執行中用到的插件配置
[attr_name]:[attr_value]
-step:[plugin_name].[module_name]
[phase_name]:
-step:
下面對配置項進行一些解釋:parent:父任務名稱,無特殊需求,統一配置為EtlTask。task_name:任務名稱,由開發者自行指定,保證不會與其他現在任務名稱重復即可。phase_name:階段名稱,對應于EtlTask中target中的定義,比如前面的EtlTask定義了以下階段extract,transform,load分別對應于ETL 3個階段。這些階段(phase)只是起了一個標識作用,讓配置文件內容看起來更清晰。真正的操作是由phase下的一系列的步驟(step)決定的。step:步驟名稱,指定這一步進行什么操作,例如transfer.move_data,則代表指定了執行transfer插件中的move_date模塊。這些插件都用python語言在框架中編寫。
2.2配置文件解析
配置文件解析部分的功能主要是負責將任務規則設計中產生的配置文件中出現的一些標簽和插件的引用與框架的python腳本相關聯。
2.2.1插件
本框架中定義的插件主要分為transfer類、file類、script 類3大類插件。
transfer插件主要定義了一些數據傳輸的模塊,具體的模塊有:從ftp服務器上將數據日志文件下載到本地、從本地到HIVE、從本地到MYSQL數據庫。
file插件主要定義了一些數據文件處理的模塊,具體模塊有:將文件增加一列常量數據、檢查文件是否為空、替換文件中的特殊字符。
script插件主要定義了一些task.yaml文件中要調用的腳本文件的模塊,具體模塊有:script.shell(調用 shell腳本)、script.hive(調用hiveQL腳本)、script.sql(調用SQL腳本)。
2.2.2linux命令
本框架中有runtask、install_task兩大命令。
runtask-d數據日期。例如:runtask-d 20110101;-d,--date=YYYYmmdd或者YYYYmmddHHMM。表示執行2011年1月1號的任務。
Install_task執行任務名稱。例如:install_task data_time_info。表示安裝任務data_time_info。會將該任務的所需要的一些文件、數據信息加載到緩存。
2.3主要功能
本框架主要的功能有以下幾方面:初始化功能:清除db中數據和清除已存在文件;下載功能:下載上游數據文件,校驗MD5;文件規則檢查功能:檢驗下載的文件是否符合設定的規則;其他基礎db功能:同db相關的操作,如查詢任務,查詢下載列表等。
2.3.1初始化功能
該模塊主要是對數據和文件進行清理,比如需要導入2011-11-01的數據,需要先把這天的數據刪除掉,避免插入重復的數據;同時需要建立當天數據的文件夾同時如果是修復數據的話會把之前下載過的這天的文件進行刪除然后再進行下載。具體流程,如圖3所示。

圖3 初始化模塊流程圖Fig.3 Initialization module flow chart
由上圖可以看出在執行腳本時不會對公共文件進行刪除操作,避免出現公共文件多次下載影響下載效率。
2.3.2下載功能
該模塊主要是進行數據文件的下載,其中分為對ftp協議和http協議的下載,下載文件的同時判斷是否存在MD5文件并進行校驗;對下載失敗的文件提供重試功能。具體流程,如圖4所示。

圖4 下載模塊流程圖Fig.4 Download the module flow chart
2.3.3文件規則檢查功能
該模塊主要是對下載的文件通過設定的規則進行校驗,檢查文件下載的內容是否正確。功能使用awk命令實現。
2.3.4db功能
該模塊內容主要是同db之間的操作,其中包含查詢任務相關內容,下載文件相關內容等。包括函數:Update(執行指定的 sql)、Gettask(通過任務 id查詢任務相關信息)、Getdownload(通過任務名稱查詢任務對應的需要下載的文件相關內容)。
2.3.5調度功能
該模塊是整個框架執行的主體調度程序,實現的內容是自動地按照順序計劃執行任務,從而使所有的數據任務嚴格按照ETL流程執行。ETL流程即:通過任務名稱查詢出任務和下載文件相關信息->下載文件->校驗MD5文件->導入到HIVE數據倉庫中(E)->執行業務腳本(T)->把轉化好的數據load入庫(L)->刪除臨時文件。
在數據倉庫中,ETL有兩個特點,一是數據同步,它不是一次性倒完數據就拉到,它是經常性的活動,按照固定周期運行的,甚至現在還有人提出了實時ETL的概念。二是數據量,一般都是巨大的,值得你將數據流動的過程拆分成E、T 和L。將數據任務按照E、T和L 3個部分層次化劃分,可以使用戶更好的把握數據的轉換過程。文中先通過對ETL工具——Datastage的優缺點、整體架構及工作原理做了細致地分析。隨后提出了設計一款ETL框架的基本思路和解決方案,該框架通過使用HIVE作為數據集成的中轉工具,可以提高文件的操作效率。該框架設計時考慮到了ETL的兩個特點,使該框架有以下特點:
1)使用HIVE作為數據集成的中轉工具,可以提高文件的操作效率(基于hadoop分布式集群)。
2)將數據任務按照E、T和L3個部分層次化劃分,可以使用戶更好的把握數據的轉換過程。
3)使用配置文件的方式創建任務,可以大大加快開發人員的數據處理效率。
[1]PVassiliadis,ASimitsis,PGeorgantas,MTerrovitis SSkiadopoulos.Ageneric and customizable framework for the design of ETL scenarios[J].Information Systems Journa,200530(7): 492-525.
[2]PVassiliadis,etal.ARKTOS:to wards the modeling,design,control and execution of ETL processes[J].Information Systems,2001(26):537-561.
[3]陳弦,陳松喬.基于數據倉庫的通用ETL工具的設計與實現[J].計算機應用研究,2004(8):214-216.
[4]尤玉林,張憲民.一種可靠的數據倉庫中ETL策略與架構設計[J].計算機工程與應用,2006(3):172-175.
[5]周茂偉,鄧蘇,黃宏斌.基于元數據的ETL工具設計與實現[J].科學技術與工程,2006,6(21):3503-3507.
[6]鄭洪源,周良.基于CWM的標準ETL的設計與實現[J].吉林大學學報(信息科學版),2006,1(24):50-55.
Research and design of ETL framework based on data processing
SHEN Qi,CHEN Bo
(Beijing University of Technology,Beijing 100124,China)
According to the traditional extraction,conversion,loading(ETL)architecture forprocess control deficiencies in data processing and data product development efficiency,the article presents a data processing based on ETL.The characteristics of ETL working principle and process analysis of the mainstream ETL tool--Datastage,design of ETL metadata description module,ETL module,configuration task description analysis module and data task scheduling module etc.Using the framework of data processing tasks,development to the configuration file of the way,so that the work efficiency has been greatlyimproved.ThedesignideaofthedevelopmentofalargedataprocessingbasedonETL tools,in data processing(E,T,L)of the control has been improved,but also can make the data developer freed from a large number of repetitive operations,will focus more on the aspects of the data logic processing.
data processing;data extraction;data conversion;data loading;ETL framework
TN709
A
1674-6236(2016)02-0025-03
2015-03-09稿件編號:201503111
沈 琦(1964—),女,北京人,博士,副教授。研究方向:計算機網絡與應用。