大數據採集和抽取怎麼做?這篇文章終於說明白了!

来源:https://www.cnblogs.com/liuyanling/archive/2020/05/21/12933912.html
-Advertisement-
Play Games

本文來源於公眾號【胖滾豬學編程】,轉載請註明出處! 關於數據中台的概念和架構,我們在 "大白話 六問數據中台" 和 "數據中台全景架構及模塊解析!一文入門中台架構師!" 兩篇文章中都說明白了。從這一篇文章開始分享中台落地實戰。 其實無論是數據中台還是數據平臺,數據無疑都是核心中的核心,所以閉著眼睛想 ...


本文來源於公眾號【胖滾豬學編程】,轉載請註明出處!

關於數據中台的概念和架構,我們在大白話 六問數據中台數據中台全景架構及模塊解析!一文入門中台架構師!兩篇文章中都說明白了。從這一篇文章開始分享中台落地實戰。

其實無論是數據中台還是數據平臺,數據無疑都是核心中的核心,所以閉著眼睛想都知道數據匯聚是數據中台/平臺的入口。縱觀眾多中台架構圖,數據採集與匯聚都是打頭陣的:

10691149_055ec86555483798

本文將從以下幾個方面分享數據採集的方方面面:

一、企業數據來源
二、數據採集概念和價值
三、數據採集常用工具
四、數據採集系統設計原則
五、數據採集模塊生產落地分享

有來源才能談採集,因此我們先來歸納下企業中數據來源。

數據來源

企業中的數據來源極其多,但大都都離不開這幾個方面:資料庫,日誌,前端埋點,爬蟲系統等。

  • 資料庫我們不用多說,例如通常用mysql作為業務庫,存儲業務一些關鍵指標,比如用戶信息、訂單信息。也會用到一些Nosql資料庫,一般用於存儲一些不那麼重要的數據。

  • 日誌也是重要數據來源,因為日誌記錄了程式各種執行情況,其中也包括用戶的業務處理軌跡,根據日誌我們可以分析出程式的異常情況,也可以統計關鍵業務指標比如PV,UV。

  • 前端埋點同樣是非常重要的來源,用戶很多前端請求並不會產生後端請求,比如點擊,但這些對分析用戶行為具有重要的價值,例如分析用戶流失率,是在哪個界面,哪個環節用戶流失了,這都要靠埋點數據。

  • 爬蟲系統大家應該也不陌生了,雖然現在很多企業都聲明禁止爬蟲,但往往禁止爬取的數據才是有價值的數據,有些管理和決策就是需要競爭對手的數據作為對比,而這些數據就可以通過爬蟲獲取。

數據採集與抽取

剛剛說了這麼多數據,可是它們分散在不同的網路環境和存儲平臺中,另外不同的項目組可能還要重覆去收集同樣的數據,因此數據難以利用,難以復用、難以產生價值。數據匯聚就是使得各種異構網路、異構數據源的數據,方便統一採集到數據中台進行集中存儲,為後續的加工建模做準備。

  • 數據匯聚可以是實時接入,比如Flume實時採集日誌,比如Canal實時採集mysql的binlog。

  • 也可以是離線同步,比如使用sqoop離線同步mysql數據到hive,使用DataX將mongo數據同步到hive。

技術選型

數據採集常用框架有Flume、Sqoop、LogStash、DataX、Canal,還有一些不算很主流但同樣可以考慮的工具如WaterDrop、MaxWell。這些工具的使用都非常簡單,學習成本較低。只不過實際使用中可能會有一些細節問題。但是總體來說難度不大。

所以重點還是應該瞭解每種工具的適用範圍和優缺點。然後想清楚自己的需求是什麼,實時還是離線?從哪種數據源同步到哪裡?需要經過怎麼樣的處理?

Flume

Flume是一個分散式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統。
Flume可以採集文件,socket數據包等各種形式源數據,又可以將採集到的數據輸出到HDFS、hbase、hive、kafka等眾多外部存儲系統中。

10691149_32b23dc0ffc89682

Logstash

Logstash 即大名鼎鼎的ELK中的L。Logstash最常用於ELK(elasticsearch + logstash + kibane)中作為日誌收集器使用

10691149_d803b0a65ca88ee0

Logstash主要組成如下:

  • inpust:必須,負責產生事件(Inputs generate events),常用:File、syslog、redis、beats(如:Filebeats)
  • filters:可選,負責數據處理與轉換(filters modify them),常用:grok、mutate、drop、clone、geoip
  • outpus:必須,負責數據輸出(outputs ship them elsewhere),常用:elasticsearch、file、graphite、statsd

Sqoop

Sqoop主要用於在Hadoop(HDFS、Hive、HBase)與傳統的資料庫(mysql、postgresql…)間進行數據的傳遞,可以將一個關係型資料庫中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型資料庫中。

10691149_488139a284fb4105

Datax

DataX 是阿裡巴巴集團內被廣泛使用的離線數據同步工具/平臺,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構數據源之間高效的數據同步功能。

10691149_13f214e993ff230a

所支持的數據源如下,也可自行開發插件:

類型 數據源 Reader(讀) Writer(寫) 文檔
RDBMS 關係型資料庫 MySQL  、
Oracle  、
SQLServer  、
PostgreSQL  、
DRDS  、
通用RDBMS(支持所有關係型資料庫)  、
NoSQL數據存儲 OTS  、
Hbase0.94  、
Hbase1.1  、
Phoenix4.x  、
Phoenix5.x  、
MongoDB  、
Hive  、
Cassandra  、
無結構化數據存儲 TxtFile  、
FTP  、
HDFS  、
Elasticsearch
時間序列資料庫 OpenTSDB
TSDB  、

Canal

canal 主要用途是基於 MySQL 資料庫增量日誌解析,提供增量數據訂閱和消費
10691149_770fb1a502230c3b

怎麼用呢?啟動canal-server 連上MySQL,再使用canal-client連接canal-server接收數據變更消息,拿到對應表和變更數據之後自行觸發對應業務邏輯。更通用的是使用canal把數據變更直接投遞到消息隊列,使用消息隊列消費者來處理邏輯,另外還支持canal落地到ES等地方。圖中已經很詳細了!

由於篇幅問題,本文不對這些工具做詳細對比,想知道它們的優缺點嗎?想知道該如何選型嗎?去公眾號【胖滾豬學編程】找答案吧!

數據落地

採集之後必然需要將數據落地,即存儲層,常見的有:

  • MYSQL、Oracle
  • Hive、Hdfs
  • HBase
  • Redis
  • ElasticSearch
  • Tidb
  • Mongo

學習Hive、HBase、ElasticSearch、Redis、請關註公眾號【胖滾豬學編程】吧!

需要說明的是,數據採集之後往往會先發送給Kafka這種消息隊列,然後才真正落地到各種存儲層中。

數據匯聚設計原則

從中台的角度來考慮,筆者認為,數據匯聚層的設計需要考慮幾個關鍵的因素:

  • 設計之初就應該考慮支持各類數據源 ,支持不同來源、不同類型的數據源。數據匯聚層不是為某一種數據而生的,應該做到通用化。

  • 需要支持不同時間視窗的數據採集,實時的、非實時的、歷史的。

  • 操作友好簡單,即使是不懂技術的人,也可以方便的操作,進行數據同步;舉例mysql同步到hive,你不應該讓用戶去填寫複雜的sqoop任務參數,而是只需要選擇源表和目的表,其他事情都交給中台去完成。

  • 合理選擇存儲層,不同數據源應存儲在不同的地方,比如日誌數據肯定不適合mysql。

本文來源於公眾號【胖滾豬學編程】,轉載請註明出處!

生產落地分享

筆者馬上要開始分享公司真實落地案例了!網上文章千篇一律,極少數會有實戰落地分享!也歡迎各位大佬指教!

首先剛剛說到設計原則,應該考慮支持各類數據源 各類落地,應該分別考慮離線和實時採集、應該要操作友好簡單,不懂技術也可操作。我們整體的設計也是以這幾個原則作為指導的。想分別從離線和實時採集方面介紹一下公司落地方案:

離線採集

離線同步方面、在我司主要是會採集抽取如下圖所示的幾個數據源數據,最終落地到HIVE或者TIDB,落地到HIVE的作用我就不多說了,大家都比較熟悉。而落地到TIDB主要是支持實時查詢、實時業務分析以及各類定時跑批報表。

下麵通過mysql自助化同步到hive為例,分享自助化離線數據採集模塊的系統設計。

首先通過數據中台源數據管理模塊,將數據源的信息一一展示出來,用戶按需勾選同步:

10691149_027776983cdcd3f4

同步支持全量同步以及增量同步,支持附加配置,比如脫敏、加密、解密等。由於需要規範數倉表名、因此目的表名由系統自動生成,比如mysql同步到hive統一首碼ods_(後續在數倉規範中會詳細說明,敬請關註公眾號【胖滾豬學編程】)

10691149_3b407c372c4d2d6c

用戶點擊確認同步之後,首先會經過元數據管理系統,從元數據管理系統中查詢出同步任務所需要的元信息(包括ip,埠,賬戶密碼,列信息),組裝成sqoop參數,將同步信息(包括申請人、申請理由、同步參數等信息)記錄到mysql表中。然後調用工單系統經過上級領導審核。

工單系統審核後發消息給到mq,通過mq可實時獲取到工單審核狀態,如果審核通過,則在調度系統(基於EasyScheduler)自動生成任務,早期我司選擇Azkaban,後來發現EasyScheduler多方面都完勝Azkaban,尤其在易用性、UI、監控方面。

10691149_b1fc6d0af3dde027

從圖中可知mysql同步到hive涉及三個流程節點,以user表增量同步為例,第一步是通過sqoop任務將mysql數據同步到hive的ods_user_tmp表,第二步是將ods_user_tmp的數據merge到ods_user中(覆蓋原有分區),第三步是做數據檢驗。

除了mysql同步到hive,其他數據源的同步也大同小異,關鍵是定義好流程模板(通常是shell腳本)和流程依賴,然後利用調度系統進行調度。

實時採集

實時採集模塊,我司是基於Flink實時計算平臺,具有如下特性:

  • 支持多種數據源:Kafka、RocketMq、Hive等
  • 支持多種落地:Kafka、JDBC、HDFS、ElasticSearch、RocketMq、HIVE等
  • 通用sql處理:數據處理直接配置一條sql即可
  • 告警策略:支持多種告警策略,如流計算堆積batch的監測、應用的啟動退出等。

在設計原則上,也充分考慮了擴展性、易用性,source、process、sink\dim(維表)均為插件化開發,方面後續擴展,界面化配置,自動生成DAG圖,使得不懂技術的人也可以很快上手進行流計算任務開發:

10691149_c3d987134bf092e7

10691149_324c1588c2012b1e

由於篇幅問題,細節問題不能一一說清,本人將在公眾號【胖滾豬學編程】持續分享,歡迎關註。
wchat1

本文來源於公眾號【胖滾豬學編程】一個集顏值與才華於一身的女程式媛。以漫畫形式讓編程so easy and interesting。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [toc] ifconfig命令 功能說明:顯示或設置網路設備 用法 ifconfig [interface] [up|down] ifconfig interface options | address ... 選項 | 選項 | 說明 | | | | | a | 顯示所有介面的狀態,包括未激活的 ...
  • 1. -O (name) :指定文件名下載 wget -O test.png http://httpbin.org/image/png 2.--limite-rate :指定速度下載目標文件 wget --limite-rate=1k http://httpbin.org/image/png 3. ...
  • Nginx 處理一個 HTTP 請求的全過程 前面給大家講了 "Nginx 是如何處理 HTTP請求頭部的" ,接下來就到了真正處理 HTTP 請求的階段了。先看下麵這張圖,這張圖是 Nginx 處理 HTTP 請求的示意圖,雖然簡單,但是卻很好的說明瞭整個過程。 1. Read Request H ...
  • 這世界有10種人,一種人懂二進位,另一種人不懂二進位。 ——魯迅 大家好,我是良許。 二進位文件是我們幾乎每天都需要打交道的文件類型,但很少人知道他們的工作原理。這裡所講的二進位文件,是指一些可執行文件,包括你天天要使用的 Linux 命令,也是二進位文件的一種。 Linux 系統給我們提供了非常多 ...
  • 我們知道Windows系統有回收站的功能,正確設置後,當用戶刪除文件或文件夾時,操作系統會將這些“刪除”的文件或文件夾放到回收站中,而並沒有真正意義上的刪除文件。其實Linux系統中也可以模擬這樣的功能。下麵介紹一下GitHub上的一個非常有意思的項目,裡面有個腳本Saferm.sh可以模擬這種功能... ...
  • 常用命令 文件操作 命令 | 說明 | 例子 | | cd | 打開目錄 | cd program pwd | 列出當前路徑名稱 | ls | 列出當前目錄 | ls la 顯示目錄詳細內容 mkdir | 創建目錄 | mkdir dir_name touch file.format | 創建指定 ...
  • 1、首先查看VMware虛擬機網路配置 2、ip addr 查看虛擬機ip地址 3、輸入dhclient獲取動態ip地址,將ip地址記錄下拉 4、進入vi /etc/sysconfig/network-scripts/ifcfg-ens33 5、將bootproto改為static,將onboot改 ...
  • 上一篇寫了Redis複製功能的簡單應用,下麵我們看下Redis複製功能的實現過程。下麵基本上是理論部分,枯燥乏味,但希望大家能看看,畢竟知識不都是感興趣的.耐得住寂寞,經得起誘惑,方能守得住繁華 ~.~舊版複製功能的實現 Redis的複製功能分為同步和命令傳播兩個操作: 1、同步操作用於將從伺服器的 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...