postgresql 怎么讀_大數據采集和抽取怎么做?這篇文章終于說明白了!

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

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

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

d8ba52607dcbe4070952011db84263d0.png

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

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

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

數據來源

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

  • 數據庫我們不用多說,例如通常用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等眾多外部存儲系統中。

fd238c33f954183b600fb0addcd48952.png

Logstash

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

a74917f954ec22024c892b1739404fbf.png

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的數據導進到關系型數據庫中。

e4b66b919f28c53eb616f58a04342f0a.png

Datax

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

8f36a192d24f225c07e652894fd59b47.png

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

類型 數據源 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 數據庫增量日志解析,提供增量數據訂閱和消費

6b5acfd044a56f1cd2b7749f5ec9ce04.png

怎么用呢?啟動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為例,分享自助化離線數據采集模塊的系統設計。

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

9da99e510e69bcc7e0b3c2e8c62621fb.png

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

2e654c1b327285108908ffe9eeb2309d.png

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

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

ddb813279939ba22e4d548c5776e6b5b.png

從圖中可知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、sinkdim(維表)均為插件化開發,方面后續擴展,界面化配置,自動生成DAG圖,使得不懂技術的人也可以很快上手進行流計算任務開發:

b43e305037a0480af57e826d2cbeae1d.png

34c1bc3f0285217365f57c35c4be28db.png

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

88a7650099d6f0a17752c49ce0905a64.png

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537600.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537600.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537600.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ZooKeeper應用——解決分布式系統單點故障

1.單點故障問題什么是分布式系統中的單點故障:通常分布式系統采用主從模式,就是一個主控機連接多個處理節點。主節點負責分發任務,從節點負責處理任務,當我們的主節點發生故障時,那么整個系統就都癱瘓了,那…

老板思維:有支出必須有對應的收入

項目經理 要時刻關注“有支出必須有對應的收入”。 當手頭的項目產生支出時,必須要問自己,從哪里收入來填補這個支出,如果沒有可收入的,那就是公司虧錢了。如果一定要虧錢,那可否產生收入之外的效益。 甲方提了新需求…

生活之難:生活到底難在哪里

生活之難:生活到底難在哪里 一、總結 一句話總結:難在天性,難在競爭,難在積累,難在追求,難在自己 難在天性 人的天性就是好吃懶做好玩不動腦的,但是生存的壓力(食物,房子…

解決org.springframework.web.multipart.MaxUploadSizeExceededException報錯問題

在springboot中接收到上傳的文件時候,出現了這種錯誤 org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.Fil…

python中元祖 字典 列表的區別_Python中元祖,列表,字典的區別

原博文 2016-08-16 15:25 ? Python中有3種內建的數據結構:列表、元祖和字典: 1.列表 list是處理一組有序項目的數據結構,即你可以在一個列表中存儲一個序列的項目。 列表中的項目應該包括在方括號中,這樣Python就知道你是指明一個…

react 16.6 懶加載 Lazy 嘗鮮

react 16.6 發布了新的功能 lazy ,和一個組件 Suspense 下面我們看一下他的用法 首先我們先創建兩個組件 LazyTest.1 和 LazyTest.2,內容相同 import React, { Component } from reactexport default class LazyTest extends Component{render(){return …

Intellij IDEA展示類中的方法樹形結構

在intellij Idea中叫Structure(結構體),如下圖; 也可以直接AltF7快捷鍵,這樣默認會把Structure顯示在屏幕下方,如下圖操作就可以移動到右側。 效果如下:

時間計算題100道_2019四校及分校自招開放日情況匯總(含時間安排、考試內容難度、到場人數等)...

點擊上方“上海初升高”,選擇“星標公眾號”回復“加群”就能加入上萬家長信賴的升學群受到疫情的影響,今年各市重點的自招開放日報名遲遲沒有提上日程。但不管怎樣,自招應該是不會取消的,以下是去年四校及分校自招開放日情況匯總…

linux I/O 棧 預習(上)

二、預習 在我們進去device mapper的dm dedup學習之前,我們先要預習一下,什么是device mapper,和為什么device mapper能夠做塊重刪。 1、device mapper照舊,我們先看一下維基百科對它的介紹。The device mapper is a framework pr…

java.util.concurrent.RejectedExecutionException

報錯日志 java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask12e2cb93 rejected from java.util.concurrent.ThreadPoolExecutor6ecd396b[Running, pool size 10, active threads 10, queued tasks 200, completed tasks 0] 原因&am…

springboot controller 訪問 404

兩種解決方式: 1、因為SpringBoot的項目啟動類,會只掃描該包下的文件或者改包下所有子包內的文件,只要你把該文件移動到啟動類的相同目錄報下就可以。 2、就是在該類上面加者在啟動類上添加注解 ComponentScan(basePackages {"com.boota…

fegin需要實現類_【第24條】靜態成員類優于非靜態成員類

第24條靜態成員類優于非靜態成員類嵌套類(nested class)是指定義在另一個類的內部的類。嵌套類存在的目的應該只是為它的外圍類(enclosing class)提供服務。如果嵌套類將來可能會用于其他的某個環境中,它就應該是頂層類(top-level class)。嵌套類有四種:…

.h與.cpp

本質上沒什么區別。 cpp:c plus plus,就表示為c原文件。 .h文件實現的功能是聲明.cpp文件中需要使用的變量、函數及宏定義等。 .h文件就像是一個接口,具體的實現可以在.cpp中,也可以在.h中。轉載于:https://www.cnblogs.com/keguniang/p/9877581.html

Springboot 多線程的使用

直接上代碼 線程配置類 package zengmg.nbpi.com.thread;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework…

vlookup函數練習_為什么職場要學excel函數?看這個案例演示:自動計算快遞價格...

在上一篇文章里面,我們講了如何整理完成一個規范化的表格,以便于下一步的函數計算。最初的信息內容如圖所示。經過整理,我們得到了表2這樣的規范化表格。現在,我們就通過表2來實現快遞費用自動計算,最終實現圖中這樣的…

%@ taglib prefix=c uri=http://java.sun.com/jsp/jstl/core %會報錯

有些時候&#xff0c;<% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core" %>會報錯&#xff0c;錯誤提示為&#xff1a; Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core" 主要原因是缺少 jst…

藍牙芯片排行_7月TWS 全球品牌出貨量排行榜出爐

數據鑄造影響力撰文 / 旭日大數據編輯 / 柏序旭日大數據公布了2020年7月全球TWS品牌銷量排行榜&#xff0c;與上期數據相比&#xff0c;全球品牌七排名TOP20汰換率為15%&#xff0c;其中DOSS&#xff0c;萬魔、BOSE跌出前20&#xff0c;廣州由我&#xff0c;Tzumi登榜&…

project 打印的時候上面的表格和下面的圖例中間有個很大的空白,這塊東西怎么能去掉呢?

“打印預覽”的“頁面設置”里面&#xff0c;“頁面”選項卡里的“縮放”項設為1頁寬&#xff0c;1頁高就可以了&#xff0c; 當然如果你的任務項比較少的話&#xff0c;怎么調也不容易去掉下面的空白 操作如下圖&#xff08;下圖的任務太少&#xff0c;去不掉空白的&#xf…

加密機工作原理_端子機壓力檢測裝置工作原理

上期我們介紹了端子機壓力管理裝置的使用常識&#xff0c;這期我們介紹端子機壓力管理裝置的工作原理&#xff0c;端子機壓接管理裝置&#xff0c;有單通道壓力監測和雙通道壓力監測二種&#xff0c;雙通道壓力監測裝置&#xff0c;一般用于雙頭端子壓接機上&#xff0c;一臺主…

win10解決java多版本java -version問題

電腦環境 先安裝了Jdk8&#xff0c;后安裝了jdk11.&#xff08;發現Jdk11沒有單獨的jre&#xff0c;官網也不提供下載&#xff0c;集成在一起了&#xff09; Java -version 將環境變量切換為 JDK11 后 javac -version 是 java編譯環境是jdk11了&#xff0c;但 java -versio…