一文讀懂大數據平臺-寫給大數據開發初學者的話 (轉)

来源:https://www.cnblogs.com/IT-Evan/archive/2019/10/17/11689674.html
-Advertisement-
Play Games

導讀 第一章:初識Hadoop 第二章:更高效的WordCount 第三章:把別處的數據搞到Hadoop上 第四章:把Hadoop上的數據搞到別處去 第五章:快一點吧,我的SQL 第六章:一夫多妻制 第七章:越來越多的分析任務 第八章:我的數據要實時 第九章:我的數據要對外 第十章:牛逼高大上的機器 ...


導讀

第一章:初識Hadoop

第二章:更高效的WordCount

第三章:把別處的數據搞到Hadoop上

第四章:把Hadoop上的數據搞到別處去

第五章:快一點吧,我的SQL

第六章:一夫多妻制

第七章:越來越多的分析任務

第八章:我的數據要實時

第九章:我的數據要對外

第十章:牛逼高大上的機器學習

經常有初學者會問,自己想往大數據方向發展,該學哪些技術,學習路線是什麼樣的,覺得大數據很火,就業很好,薪資很高……首先,如果你確定了想往這個方面發展,先考慮自己的過去從業經歷、專業、興趣是什麼。電腦專業——操作系統、硬體、網路、伺服器?軟體專業——軟體開發、編程、寫代碼?還是數學、統計學專業——對數據和數字特別感興趣?

其實這就是想告訴你大數據的三個發展方向,平臺搭建/優化/運維/監控、大數據開發/設計/架構、數據分析/挖掘。

本人對於大數據學習創建了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習大數據。歡迎各位到來大數據學習群:868847735 一起討論視頻分享學習。大數據是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎接變化,並不斷的成長,掌握大數據核心技術,才是掌握真正的價值所在。

先扯一下大數據的4V特征:

數據量大,TB->PB

數據類型繁多,結構化、非結構化文本、日誌、視頻、圖片、地理位置等;

商業價值高,但是這種價值需要在海量數據之上,通過數據分析與機器學習更快速的挖掘出來;

處理時效性高,海量數據的處理需求不再局限在離線計算當中。

現如今,正式為了應對大數據的這幾個特點,開源的大數據框架越來越多,越來越強,先列舉一些常見的:

文件存儲:Hadoop HDFS、Tachyon、KFS

離線計算:Hadoop MapReduce、Spark

流式、實時計算:Storm、Spark Streaming、S4、Heron

K-V、NOSQL資料庫:HBase、Redis、MongoDB

資源管理:YARN、Mesos

日誌收集:Flume、Scribe、Logstash、Kibana

消息系統:Kafka、StormMQ、ZeroMQ、RabbitMQ

查詢分析:Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid

分散式協調服務:Zookeeper

集群管理與監控:Ambari、Ganglia、Nagios、Cloudera Manager

數據挖掘、機器學習:Mahout、Spark MLLib

數據同步:Sqoop

任務調度:Oozie

······

第一章:初識Hadoop

1.1 學會百度與Google

不論遇到什麼問題,先試試搜索並自己解決。

Google首選,翻不過去的,就用百度吧。

1.2 參考資料首選官方文檔

特別是對於入門來說,官方文檔永遠是首選文檔。

相信搞這塊的大多是文化人,英文湊合就行,實在看不下去的,請參考第一步。

1.3 先讓Hadoop跑起來

Hadoop可以算是大數據存儲和計算的開山鼻祖,現在大多開源的大數據框架都依賴Hadoop或者與它能很好的相容。

關於Hadoop,你至少需要搞清楚以下是什麼:

Hadoop 1.0、Hadoop 2.0

MapReduce、HDFS

NameNode、DataNode

JobTracker、TaskTracker

Yarn、ResourceManager、NodeManager

自己搭建Hadoop,請使用第一步和第二步,能讓它跑起來就行。

建議先使用安裝包命令行安裝,不要使用管理工具安裝。

另外:Hadoop1.0知道它就行了,現在都用Hadoop 2.0.

1.4 嘗試使用Hadoop

HDFS目錄操作命令;

上傳、下載文件命令;

提交運行MapReduce示常式序;

打開Hadoop WEB界面,查看Job運行狀態,查看Job運行日誌。

知道Hadoop的系統日誌在哪裡。

1.5瞭解它們的原理

MapReduce:如何分而治之;

HDFS:數據到底在哪裡,什麼是副本;

Yarn到底是什麼,它能幹什麼;

NameNode到底在幹些什麼;

ResourceManager到底在幹些什麼;

1.6 自己寫一個MapReduce程式

仿照WordCount例子,自己寫一個(照抄也行)WordCount程式,

打包並提交到Hadoop運行。

不會Java的話,Shell、Python都可以,有個東西叫Hadoop Streaming。

如果能認真完成了以上幾步,恭喜你,你的一隻腳已經進來了。

第二章:更高效的WordCount

2.1 學點SQL吧

如果不懂資料庫的童鞋先學習使用SQL句。

2.2 SQL版WordCount

在1.6中,你寫(或者抄)的WordCount一共有幾行代碼?

如果用SQL的話:

SELECT word,COUNT(1) FROM wordcount GROUP BY word;

這便是SQL的魅力,編程需要幾十行,甚至上百行代碼,SQL一句就搞定;使用SQL處理分析Hadoop上的數據,方便、高效、易上手、更是趨勢。不論是離線計算還是實時計算,越來越多的大數據處理框架都在積極提供SQL介面。

2.3 安裝配置Hive

Hive算是數據倉庫工具,安裝不難,網上有很多教程,配置完成後,可以正常進入Hive命令行。

2.4 試試使用Hive

嘗試在Hive中創建wordcount表,並運行2.2中的SQL語句。在Hadoop WEB界面中找到剛纔運行的SQL任務。看SQL查詢結果是否和1.4中MapReduce中的結果一致。

明明寫的是SQL,為什麼Hadoop WEB界面中看到的是MapReduce任務?

2.5 學會Hive的基本命令

創建、刪除表;載入數據到表;下載Hive表的數據;並學習更多關於Hive的語法和命令。

以上如果按照第一章和第二章的流程認真完整的走了一遍後,應該已經具備以下技能和知識點:

0和Hadoop2.0的區別

MapReduce的原理(還是那個經典的題目,一個10G大小的文件,給定1G大小的記憶體,如何使用Java程式統計出現次數最多的10個單詞及次數);

HDFS讀寫數據的流程;向HDFS中PUT數據;從HDFS中下載數據;

自己會寫簡單的MapReduce程式,運行出現問題,知道在哪裡查看日誌;

會寫簡單的SELECT、WHERE、GROUP BY等SQL語句;

Hive SQL轉換成MapReduce的大致流程;

Hive中常見的語句:創建表、刪除表、往表中載入數據、分區、將表中數據下載到本地;

從上面的學習,你已經瞭解到,HDFS是Hadoop提供的分散式存儲框架,它可以用來存儲海量數據,MapReduce是Hadoop提供的分散式計算框架,它可以用來統計和分析HDFS上的海量數據,而Hive則是SQL On Hadoop,Hive提供了SQL介面,開發人員只需要編寫簡單易上手的SQL語句,Hive負責把SQL翻譯成MapReduce,提交運行。

此時,你的認知中“大數據平臺”是這樣的:

 

那麼問題來了,海量數據如何到HDFS上呢?

第三章:把別處的數據搞到Hadoop上

此處也可以叫做數據採集,把各個數據源的數據採集到Hadoop上。

3.1 HDFS PUT命令

put命令在實際環境中也比較常用,通常配合shell、python等腳本語言來使用。建議需熟練掌握。

3.2 HDFS API

HDFS提供了寫數據的API,自己用編程語言將數據寫入HDFS,put命令本身也是使用API。

實際環境中一般自己較少編寫程式使用API來寫數據到HDFS,通常都是使用其他框架封裝好的方法。比如:Hive中的INSERT語句,Spark中的saveAsTextfile等。

可以嘗試瞭解原理,試著寫幾個Demo。

3.3 Sqoop

Sqoop是一個主要用於Hadoop/Hive與傳統關係型資料庫Oracle/MySQL/SQLServer等之間進行數據交換的開源框架。

就像Hive把SQL翻譯成MapReduce一樣,Sqoop把你指定的參數翻譯成MapReduce,提交到Hadoop運行,完成Hadoop與其他資料庫之間的數據交換。

自己下載和配置Sqoop(建議先使用Sqoop1,Sqoop2比較複雜)。

瞭解Sqoop常用的配置參數和方法。

使用Sqoop完成從MySQL同步數據到HDFS;

使用Sqoop完成從MySQL同步數據到Hive表;

PS:如果後續選型確定使用Sqoop作為數據交換工具,那麼建議熟練掌握,否則,瞭解和會用Demo即可。

3.4 Flume

Flume是一個分散式的海量日誌採集和傳輸框架,因為“採集和傳輸框架”,所以它並不適合關係型資料庫的數據採集和傳輸。Flume可以實時的從網路協議、消息系統、文件系統採集日誌,並傳輸到HDFS上。因此,如果你的業務有這些數據源的數據,並且需要實時的採集,那麼就應該考慮使用Flume。

下載和配置Flume。使用Flume監控一個不斷追加數據的文件,並將數據傳輸到HDFS;

PS:Flume的配置和使用較為複雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。

3.5 阿裡開源的DataX

之所以介紹這個,是因為以前某公司客戶目前使用的Hadoop與關係型資料庫數據交換的工具,就是之前基於DataX開發的,個人感覺非常好用。現在DataX已經是3.0版本,支持很多數據源。你也可以在其之上做二次開發。

PS:有興趣的可以研究和使用一下,對比一下它與Sqoop。

至此,你的“大數據平臺”應該是這樣的:

 

第四章:把Hadoop上的數據搞到別處去

前面介紹瞭如何把數據源的數據採集到Hadoop上,數據到Hadoop上之後,便可以使用Hive和MapReduce進行分析了。那麼接下來的問題是,分析完的結果如何從Hadoop上同步到其他系統和應用中去呢?

其實此處的方法和第三章基本一致的。

4.1 HDFS GET命令

把HDFS上的文件GET到本地。需要熟練掌握。

4.2 HDFS API

原理同3.2.

4.3 Sqoop

原理同3.3。

使用Sqoop完成將HDFS上的文件同步到MySQL;

使用Sqoop完成將Hive表中的數據同步到MySQL;

4.4 DataX

原理同3.4

此時,“你的大數據平臺”應該是這樣的:

 

走完第三章和第四章的流程,那麼你應該已經具備以下技能和知識點:

知道如何把已有的數據採集到HDFS上,包括離線採集和實時採集;

知道sqoop(或者還有DataX)是HDFS和其他數據源之間的數據交換工具;

知道flume可以用作實時的日誌採集;

至此,對於大數據平臺,應該已經掌握如何搭建Hadoop集群,把數據採集到Hadoop上,使用Hive和MapReduce來分析數據,把分析結果同步到其他數據源。

接下來的問題就是,Hive使用的越來越多,你會發現很多不愉快的地方,特別是速度慢,

大多情況下,明明我的數據量很小,它都要申請資源,啟動MapReduce來執行。

第五章:快一點吧,我的SQL

其實大家都已經發現Hive後臺使用MapReduce作為執行引擎,實在是有點慢。因此SQL On Hadoop的框架越來越多,按我的瞭解,最常用的按照流行度依次為SparkSQL、Impala和Presto.這三種框架基於半記憶體或者全記憶體,提供了SQL介面來快速查詢分析Hadoop上的數據。

目前我們的方案使用的是SparkSQL,至於為什麼用SparkSQL,原因大概如下:

使用Spark還做了其他事情,不想引入過多的框架;

Impala對記憶體的需求太大,沒有過多資源部署;

5.1 關於Spark和SparkSQL

什麼是Spark,什麼是SparkSQL。

Spark有的核心概念及名詞解釋。

SparkSQL和Spark是什麼關係,SparkSQL和Hive是什麼關係。

SparkSQL為什麼比Hive跑的快。

5.2 如何部署和運行SparkSQL

Spark有哪些部署模式?

如何在Yarn上運行SparkSQL?

使用SparkSQL查詢Hive中的表。

PS:Spark不是一門短時間內就能掌握的技術,因此建議在瞭解了Spark之後,可以先從SparkSQL入手,循序漸進。

如果認真完成了上面的學習和實踐,此時,你的”大數據平臺”應該是這樣的:

 

第六章:一夫多妻制

其實我想說的是數據的一次採集、多次消費。

在實際業務場景下,特別是對於一些監控日誌,想即時的從日誌中瞭解一些指標(關於實時計算,後面章節會有介紹),這時候,從HDFS上分析就太慢了,儘管是通過Flume採集的,但Flume也不能間隔很短就往HDFS上滾動文件,這樣會導致小文件特別多。

為了滿足數據的一次採集、多次消費的需求,這裡要說的便是Kafka。

6.1 關於Kafka

Kafka是一種高吞吐量的分散式發佈訂閱消息系統,它可以處理消費者規模的網站中的所有動作流數據。這種動作(網頁瀏覽,搜索和其他用戶的行動)是在現代網路上的許多社會功能的一個關鍵因素。這些數據通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。

6.2 如何部署和使用Kafka

使用單機部署Kafka,併成功運行自帶的生產者和消費者例子。

使用Java程式自己編寫並運行生產者和消費者程式。

Flume和Kafka的集成,使用Flume監控日誌,並將日誌數據實時發送至Kafka。

關於Kafka

至此,“大數據平臺”應該擴充成這樣:

 

這時,使用Flume採集的數據,不是直接到HDFS上,而是先到Kafka,Kafka中的數據可以由多個消費者同時消費,其中一個消費者,就是將數據同步到HDFS。

總結:

為什麼Spark比MapReduce快。

使用SparkSQL代替Hive,更快的運行SQL。

使用Kafka完成數據的一次收集,多次消費架構。

自己可以寫程式完成Kafka的生產者和消費者。

前面的學習已經掌握了大數據平臺中的數據採集、數據存儲和計算、數據交換等大部分技能,而這其中的每一步,都需要一個任務(程式)來完成,各個任務之間又存在一定的依賴性,比如,必須等數據採集任務成功完成後,數據計算任務才能開始運行。如果一個任務執行失敗,需要給開發運維人員發送告警,同時需要提供完整的日誌來方便查錯。

第七章:越來越多的分析任務

不僅僅是分析任務,數據採集、數據交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平臺中有幾百上千個任務需要維護和運行時候,僅僅靠crontab遠遠不夠了,這時便需要一個調度監控系統來完成這件事。調度監控系統是整個數據平臺的中樞系統,類似於AppMaster,負責分配和監控任務。

7.1 Apache Oozie

1. Oozie是什麼?有哪些功能?

2. Oozie可以調度哪些類型的任務(程式)?

3. Oozie可以支持哪些任務觸發方式?

4.安裝配置Oozie。

7.2 其他開源的任務調度系統

Azkaban

light-task-scheduler

alibaba/zeus

……

此時:

 

第八章:數據要實時

在第六章介紹Kafka的時候提到了一些需要實時指標的業務場景,實時基本可以分為絕對實時和準實時,絕對實時的延遲要求一般在毫秒級,準實時的延遲要求一般在秒、分鐘級。對於需要絕對實時的業務場景,用的比較多的是Storm,對於其他準實時的業務場景,可以是Storm,也可以是Spark Streaming。當然,如果可以的話,也可以自己寫程式來做。

8.1 Storm

1. 什麼是Storm?有哪些可能的應用場景?

2. Storm由哪些核心組件構成,各自擔任什麼角色?

3. Storm的簡單安裝和部署。

4. 自己編寫Demo程式,使用Storm完成實時數據流計算。

8.2 Spark Streaming

1. 什麼是Spark Streaming,它和Spark是什麼關係?

2. Spark Streaming和Storm比較,各有什麼優缺點?

3. 使用Kafka + Spark Streaming,完成實時計算的Demo程式。

此時:

 

至此,大數據平臺底層架構已經成型了,其中包括了數據採集、數據存儲與計算(離線和實時)、數據同步、任務調度與監控這幾大模塊。接下來是時候考慮如何更好的對外提供數據了。

第九章:數據要對外

通常對外(業務)提供數據訪問,大體上包含以下方面:

離線:比如,每天將前一天的數據提供到指定的數據源(DB、FILE、FTP)等;

離線數據的提供可以採用Sqoop、DataX等離線數據交換工具。

實時:比如,線上網站的推薦系統,需要實時從數據平臺中獲取給用戶的推薦數據,這種要求延時非常低(50毫秒以內)。

根據延時要求和實時數據的查詢需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。

OLAP分析:OLAP除了要求底層的數據模型比較規範,另外,對查詢的響應速度要求也越來越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的數據模型比較規模,那麼Kylin是最好的選擇。

即席查詢:即席查詢的數據比較隨意,一般很難建立通用的數據模型,因此可能的方案有:Impala、Presto、SparkSQL。

這麼多比較成熟的框架和方案,需要結合自己的業務需求及數據平臺技術架構,選擇合適的。原則只有一個:越簡單越穩定的,就是最好的。

如果你已經掌握瞭如何很好的對外(業務)提供數據,那麼你的“大數據平臺”應該是這樣的:

 

第十章:牛逼高大上的機器學習

這裡本人也沒有接觸太多,稍微講一下我們的業務場景應用,遇到的能用機器學習解決的問題大概這麼三類:

分類問題:包括二分類和多分類,二分類就是解決了預測的問題,就像預測一封郵件是否垃圾郵件;多分類解決的是文本的分類;

聚類問題:從用戶搜索過的關鍵詞,對用戶進行大概的歸類。

推薦問題:根據用戶的歷史瀏覽和點擊行為進行相關推薦。

大多數行業,使用機器學習解決的,也就是這幾類問題。

入門學習線路:

數學基礎;

機器學習實戰(Machine Learning in Action),懂Python最好;

SparkMlLib提供了一些封裝好的演算法,以及特征處理、特征選擇的方法。

那麼把機器學習部分加進 “大數據平臺”。

 

 


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

-Advertisement-
Play Games
更多相關文章
  • button drive 傑傑自己寫的一個按鍵驅動,支持單雙擊、連按、長按;採用回調處理按鍵事件(自定義消抖時間),使用只需3步,創建按鍵,按鍵事件與回調處理函數鏈接映射,周期檢查按鍵。 源碼地址: "https://github.com/jiejieTop/ButtonDrive" 。作者: "傑 ...
  • 基於Linux的kfifo移植到STM32(支持os的互斥訪問) 關於kfifo kfifo是內核裡面的一個First In First Out數據結構,它採用環形迴圈隊列的數據結構來實現;它提供一個無邊界的位元組流服務,最重要的一點是,它使用並行無鎖編程技術,即當它用於只有一個入隊線程和一個出隊線程 ...
  • 隊列的概念 在此之前,我們來回顧一下隊列的基本概念: 隊列 (Queue):是一種先進先出(First In First Out ,簡稱 FIFO)的線性表,只允許在一端插入(入隊),在另一端進行刪除(出隊)。 隊列的特點 類似售票排隊視窗,先到的人看到能先買到票,然後先走,後來的人只能後買到票 隊 ...
  • 本文介紹一種Cortex M內核中的精確延時方法 前言 為什麼要學習這種延時的方法? 1. 很多時候我們跑操作系統,就一般會占用一個硬體定時器——SysTick,而我們一般操作系統的時鐘節拍一般是設置100 1000HZ,也就是1ms——10ms產生一次中斷。很多裸機教程使用延時函數又是基於SysT ...
  • STM32之串口DMA接收不定長數據 引言 在使用stm32或者其他單片機的時候,會經常使用到串口通訊,那麼如何有效地接收數據呢?假如這段數據是不定長的有如何高效接收呢? 同學A:數據來了就會進入串口中斷,在中斷中讀取數據就行了! 中斷就是打斷程式正常運行,怎麼能保證高效呢?經常把主程式打斷,主程式 ...
  • 好用的軟體/終端 命令別名 ip切換 imgcat 終端查看圖片 autojump 目錄快捷跳轉 titan 密碼記錄工具 tldr man 的簡單版,線上查詢linux命令示例 ssh 別名/免密碼登錄 ps 行含義 htop awk parallels descktop Jump Desktop ...
  • 一、打開CMD,進入想安裝的目錄,輸入如下圖所示,安裝一個blog的項目: 二、進入指定目錄即可看到生成的blog項目,如下圖: ...
  • 我們使用 linux 文件系統擴展屬性,能夠對linux文件系統進行進一步保護;從而給文件 賦予一些額外的限制;在有些情況下,能夠對我們的系統提供保護; chattr命令用來改變文件屬性。這項指令可改變存放在ext2文件系統上的文件或目錄屬性,這些屬性共有以下8種模式:詳細作用,可以查看man手冊 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...