官术网_书友最值得收藏!

1.2 數據工程技能和活動

數據工程師的技能集包含數據工程的“底層設計”:安全、數據管理、DataOps、數據架構和軟件工程。該技能集需要了解如何評估數據工具以及它們如何在整個數據工程生命周期中相互配合。了解源系統中數據的生成方式,以及分析師和數據科學家在處理和管理數據后如何使用和創造價值也很重要。最后,數據工程師要兼顧許多復雜的移動部件,并且必須沿著成本、敏捷性、可擴展性、簡單性、復用性和互操作性等軸線不斷優化(如圖1-7所示)。我們將在接下來的章節中更詳細地介紹這些主題。

圖1-7:數據工程的平衡行為

正如我們所討論的,就在不久前,數據工程師需要知道并理解如何使用少數強大的龐大技術(Hadoop、Spark、Teradata、Hive等)來創建數據解決方案。使用這些技術通常需要對軟件工程、網絡、分布式計算、存儲或其他底層細節有深入的了解。他們的工作將致力于集群管理和維護、管理開銷、寫管道和轉換作業,以及其他任務。

如今,數據工具環境的管理和部署復雜性大大降低?,F代數據工具大大地抽象和簡化了工作流。因此,數據工程師現在專注于平衡能夠為企業帶來價值的最簡單、最具成本效益的最佳服務。數據工程師還需要創建隨著新趨勢的出現而發展的敏捷數據架構。

數據工程師不做哪些事情?數據工程師通常不直接構建ML模型、創建報告或儀表板、執行數據分析、構建關鍵績效指標(KPI)或開發軟件應用程序。數據工程師應該對這些領域有很好的理解,以便更好地為利益相關者提供服務。

1.2.1 數據成熟度和數據工程師

公司內部數據工程的復雜程度在很大程度上取決于公司的數據成熟度。這會顯著影響數據工程師的日常工作職責和職業發展。究竟什么是數據成熟度?

數據成熟度是指整個組織向著更高的數據利用率、功能和集成的方向發展,但數據成熟度不僅僅取決于公司的年齡或收入。一家初創公司的數據成熟度可能比一家年收入數十億美元擁有百年歷史的公司要高。重要的是如何利用數據作為競爭優勢。

數據成熟度模型有很多版本,比如數據管理成熟度(Data Management Maturity,DMM)(https://oreil.ly/HmX62)等,很難選擇一個既簡單又對數據工程有用的模型。因此,我們將創建自己的簡化數據成熟度模型。我們的數據成熟度模型(如圖1-8所示)分為三個階段:從數據開始,用數據擴展,以數據領先。讓我們看看每個階段以及數據工程師通常在每個階段做什么。

圖1-8:我們為某公司簡化的數據成熟度模型

第1階段:從數據開始

根據定義,一個開始使用數據的公司處于其數據成熟度的早期階段。公司可能有模糊、松散定義的目標或沒有目標。數據架構和基礎設施處于規劃和開發的早期階段。采納和利用可能很低或根本不存在。數據團隊很小,人數通常只有個位數。在這個階段,數據工程師通常是多面手,通常會扮演其他幾個角色,例如數據科學家或軟件工程師。數據工程師的目標是快速行動、獲得牽引力并增加價值。

從數據中獲取價值的實用性通常不為人所知,但這種愿望是存在的。報告或分析缺乏正式的結構,大多數數據請求都是臨時性的。雖然在這個階段一頭扎進ML很誘人,但我們不推薦這樣做。我們已經看到無數數據團隊在沒有建立堅實的數據基礎而試圖跳到ML時陷入困境和失敗。

這并不是說在這個階段你不能從ML中獲得勝利——這種情況很少見,但有可能。如果沒有堅實的數據基礎,你可能沒有數據來訓練可靠的ML模型,也沒有辦法以可擴展和可重復的方式將這些模型部署到生產中。我們半開玩笑地稱自己為“正在恢復的數據科學家”(https://oreil.ly/2wXbD),這主要來自在沒有足夠的數據成熟度或數據工程支持的情況下參與不成熟的數據科學項目的個人經驗。

在開始使用數據的組織中,數據工程師應該關注以下方面:

? 獲得包括執行管理層在內的主要利益相關者的支持。理想情況下,數據工程師應該有一個關鍵舉措的發起人來設計和構建數據架構以支持公司的目標。

? 定義正確的數據架構(通常是單獨的,因為數據架構可能不可用)。這意味著確定業務目標和你希望通過數據計劃實現的競爭優勢。努力建立一個支持這些目標的數據架構。請參閱第3章,了解我們對“好”數據架構的建議。

? 識別和審計將支持關鍵舉措的數據,并在你設計的數據架構內運行。

? 為未來的數據分析師和數據科學家構建堅實的數據基礎,以生成具有競爭價值的報告和模型。同時,你可能還必須生成這些報告和模型,直到雇用該團隊。

這是一個微妙的階段,有很多陷阱。以下是此階段的一些提示:

? 如果數據沒有帶來很多可見的成功,組織的意志力可能會減弱??焖偃賹⒋_立數據在組織內的重要性。請記住,快速取勝可能會產生技術債。要制定減少債務的計劃,否則會給未來交付增加阻力。

? 走出去與人交談,避免孤島工作。我們經??吹綌祿F隊在安全的環境中工作,不與部門外的人交流,也不從業務利益相關者那里獲取觀點和反饋。這樣做的危險在于你會把很多時間花在對人們沒有什么用處的事情上。

? 避免無差別的繁重工作。不要讓自己陷入不必要的技術復雜性之中。盡可能使用現成的整體解決方案。

? 僅在可以創造競爭優勢的地方構建自定義解決方案和代碼。

第2階段:用數據擴展

在這個階段,一家公司已經擺脫了臨時數據請求并擁有正式的數據實踐?,F在的挑戰是創建可擴展的數據架構并為公司真正的數據驅動的未來做規劃。數據工程角色從通才轉變為專家,人們專注于數據工程生命周期的特定方面。

在處于數據成熟度第二階段的組織中,數據工程師的目標是執行以下操作:

? 建立正式的數據實踐。

? 創建可擴展且健壯的數據架構。

? 采用DevOps和DataOps實踐。

? 建立支持ML的系統。

? 繼續避免無差別的繁重工作,只有在產生競爭優勢時才進行自定義。

我們在本書后面會回到這些目標中。

需要注意的問題包括以下幾點:

? 隨著我們對數據的處理變得越來越復雜,人們很想采用基于硅谷公司社會證明的尖端技術。這很少能很好地利用你的時間和精力。任何技術決策都應由它們將為你的客戶提供的價值來驅動。

? 擴展的主要瓶頸不是集群節點、存儲或技術,而是數據工程團隊。專注于易于部署和管理的解決方案,以擴大團隊的吞吐量。

? 你會很想把自己定位成一名技術專家,一個可以提供神奇產品的數據天才。將你的注意力轉移到務實的領導力上,并開始過渡到下一個成熟階段,與其他團隊就數據的實用性進行溝通。教會組織如何使用和利用數據。

第3階段:以數據領先

在這個階段,公司是由數據驅動的。數據工程師創建的自動化管道和系統允許公司內部的人員進行自助分析和ML。引入新的數據源是無縫的,并且產生了有形的價值。數據工程師實施適當的控制和實踐,以確保數據始終可供人員和系統使用。數據工程角色比第2階段更加專業化。

在處于數據成熟度第3階段的組織中,數據工程師將繼續在先前階段的基礎上進行構建,此外他們還將執行以下操作:

? 創建自動化以無縫引入和使用新數據。

? 專注于構建利用數據作為競爭優勢的自定義工具和系統。

? 專注于數據的“企業級”方面,例如數據管理(包括數據治理和質量)和DataOps。

? 在整個組織中公開和傳播數據的部署工具,包括數據目錄、數據血緣工具和元數據管理系統。

? 與軟件工程師、ML工程師、分析師和其他人高效協作。

? 創建一個人們可以在這里協作和公開發言的社區和環境,無論他們的角色或職位如何。

需要注意的問題包括:

? 在這個階段,自滿是一個重大危險。一旦組織達到第3階段,他們就必須不斷專注于維護和改進,否則就有退回到較低階段的風險。

? 與其他階段相比,技術干擾在這里是一個更大的危險。追求昂貴的業余項目是一種誘惑,這些項目不會為企業帶來價值。應該只在可提供競爭優勢的情況下使用自定義技術。

1.2.2 數據工程師的背景和技能

數據工程是一個快速發展的領域,關于如何成為一名數據工程師仍然存在很多問題。由于數據工程是一門相對較新的學科,因此進入該領域幾乎沒有正規培訓。大學沒有一個標準的數據工程路徑。盡管少數數據工程新手訓練營和在線教程涵蓋了一些隨機主題,但目前還不存在該主題的通用課程。

進入數據工程領域的人在教育、職業和技能方面有著不同的背景。每個進入該領域的人都應該投入大量的時間進行自學。閱讀本書是一個很好的起點。本書的主要目標之一是為你提供一個基礎,讓你了解我們認為作為數據工程師取得成功所必需的知識和技能。

如果你正在將你的職業生涯轉向數據工程,我們發現從一個鄰近的領域轉到數據工程是最容易的,比如軟件工程、ETL開發、數據庫管理、數據科學或數據分析。這些學科傾向于“數據感知”,并為組織中的數據角色提供良好的背景。它們還為人們提供相關的技術技能和背景,以解決數據工程問題。

盡管缺乏正式的路徑,但我們認為數據工程師應該要有一個必要的知識體系才能取得成功。根據定義,數據工程師必須同時了解數據和技術。在數據方面,數據工程師需要了解有關數據管理的各種最佳實踐。在技術方面,數據工程師必須了解各式各樣的工具的選擇、它們的相互作用以及它們的權衡。這需要對軟件工程、DataOps和數據架構有很好的理解。

放大來看,數據工程師還必須了解數據消費者(數據分析師和數據科學家)的需求以及數據對整個組織的更廣泛影響。數據工程是一種整體實踐,最好的數據工程師通過業務和技術視角來看待他們的職責。

1.2.3 業務職責

我們在本節中列出的宏觀職責并不是數據工程師獨有的,而是對于任何在數據或技術領域工作的人來說都至關重要的職責。因為一個簡單的谷歌搜索會產生大量資源來了解這些領域,所以為了簡潔起見,我們將簡單地列出它們:

知道如何與非技術人員和技術人員交流

溝通是關鍵,你需要能夠與整個組織的人建立融洽的關系和信任。我們建議密切關注組織層次結構、誰向誰報告、人們如何互動以及存在哪些孤島。這些觀察對于你的成功將是無價的。

了解如何界定并收集業務和產品需求

你需要知道要構建什么,并確保你的利益相關者同意你的評估。此外,培養對數據和技術決策如何影響業務的意識。

了解敏捷、DevOps和DataOps的文化基礎

許多技術專家錯誤地認為這些實踐可以通過技術解決。我們認為這是非常危險的錯誤。敏捷、DevOps和DataOps從根本上講是一種文化,需要整個組織的認同。

控制成本

當你能夠在提供巨大價值的同時保持低成本,你就會成功。了解如何針對實現價值的時間、總擁有成本和機會成本進行優化。學會監控成本以避免意外。

持續學習

數據領域讓人感覺像是在以光速變化。在這個領域取得成功的人非常善于掌握新事物,同時磨煉他們的基礎知識。他們還擅長篩選,確定哪些新發展與他們的工作最相關,哪些仍不成熟,哪些只是流行趨勢。保持專注并探索學習方法。

一個成功的數據工程師總是會放大視野以了解大局,并探索如何為企業實現巨大價值。無論對于技術人員還是非技術人員,溝通都是至關重要的。我們經??吹綌祿F隊的成功基于他們與其他利益相關者的溝通,成敗很少取決于技術。了解如何駕馭組織、確定范圍和收集需求、控制成本以及不斷學習,將使你與僅靠技術能力來開展職業的數據工程師區分開。

1.2.4 技術職責

你必須了解如何使用預先包裝或自行開發的組件構建可在較高層次上優化性能和成本的架構。最終,架構和組成技術是服務于數據工程生命周期的構建塊?;仡櫼幌聰祿こ躺芷诘母鱾€階段:

? 生成

? 存儲

? 獲取

? 轉換

? 服務

數據工程生命周期的底層設計如下:

? 安全

? 數據管理

? DataOps

? 數據架構

? 編排

? 軟件工程

放大一點,我們在本節中討論作為數據工程師需要的一些戰術數據和技術技能。我們將在后續章節中更詳細地討論這些內容。

人們經常問,數據工程師應該知道如何編碼嗎?簡短的回答是:是的。數據工程師應該具有生產級軟件工程能力。我們注意到,數據工程師所從事的軟件開發項目的性質在過去幾年中發生了根本性的變化。完全托管的服務現在取代了工程師以前期望的大量低級編程工作,工程師現在使用托管開源和簡單的即插即用軟件即服務(Software-as-a-Service,SaaS)產品。例如,數據工程師現在專注于高級抽象或將管道編寫為編排框架內的代碼。

即使在一個更抽象的世界中,軟件工程最佳實踐提供競爭優勢,而能夠深入研究代碼庫的深層架構細節的數據工程師在出現特定技術需求時可為他們的公司提供優勢。簡而言之,無法編寫生產級代碼的數據工程師將受到嚴重阻礙,而且我們認為這種情況不會很快改變。除了許多其他角色外,數據工程師仍然是軟件工程師。

數據工程師應該懂什么語言?我們將數據工程編程語言分為主要和次要類別。在撰寫本書時,數據工程的主要語言是SQL、Python、Java虛擬機(Java Virtual Machine,JVM)語言(通常是Java或Scala)和bash:

SQL

數據庫和數據湖最常用的接口。在因需要為大數據處理編寫自定義MapReduce代碼而被暫時擱置之后,SQL(以各種形式)重新成為數據的通用語言。

Python

數據工程和數據科學之間的橋梁語言。越來越多的數據工程工具是用Python編寫的或具有Python API(Application Programming Interface,應用程序接口)。它被稱為“所有方面第二好的語言”。Python是pandas、NumPy、Airflow、scikit-learn、TensorFlow、PyTorch和PySpark等流行數據工具的基礎。Python是底層組件之間的黏合劑,通常是用于與框架交互的一流API語言。

JVM語言,例如Java和Scala

流行于Apache開源項目,例如Spark、Hive和Druid。JVM通常比Python性能更高,并且可以提供對比Python API(例如,Apache Spark和Beam就是這種情況)更低級別的功能的訪問。如果你使用流行的開源數據框架,那么了解Java或Scala將大有裨益。

bash

Linux操作系統的命令行接口(Command Line Interface,CLI)。當你需要編寫腳本或執行操作系統操作時,了解bash命令并熟練使用CLI將顯著提高你的生產力和工作流。即使在今天,數據工程師也經常使用awk或sed等命令行工具來處理數據管道中的文件或從編排框架調用bash命令。如果你使用的是Windows,請隨時用PowerShell代替bash。

SQL的不合理有效性

MapReduce和大數據時代的出現使SQL退居二線。從那時起,各種發展極大地提高了SQL在數據工程生命周期中的實用性。Spark SQL、Google BigQuery、Snowflake、Hive和許多其他數據工具可以通過使用聲明式、集合論SQL語義來處理海量數據。許多流式框架也支持SQL,例如Apache Flink、Beam和Kafka。我們認為稱職的數據工程師應該非常精通SQL。

我們是說SQL是一種萬能的語言嗎?完全不是。SQL是一個強大的工具,可以快速解決復雜的分析和數據轉換問題。鑒于時間是數據工程團隊吞吐量的主要限制因素,工程師應該采用兼具簡單性和高生產率的工具。數據工程師還應該很好地培養將SQL與其他操作組合的專業知識,無論是在Spark和Flink等框架內組合,還是通過使用編排來組合多種工具。數據工程師還應該學習現代SQL語義來處理JavaScript Object Notation(JSON)解析和嵌套數據,并考慮利用SQL管理框架,例如dbt(Data Build Tool,數據構建工具;https://www.getdbt.com)。

專業的數據工程師可以識別SQL何時不是適合該工作的工具,并且可以選擇合適的替代方案并編寫代碼。SQL專家可能會編寫查詢以在自然語言處理(Natural Language Processing,NLP)管道中對原始文本進行詞干化和標記化,但也會認識到使用本機Spark進行編碼是這種受虐練習的更好替代方案。

數據工程師可能還需要熟練掌握輔助編程語言,包括R、JavaScript、Go、Rust、C/C++、C#和Julia。當這些語言在整個公司流行或與特定領域的數據工具一起使用時,數據工程師通常需要使用這些語言進行開發。例如,事實證明,JavaScript作為云數據倉庫中用戶定義函數的語言很受歡迎。同時,C#和PowerShell對于利用Azure和Microsoft生態系統的公司來說是必不可少的。

在快速發展的領域保持同步

一旦一項新技術碾過你,如果你不是壓路機的一部分,那么你就是道路的一部分。

——Stewart Brand

你如何在數據工程等瞬息萬變的領域中保持自己的技能高超?你應該關注最新的工具還是深入研究基礎知識?這是我們的建議:關注基本面以了解不會改變的東西;關注持續的發展,了解該領域的發展方向。新的范式和實踐一直在被引入,你有責任與時俱進。努力了解新技術將如何在生命周期中發揮作用。

1.2.5 數據工程角色的連續性,從A到B

盡管職位描述將數據工程師描繪成“獨角獸”,他必須具備所有可以想象到的數據技能,但數據工程師并非都從事相同類型的工作或擁有同樣的技能組合。數據成熟度是一個了解公司在提高數據能力時將面臨的數據挑戰類型的有用指導。查看數據工程師所做的工作類型的一些關鍵區別是有益的。雖然這些區別很簡單,但它們闡明了數據科學家和數據工程師的職責,并避免將任何一個角色混為一談。

在數據科學中,有A型和B型數據科學家[10]的概念。A型數據科學家——A代表分析(Analysis)——專注于理解數據并從中獲得洞察力。B型數據科學家——B代表構建(Building)——與A型數據科學家有著相似的背景,并擁有強大的編程技能。B型數據科學家建立使數據科學在生產中發揮作用的系統。借用這個數據科學家連續性,我們將為兩種類型的數據工程師創建一個類似的區別:

A型數據工程師

A代表抽象化(Abstraction)。在這種情況下,數據工程師避免了無差別的繁重工作,保持數據架構盡可能抽象和直接,而不是重新發明輪子。A型數據工程師主要通過使用完全現成的產品、托管服務和工具來管理數據工程生命周期。A型數據工程師在各行各業、各種等級的數據成熟度的公司中工作。

B型數據工程師

B代表構建(Build)。B型數據工程師建立數據工具和系統,以擴展和利用公司的核心競爭力和競爭優勢。在數據成熟度范圍內,B型數據工程師更常見于處于第2階段和第3階段(通過數據擴展和領先)的公司,或者當初始數據用例非常獨特且關鍵以至需要自定義數據工具來開始時。

A型和B型數據工程師可能在同一家公司工作,甚至可能是同一個人!更常見的是,首先聘請A型數據工程師來奠定基礎,然后B型數據工程師的技能組合是根據公司內部的需要再學習或聘用的。

主站蜘蛛池模板: 应用必备| 仙居县| 进贤县| 交城县| 翼城县| 米林县| 西平县| 新民市| 时尚| 英德市| 丹阳市| 集贤县| 县级市| 西宁市| 遂宁市| 通州区| 张家港市| 靖江市| 三河市| 镇巴县| 德阳市| 越西县| 泌阳县| 东兴市| 曲靖市| 洪泽县| 棋牌| 习水县| 开鲁县| 义乌市| 夏邑县| 南木林县| 乐东| 满洲里市| 交口县| 霍邱县| 雷山县| 法库县| 无极县| 昆山市| 金湖县|