比較五款企業級ETL工具,助你選出適合專案的解決方案
【51CTO.com快譯】在商業環境中,隨著各類資料量的不斷猛增,企業對於那些以ETL為基本要素的資料倉庫專案和高階分析系統的需求也在不斷增多。此處ETL所對應的是資料倉庫的三個概念:提取(Extracting)、轉換(Transforming)和載入(Loading)。其主要流程包括:
- 從不同的外部源提取資料。
- 將資料轉換為所需的業務模型。
- 將資料載入到新的倉庫之中。
可見,ETL是整個資料遷移任務的一個子集。在《資料倉庫ETL工具包(Warehouse ETL Toolkit)》一書中(請詳見https://www.amazon.com/Data-Warehouse-ETL-Toolkit-Techniques-Extracting/dp/0764567578),定義了ETL的三個基本特徵:
- 以適當的格式下載資料,並予以分析。
- 它包含有許多額外的資訊。
- 系統會記錄資料的來源。
因此,資料不應該只是簡單地從一處被載入到另一處,而應該在載入的過程中得到改進與優化。例如:ETL開發人員可以新增新的技術屬性,去跟蹤資料在資料庫中的顯示方式、資料被更改的時間及方式。
ETL的流程步驟
通常,Web程式設計師可以將ETL架構想象成如下圖所示的三個區域:
- 資料來源。
- 中間區域。
- 資料接收器。
資料流從源頭向接收器移動。由於每個階段都非常複雜,因此建立ETL軟體的過程往往會包括如下不同的挑戰:
- 外部資料來源的多樣性。
- 需要根據業務規則來統一資料。
- 更新頻率和其他具體的要求。
因此,普通IT公司需要清楚地瞭解資料來源的結構,並配備相應的目標應用。
一個ETL示例
常見的ETL任務是將資料從關係資料庫管理系統(Relational Database Management System,RDBMS)傳輸到另一個更適合於商業智慧工具的資料庫中。因此,ELT的作業可分為兩種型別:
- 批量作業
- 流式作業
其中,流式作業的一個例子是:從RDBMS中獲取資料,逐個且單獨地傳輸出去,以備後期處理。否則,我們認為它屬於批量處理的範疇。例如:您可以先獲取整個檔案,再對其進行處理,最後將其儲存到更大的檔案中。可以說,不同的ETL系統會以不同的方式處理上述任務。
如今,單一的批量方法已被淘汰。持續增長的流式資料來源,導致了各種ETL工具被主要用於通過處理流式作業,來儘快地提供出各種最新的資料。
同時,由於ETL能夠將資料成功地整合到各種資料庫和應用之中,而各種琳琅滿目的雲端資料整合工具,經常會讓我們難以做出選擇,因此我在此為大家羅列和比較了五款企業級ETL工具的優缺點,希望能夠幫助您找出最適合手頭專案的解決方案。
1. Apache Nifi
定價 :免費
官方網站: https://nifi.apache.org/
優點:
- 完美地實現了資料流的程式設計概念。
- 能夠處理二進位制資料。
- 提供資料來源(Data Provenance)。
缺點:
- 使用者介面過於簡單。
- 缺乏實時監控和逐條記錄的統計資料。
由Apache Software Foundation開發的開源專案--Apache NiFi可謂是最好的ETL工具之一。由於基於資料流的程式設計概念,因此它能夠讓我們在boxes中視覺化地組裝各種程式,並在幾乎不需要任何程式碼的情況下執行起來。在這一點上,您完全可以不必瞭解任何程式語言。
作為一款備受歡迎的ETL工具,NiFi能夠處理許多不同的資料來源,其中包括:RabbitMQ、JDBC查詢、Hadoop、MQTT、以及UDP套接字等。而在操作方面,您可以對資料進行篩選、調整、連線、拆分、增強和驗證。
由於Apache NiFi是用Java編寫而成,並且是在Apache 2.0的許可證中釋出的,因此它不但能夠在JVM上執行,而且支援所有的JVM語言。
該ETL工具既有助於使用者建立長期執行(long-running)的作業,又適用於處理流式資料和一些週期性的批處理。不過,對於那些手動式管理任務而言,使用者在設定NiFi時,可能會碰到一些麻煩。
Apache NiFi是一種功能強大且易於使用的解決方案。它採用了全面的架構模式,其FlowFile包含了各種元資訊。因此,該工具不但能夠識別CSV,還可以處理照片、視訊、音訊檔案、以及其他二進位制資料。
NiFi的處理器包括如下三種輸出:
- Failure:意味著FlowFile的處理過程中存在著一些問題。
- Original:表示傳入的FlowFile已被處理。
- Success:表示FlowFiles的處理已完成。
您可以使用特殊的複選框,來刪除那些已終止的輸出。同時,您應該注意在高階ETL程式設計中的程序組(Process Groups),它們對於組合複雜的資料流元素來說是非常必需的。
NiFi的另一個實用功能是:可以採用不同的佇列策略(包括FIFO、LIFO以及其他)。Data Provenance是一種用於記錄資料流中幾乎所有內容的連線服務。它可以便利地讓您獲悉資料的儲存或執行方式。當然,該功能的唯一缺點是需要大量的磁碟空間。
雖然在我看來Apache NiFi的介面不但簡潔清晰,而且可用性強,但是仍有不少使用者抱怨其缺少必要的元件。例如,他們認為:由於缺少了自動調整各種長SQL查詢的文字欄位,因此只能通過手動來完成。
NiFi擁有內建的Node叢集。您可以通過選擇一些例項,來讓它提取必要的ETL資料。另外,NiFi可以通過背壓(back pressure)機制,來快速地連線MySQL,獲取某個檔案,並將其新增到下一個處理器上。
總而言之,Apache NiFi的主要優勢在於擁有100多種不同的嵌入式處理器。它們能夠通過HTTP、S3或Google Data Source來下載檔案,並能將檔案上傳到MySQL、或其他資料接收器上。您只需配置UI,按下RUN按鈕,後續它就能自動運行了。
2. Apache StreamSets
定價:免費
官方網站: https://streamsets.com
優點:
- 每個處理器都有基於單條記錄的統計資訊,且具有友好的視覺化除錯效果。
- 使用者介面非常友好。
- 提供流式和基於記錄的資料工具。
缺點:
- 缺少可重用的JDBC配置。
- 更改單個處理器的設定後,需要停止整個資料流。
Apache StreamSets可謂Apache NiFi的強有力競爭對手,我們很難說出誰更勝一籌。
根據流暢且通用的資料流格式的設計思想,所有被放入StreamSets的資料都會被自動轉換為可交換的記錄。與Apache Nifi不同的是,該ETL工具並不顯示處理器之間的佇列。如果您想使用其他不同的格式,Apache Nifi通常需要從一個版本的處理器轉換為另一個版本。而StreamSets則不然,您需要為設定的更改停止整個資料流,而不僅僅停止某一個處理器。
在StreamSets中,雖然對於錯誤的修復看似困難,但事實上,由於它提供實時的除錯工具,因此使用者反而更容易實現錯誤的修復。藉助具有實時儀表板和顯示所有統計資訊的友好使用者介面,您可以快速地發現並修復任何出現的錯誤。此外,您還可以在處理器之間的連線處,放置各種具有記錄功能的過濾器,以檢查不同可疑的記錄。因此,它具有如下四種處理器的變體:
- Origin:處理器從資料來源接收資訊。
- Processors:獲取和轉換接收到的資料。
- Destinations:將轉換後的資料放入各種外部檔案。
- Executors:處理那些由其他處理器完成的操作。
StreamSets的各種處理器可以生成包括錯誤在內的動作和事件。您需要executors,來跟蹤和修復這些錯誤。雖然那些只用到Processors和Controller Services的使用者會更喜歡Apache NiFi的簡約設計。但是,StreamSets也有著規劃合理的架構。憑藉著友好的使用者介面,它也並不那麼難以上手。
我個人感覺:由於缺少了針對JDBC設定的Controller Services,因此在調整每一個處理器時,都會讓人覺得有些棘手。
StreamSets會在執行資料流之前檢查所有的處理器,即:在資料流啟動之前,必須確保所有處理器的連線。該功能會導致StreamSets不允許使用者留下任何暫未連線、以備將來修復錯誤的處理器。StreamSets的另一個缺點是:無法讓使用者同時選擇多個處理器。畢竟,逐一移動並重組多個處理器,會耗費大量的時間和精力。
總而言之,作為一款成熟的開源ETL工具,它提供了便捷的視覺化資料流和時尚的Web介面。
3. Apache Airflow
定價 :免費
官方網站: https://airflow.apache.org
實用資源: 教程
優點:
- 適合不同型別的任務。
- 具有清晰且視覺化的使用者介面。
- 提供可擴充套件的方案。
缺點:
- 不適合流式作業。
- 需要額外的運算子(operators)。
這是一種被用於建立與跟蹤工作流的開源式ETL軟體。它可以與包括GCP、Azure和AWS在內的雲服務一起使用。同時,您可以在Kubernetes上通過Astronomer Enterprise來執行Airflow。
在使用Python來編寫工作流程式碼時,您不必擔心XML或GUI拖放等問題,這些步驟具有一定的智慧性。作為一款靈活的任務排程程式,Airflow可以被用在許多API之中,以實現訓練ML模型、傳送通知、跟蹤系統、以及增強函式等目的。
該平臺具有如下主要特點:
- 通過Qubole和astronomer.io來提供Airflow-as-a-Service。
- 2015年由Airbnb所建立,2016年轉入Apache。
- 以Google Cloud Composer為基礎。
- 工作流程被作為有向無環圖(directed acyclic graphs,DAGs)執行。
開發者可以用Apache Airflow來建立dynamic、extensible、elegant和scalable四種解決方案。因此,它通過Python程式碼提供了動態管道的生成。同時,您還可以自定義運算子和執行程式,以及按需擴充套件的抽象庫。由於相關引數已被包含在平臺的核心裡,因此它能夠創建出各種清晰準確的管道。此外,模組化與訊息佇列式的設計,也讓Airflow更容易實現按需擴充套件。
Apache Airflow適用於大多數日常任務,包括:執行ETL作業和ML管道,提供資料和完成資料庫備份。但是,對於流式作業來說,這並不是一個很好的選擇。
該平臺具有視覺化元素的時尚UI。您可以檢視所有正在執行的管道,跟蹤進度並修復錯誤。這些都有助於使用者完成DAG上的複雜任務。
雖然該結構比ETL資料庫更具動態性,但是它能夠提供穩定的工作流。因此,如果您將工作流定義為程式碼的話,它們將更具有協作性、可版本化、可測試性和可維護性。
該平臺可執行在私有的Kubernetes叢集中,幷包含各種資源管理與分析工具,例如:StatsD、Prometheus和Grafana。
您可以使用如下的Airflow工作流,來進行ETL測試:
- 單元測試
- 整合測試
- 端到端測試(在某些情況下)
上述第一種型別適用於檢查DAG的載入、Python運算子函式、各種自定義運算子和Bash/EMR指令碼。該平臺不需要任何原始配置,其唯一需要更改的地方是:DB連線字串。您需要建立一個空的資料庫,並授予使用者CREATE/ALTER的許可權。剩下的就可以交給Airflow去完成了。
總而言之,Apache Airflow是一款由Python編寫的免費獨立框架。如果您想單獨執行Airflow的話,則會面臨一些挑戰,因此您最好使用一些不同的運算子。
4. AWS Data Pipeline
定價:不定,請參見 https://aws.amazon.com/datapipeline/pricing/
官方網站: https://aws.amazon.com/datapipeline/
優點:
- 易用的ETL技術
- 價格合理
- 靈活性好
缺點:
- 沒有太多內建函式
該Web服務確保了資料在AWS計算資源和各種資料來源之間的處理和移動。它能夠對已儲存的資料提供永久的訪問與轉換。其最終結果也可以被轉移到諸如:Amazon DynamoDB、Amazon RDS、Amazon EMR和Amazon S3等服務之中。該ETL工具簡化了建立複雜資料處理負載的相關過程,有助於實現可重複、高可用且可靠的用例負載(case-load)。
AWS Data Pipeline能夠移動和處理那些被鎖在本地資料孤島中的資料。Amazon號稱其ETL工具有如下六項主要優勢:
- 準確性
- 簡單性
- 適應性
- 價錢合理
- 可擴充套件性
- 透明度
AWS Data Pipeline是一種可靠的服務,它能夠在發生故障時,自動對各種活動程序進行重試。通過配置,您可以通過Amazon SNS接收到執行成功、延時或失敗等通知。
您還可以通過拖放控制檯,來簡單快速地設計各種管道。其內建的預置條件,省去了您通過額外編寫邏輯去呼叫它們。Web開發人員可能會用到的功能包括:排程、依賴關係跟蹤和問題處理。同時,該服務也被靈活地設計為能夠流暢地處理大量檔案。
AWS Data Pipeline是一種無伺服器式的編排服務,因此您只需為自己所使用的內容付費。同時,它為新使用者提供了免費的試用版。通過該透明式方案,使用者能夠接收與管道相關的完整資訊,並完全控制各種計算資源。
這款ETL工具很適合於執行各種管道作業。我在當前的專案中就使用它來傳輸各種資料。雖然AWS Data Pipeline沒有豐富的內建函式,但是它提供了便捷的UI和內建了多種處理器的實用工具。使用者可以用它來生成各種例項,並實現級聯式的檔案管理。
5. AWS Glue
定價:不定,請參見https://aws.amazon.com/glue/pricing/
官方網站: https://aws.amazon.com/glue/
實用資源: 教程
優點:
- 支援各種資料來源。
- 與AWS的各種服務有良好的整合。
缺點:
- 需要大量的手工操作。
- 靈活性差。
AWS Glue允許您在AWS管理控制檯中建立和執行一項ETL作業。該服務能夠從AWS中獲取各種資料和元資料,並通過放入相應的類目,以供ETL進行搜尋、查詢和使用。整個過程分為如下三個步驟:
- 通過構建類目(包括JSON、CSV、Parquet和許多其他格式)對資料進行分類。
- 生成ETL程式碼和各種編輯轉換(可用Scala或Python編寫)。
- 排程和執行各種ETL作業。
這款ETL工具具有如下三個主要優點:
- 便利性:由於能與眾多的AWS服務和引擎相緊密整合,因此該工具對於那些已經使用了Amazon產品的使用者來說,非常容易上手。不過,其缺點在於:您無法在本地、或任何其他雲端環境中實現它。
- 經濟實惠:無伺服器解決方案意味著您無需配置或管理任何基礎架構。因此,其成本取決於各個“資料處理單元”的開銷。您只需為正在執行的作業付費便可。
- 功能強大:能夠自動建立、維護和執行各種ETL作業。當然,該服務也需要大量的手工操作。
雖然AWS Glue是AWS生態系統中的重要組成部分,但是您應該注意它的細微差別。該服務能夠提供抽象級別的CSV檔案。不過,您需要通過大量的手工操作,才能最終生成可執行的Spark程式碼。您可以在Scala或Python中下載相應的程式碼,並按需進行各種修改。雖然它適用於大量的資料來源,但是該服務會最終強制您選取某一種特定的方案。而且您無法在後續的使用中,再去改用其他方式。
如何選擇正確的ETL工具
InfoWorld曾斷言:在構建資料倉庫系統的方面,ETL的成本佔比最大。使用者需要特別關注由它所產生的瓶頸。因此,只有恰當地實施ETL,才能優化企業的成本和加快員工的工作效率。最後,我為您列出如下五個方面,供您在選用ETL工具時進行參考:
- 系統的複雜性。
- 您的資料要求。
- 開發者的經驗。
- ETL的技術成本。
- 特殊的業務需求。
原文標題:Top 5 Enterprise ETL Tools,作者:Vitaliy Samofal
【51CTO譯稿,合作站點轉載請註明原文譯者和出處為51CTO.com】
【責任編輯:龐桂玉 TEL:(010)68476606】