我是中國移動研究院的資深架構(gòu)師常耀斌。2007年,我加入中國電科,參與并主導(dǎo)設(shè)計的“全軍一體化指揮作戰(zhàn)平臺”榮獲國家科技進步特等獎。2009年,我出任華為云第一代架構(gòu)師,帶領(lǐng)團隊研制并運營了國內(nèi)首個公有云平臺?;厥?0年多的科研工作歷程,也是中國經(jīng)濟高速發(fā)展的10多年,中國高鐵、核電、航空、互聯(lián)網(wǎng)、云計算、大數(shù)據(jù)、人工智能等領(lǐng)域無不銘刻著“中國名片”,這就是科技是第一生產(chǎn)力的實踐驗證!2007年,獲得北郵計算機工學(xué)碩士后信心滿滿的踏上了科研之路,一干就是十多年,有苦有淚有艱辛,但收獲的是一種為國家科技發(fā)展能奉獻和敢擔(dān)當(dāng)?shù)呢?zé)任感。
今天,又一次站在了移動互聯(lián)網(wǎng)這個朝陽產(chǎn)業(yè)的跑道上,和諸多大數(shù)據(jù)和人工智能的世界級大咖共商創(chuàng)新發(fā)展!2012年加入中國移動集團研究院,擔(dān)任資深大數(shù)據(jù)專家和研究員,主攻大數(shù)據(jù)和人工智能平臺架構(gòu)設(shè)計和關(guān)鍵技術(shù)研究,并多次受邀在大數(shù)據(jù)行業(yè)和主流峰會進行學(xué)術(shù)交流,在見證我的學(xué)生們歷練為BAT/TMD的技術(shù)專家同時,也悄然實現(xiàn)著我的技術(shù)夢想-讓高科技研發(fā)標(biāo)準(zhǔn)化和平民化。今天有幸分享商用大數(shù)據(jù)平臺研發(fā)經(jīng)驗,讓大數(shù)據(jù)知識圖譜在各位的腦海里轉(zhuǎn)起來,并形成商用產(chǎn)品的作戰(zhàn)體系,這是“作為架構(gòu)師,何謂正確?”的行動基礎(chǔ)。我分享四大部分:知識分類,系統(tǒng)架構(gòu),核心技術(shù),經(jīng)驗分享。具體如下:
大數(shù)據(jù)知識結(jié)構(gòu)歸類:
* 文件存儲:
Hadoop HDFS、Tachyon、KFS
* 離線計算:
Hadoop MapReduce、Spark
* 流式、實時計算:
Storm、Spark Streaming
* K-V、NOSQL數(shù)據(jù)庫:
HBase、Redis、MongoDB
* 資源管理:
YARN、Mesos
* 日志收集:
Flume、Scribe、Logstash、Kibana
* 消息系統(tǒng):
Kafka、StormMQ、ZeroMQ、RabbitMQ
* 查詢分析:
Hive、Impala、Pig、SparkSQL、Flink
* 分布式協(xié)調(diào)服務(wù):
Zookeeper
* 集群管理與監(jiān)控:
Ambari、Ganglia、Nagios、Cloudera Manager
* 數(shù)據(jù)挖掘、機器學(xué)習(xí):
Mahout、Spark MLLib
* 數(shù)據(jù)同步:
Sqoop
* 任務(wù)調(diào)度:
Oozie
知識匯總及系統(tǒng)架構(gòu)形成:
以物聯(lián)網(wǎng)大數(shù)據(jù)平臺的架構(gòu)為例,圍繞著這條主線:基礎(chǔ)架構(gòu)-》離線分析-》離線遷移-》離線同步-》實時計算-》實時交換-》實時調(diào)度-》實時存儲-》智能分析。
核心技術(shù)(10個單元)
第一單元:基礎(chǔ)架構(gòu)-Hadoop的破冰之旅
Hadoop是一個由Apache基金會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。Hadoop是實現(xiàn)了真正意義上的去“IOE”,尤其是開啟了擺脫國外高科技公司的全球壟斷時代,讓全球用戶可以輕松地在免費的Hadoop上開發(fā)和運行處理海量數(shù)據(jù)的應(yīng)用程序。建議先把Hadoop集群構(gòu)建起來,具體操作見我的博客:https://blog.csdn.net/peter_changyb/article/details/81195920。它主要有以下幾個優(yōu)點:
* 高可靠性。
Hadoop按位存儲和處理數(shù)據(jù)的能力值得人們信賴。
* 高擴展性。
Hadoop是在可用的計算機集簇間分配數(shù)據(jù)并完成計算任務(wù)的,這些集簇可以方便地擴展到數(shù)以千計的節(jié)點中。
* 高效性。
Hadoop能夠在節(jié)點之間動態(tài)地移動數(shù)據(jù),并保證各個節(jié)點動態(tài)平衡,因此處理速度非常快。
* 高容錯性。
Hadoop能夠自動保存數(shù)據(jù)的多個副本,并且能夠自動將失敗的任務(wù)重新分配。
Hadoop可以算是大數(shù)據(jù)存儲和計算的開山鼻祖,現(xiàn)在大多開源的大數(shù)據(jù)框架都依賴Hadoop或者與它能很好的兼容。具備如下:
* Hadoop 1.0、Hadoop 2.0
* MapReduce、HDFS
* NameNode、DataNode
* JobTracker、TaskTracker
* Yarn、ResourceManager、NodeManager
1.1 HDFS是Hadoop的關(guān)鍵技術(shù)所在
HDFS目錄操作命令;上傳、下載文件命令;提交運行MapReduce示例程序;打開Hadoop WEB界面,查看Job運行狀態(tài),查看Job運行日志。知道Hadoop的系統(tǒng)日志在哪里。
1.2 了解并行計算的核心原理
MapReduce:分而治之的優(yōu)秀思想;HDFS:數(shù)據(jù)分片和數(shù)據(jù)復(fù)制為核心的技術(shù)。數(shù)據(jù)到底在哪里,什么是副本;
Yarn如何用分層管理思想革命性的改變了MapReduce的核心架構(gòu)?NameNode職責(zé)?;Resource Manager職責(zé)?
1.3 親自寫MapReduce程序
第二單元:離線分析
2.1 SQL On Hadoop之Hive
什么是Hive?官方解釋如下:The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax.
數(shù)據(jù)倉庫物理上是數(shù)據(jù)庫,邏輯上倉庫。有兩個特點:海量數(shù)據(jù)、相對穩(wěn)定的;相對穩(wěn)定,指很少會被更新和刪除,只會被大量查詢。而Hive,也是具備這兩個特點,因此,Hive適合做海量數(shù)據(jù)的數(shù)據(jù)倉庫工具,而不是數(shù)據(jù)庫工具。Hive核心技術(shù)講解參見我的博客 https://blog.csdn.net/Peter_Changyb/article/details/81977665
2.2 安裝配置Hive
2.3 使用Hive
2.4 Hive核心原理
2.5 Hive的基本命令:
創(chuàng)建、刪除表;加載數(shù)據(jù)到表;下載Hive表的數(shù)據(jù),需要你掌握如下技能:
* MapReduce的原理;
* HDFS讀寫數(shù)據(jù)的流程;
* 學(xué)會查看日志解決問題;
* 會SELECT、WHERE、GROUP BY等SQL語句;
* Hive SQL轉(zhuǎn)換成MapReduce的關(guān)鍵流程;
* Hive中常見的語句:創(chuàng)建表、刪除表、往表中加載數(shù)據(jù)、分區(qū)、將表中數(shù)據(jù)下載到本地;
第三單元:離線遷移
3.1 HDFS PUT操作
put命令在實際環(huán)境中也比較常用,通常配合shell、python等腳本語言來使用。
3.2 HDFS API調(diào)用
HDFS提供了寫數(shù)據(jù)的API,自己用編程語言將數(shù)據(jù)寫入HDFS,put命令本身也是使用API。實際環(huán)境中一般自己較少編寫程序使用API來寫數(shù)據(jù)到HDFS,通常都是使用其他框架封裝好的方法。比如:Hive中的INSERT語句,Spark中的saveAsTextfile等。
3.3 Sqoop遷移工具
Sqoop是一個主要用于Hadoop/Hive與傳統(tǒng)關(guān)系型數(shù)據(jù)庫,Oracle、MySQL、SQLServer等之間進行數(shù)據(jù)交換的開源框架。就像Hive把SQL翻譯成MapReduce一樣,Sqoop把你指定的參數(shù)翻譯成MapReduce,提交到Hadoop運行,完成Hadoop與其他數(shù)據(jù)庫之間的數(shù)據(jù)交換。自己下載和配置Sqoop。了解Sqoop常用的配置參數(shù)和方法。使用Sqoop完成從MySQL同步數(shù)據(jù)到HDFS;使用Sqoop完成從MySQL同步數(shù)據(jù)到Hive表;如果后續(xù)選型確定使用Sqoop作為數(shù)據(jù)交換工具,那么建議熟練掌握,否則,了解和會用Demo即可。Sqoop導(dǎo)入Hbase核心代碼見我的技術(shù)博客https://blog.csdn.net/Peter_Changyb/article/details/82557741
3.4 Flume分布式采集框架
Flume是一個分布式的海量日志采集和傳輸框架,因為“采集和傳輸框架”,所以它并不適合關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)采集和傳輸。Flume可以實時的從網(wǎng)絡(luò)協(xié)議、消息系統(tǒng)、文件系統(tǒng)采集日志,并傳輸?shù)紿DFS上。因此,如果你的業(yè)務(wù)有這些數(shù)據(jù)源的數(shù)據(jù),并且需要實時的采集,那么就應(yīng)該考慮使用Flume。下載和配置Flume。使用Flume監(jiān)控一個不斷追加數(shù)據(jù)的文件,并將數(shù)據(jù)傳輸?shù)紿DFS;Flume的配置和使用較為復(fù)雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。核心技術(shù)參見我的技術(shù)博客https://blog.csdn.net/Peter_Changyb/article/details/81213997
第四單元:離線同步
Hive和MapReduce進行分析了。那么接下來的問題是,分析完的結(jié)果如何從Hadoop上同步到其他系統(tǒng)和應(yīng)用中去呢?其實,此處的方法和第三章基本一致的。
4.1 HDFS GET命令
把HDFS上的文件GET到本地。
4.2 HDFS API
4.3 Sqoop
使用Sqoop完成將HDFS上的文件同步到MySQL;使用Sqoop完成將Hive表中的數(shù)據(jù)同步到MySQL。
4.4 DataX
DataX 是一個異構(gòu)數(shù)據(jù)源離線同步工具,致力于實現(xiàn)包括關(guān)系型數(shù)據(jù)庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構(gòu)數(shù)據(jù)源之間穩(wěn)定高效的數(shù)據(jù)同步功能。之所以介紹這個,是因為我們公司目前使用的Hadoop與關(guān)系型數(shù)據(jù)庫數(shù)據(jù)交換的工具,就是之前基于DataX開發(fā)的,非常好用?,F(xiàn)在DataX已經(jīng)是3.0版本,支持很多數(shù)據(jù)源。DataX本身作為離線數(shù)據(jù)同步框架,采用Framework + plugin架構(gòu)構(gòu)建。將數(shù)據(jù)源讀取和寫入抽象成為Reader/Writer插件,納入到整個同步框架中。三個核心模塊要理解。Reader:Reader為數(shù)據(jù)采集模塊,負責(zé)采集數(shù)據(jù)源的數(shù)據(jù),將數(shù)據(jù)發(fā)送給Framework。Writer: Writer為數(shù)據(jù)寫入模塊,負責(zé)不斷向Framework取數(shù)據(jù),并將數(shù)據(jù)寫入到目的端。Framework:Framework用于連接reader和writer,作為兩者的數(shù)據(jù)傳輸通道,并處理緩沖,流控,并發(fā),數(shù)據(jù)轉(zhuǎn)換等核心技術(shù)問題。
第五單元:實時計算
Spark對MapReduce做了大量的改進和優(yōu)化,主要包括以下個方面:
1)磁盤I/O的讀寫優(yōu)化:
中間結(jié)果緩存在內(nèi)存中:隨著實時大數(shù)據(jù)應(yīng)用越來越多,Hadoop作為離線的高吞吐、低響應(yīng)框架已不能滿足這類需求。Hadoop MapReduce的map端將中間輸出和結(jié)果存儲在磁盤中,reduce端又需要從磁盤讀寫中間結(jié)果,從而造成磁盤I/O成為瓶頸。Spark則允許將map端的中間輸出和結(jié)果緩存在內(nèi)存中,從而使得reduce端在拉取中間結(jié)果時避免了大量的磁盤I/O;應(yīng)用程序上傳的資源文件緩存在Driver本地文件服務(wù)的內(nèi)存中:Hadoop YARN中的ApplicationMaster申請到Container后,具體任務(wù)需要利用NodeManager從HDFS的不同節(jié)點下載任務(wù)所需的資源(如Jar包),增加了磁盤I/O。Spark則將應(yīng)用程序上傳的資源文件緩存在Driver本地文件服務(wù)的內(nèi)存中,當(dāng)Executor執(zhí)行任務(wù)時直接從Driver的內(nèi)存中讀取,從而節(jié)省了大量的磁盤I/O。
2)任務(wù)的并行處理優(yōu)化:
由于將中間結(jié)果寫到磁盤與從磁盤讀取中間結(jié)果屬于不同的環(huán)節(jié),Hadoop將它們簡單地通過串行執(zhí)行銜接起來。而Spark則把不同的環(huán)節(jié)抽象為Stage,允許多個Stage既可以串行執(zhí)行,又可以并行執(zhí)行。
3)任務(wù)調(diào)度中的資源過濾:
當(dāng)Stage中某個分區(qū)的Task執(zhí)行失敗后,會重新對此Stage調(diào)度,但在重新調(diào)度的時候會過濾已經(jīng)執(zhí)行成功的分區(qū)任務(wù),所以不會造成重復(fù)計算和資源浪費。
4)Shuffle排序:
Hadoop MapReduce在Shuffle之前會將中間結(jié)果按key的hash值和key值大小進行兩層排序,確保分區(qū)內(nèi)部的有序性。而Spark則可以根據(jù)不同場景選擇在map端排序還是reduce端排序。
5)內(nèi)存管理優(yōu)化:
Spark將內(nèi)存分為堆上的存儲內(nèi)存、堆外的存儲內(nèi)存、堆上的執(zhí)行內(nèi)存、堆外的執(zhí)行內(nèi)存4個部分。Spark既提供了執(zhí)行內(nèi)存和存儲內(nèi)存之間固定邊界的實現(xiàn),又提供了執(zhí)行內(nèi)存和存儲內(nèi)存之間“軟”邊界的實現(xiàn)。Spark默認使用“軟”邊界的實現(xiàn),執(zhí)行內(nèi)存或存儲內(nèi)存中的任意一方在資源不足時都可以借用另一方的內(nèi)存,最大限度地提高資源的利用率,減少對資源的浪費。Spark由于對內(nèi)存使用的偏好,內(nèi)存資源的多寡和使用率就顯得尤為重要,為此Spark的內(nèi)存管理器提供的Tungsten實現(xiàn)了一種與操作系統(tǒng)的內(nèi)存Page非常相似的數(shù)據(jù)結(jié)構(gòu),用于直接操作操作系統(tǒng)內(nèi)存,節(jié)省了創(chuàng)建的Java對象在堆中占用的內(nèi)存,使得Spark對內(nèi)存的使用效率更加接近硬件。Spark會給每個Task分配一個配套的任務(wù)內(nèi)存管理器,對Task粒度的內(nèi)存進行管理。Task的內(nèi)存可以被多個內(nèi)部的消費者消費,任務(wù)內(nèi)存管理器對每個消費者進行Task內(nèi)存的分配與管理,因此Spark對內(nèi)存有著更細粒度的管理。核心技術(shù)參考我的博客https://blog.csdn.net/Peter_Changyb/article/details/81904066
5.1 關(guān)于Spark和SparkSQL
什么是Spark,什么是SparkSQL。Spark有的核心概念及名詞解釋。SparkSQL和Spark是什么關(guān)系,SparkSQL和Hive是什么關(guān)系。SparkSQL為什么比Hive跑的快。
5.2 如何部署和運行SparkSQL
Spark有哪些部署模式?如何在Yarn上運行SparkSQL?使用SparkSQL查詢Hive中的表。Spark不是一門短時間內(nèi)就能掌握的技術(shù),因此建議在了解了Spark之后,可以先從SparkSQL入手,循序漸進。關(guān)于Spark和SparkSQL,如果你認真完成了上面的學(xué)習(xí)和實踐,此時,你的”大數(shù)據(jù)平臺”應(yīng)該是這樣的。
第六單元:實時交換
在實際業(yè)務(wù)場景下,特別是對于一些監(jiān)控日志,想即時的從日志中了解一些指標(biāo),這時候,從HDFS上分析就太慢了,盡管是通過Flume采集的,但Flume也不能間隔很短就往HDFS上滾動文件,這樣會導(dǎo)致小文件特別多。為了滿足數(shù)據(jù)的一次采集、多次消費的需求,這里要說的便是Kafka。
6.1 關(guān)于Kafka
什么是Kafka?Kafka的核心概念及名詞解釋。
6.2 如何部署和使用Kafka
使用單機部署Kafka,并成功運行自帶的生產(chǎn)者和消費者例子。使用Java程序自己編寫并運行生產(chǎn)者和消費者程序。Flume和Kafka的集成,使用Flume監(jiān)控日志,并將日志數(shù)據(jù)實時發(fā)送至Kafka。
這時,使用Flume采集的數(shù)據(jù),不是直接到HDFS上,而是先到Kafka,Kafka中的數(shù)據(jù)可以由多個消費者同時消費,其中一個消費者,就是將數(shù)據(jù)同步到HDFS。
* 為什么Spark比MapReduce快。
* 使用SparkSQL代替Hive,更快的運行SQL。
* 使用Kafka完成數(shù)據(jù)的一次收集,多次消費架構(gòu)。
* 自己可以寫程序完成Kafka的生產(chǎn)者和消費者。
第七單元:實時調(diào)度
不僅僅是分析任務(wù),數(shù)據(jù)采集、數(shù)據(jù)交換同樣是一個個的任務(wù)。這些任務(wù)中,有的是定時觸發(fā),有點則需要依賴其他任務(wù)來觸發(fā)。當(dāng)平臺中有幾百上千個任務(wù)需要維護和運行時候,僅僅靠crontab遠遠不夠了,這時便需要一個調(diào)度監(jiān)控系統(tǒng)來完成這件事。調(diào)度監(jiān)控系統(tǒng)是整個數(shù)據(jù)平臺的中樞系統(tǒng),類似于AppMaster,負責(zé)分配和監(jiān)控任務(wù)。
7.1 Apache Oozie
1. Oozie是什么?有哪些功能?當(dāng)你的系統(tǒng)引入了spark或者hadoop以后,基于Spark和Hadoop已經(jīng)做了一些任務(wù),比如一連串的Map Reduce任務(wù),但是他們之間彼此右前后依賴的順序,因此你必須要等一個任務(wù)執(zhí)行成功后,再手動執(zhí)行第二個任務(wù)。
* Oozie是管理Hadoop作業(yè)的工作流調(diào)度系統(tǒng)
* Oozie的工作流是一系列的操作圖,Oozie協(xié)調(diào)作業(yè)是通過時間(頻率)以及有效數(shù)據(jù)觸發(fā)當(dāng)前的Oozie工作流程
* Oozie是針對Hadoop開發(fā)的開源工作流引擎,專門針對大規(guī)模復(fù)雜工作流程和數(shù)據(jù)管道設(shè)計
* Oozie圍繞兩個核心:工作流和協(xié)調(diào)器,前者定義任務(wù)的拓撲和執(zhí)行邏輯,后者負責(zé)工作流的依賴和觸發(fā)。
2. Oozie可以調(diào)度哪些類型的任務(wù)(程序)?
3. Oozie可以支持哪些任務(wù)觸發(fā)方式?
4. 安裝配置Oozie。
7.2 其他開源的任務(wù)調(diào)度系統(tǒng)
Azkaban,light-task-scheduler,Zeus,等等。另外,我這邊是之前單獨開發(fā)的任務(wù)調(diào)度與監(jiān)控系統(tǒng)。
第八單元:實時處理
在介紹Kafka的時候提到了一些需要實時指標(biāo)的業(yè)務(wù)場景,實時基本可以分為絕對實時和準(zhǔn)實時,絕對實時的延遲要求一般在毫秒級,準(zhǔn)實時的延遲要求一般在秒、分鐘級。對于需要絕對實時的業(yè)務(wù)場景,用的比較多的是Storm,對于其他準(zhǔn)實時的業(yè)務(wù)場景,可以是Storm,也可以是Spark Streaming。
8.1 Storm
1. 什么是Storm?有哪些可能的應(yīng)用場景?
2. Storm由哪些核心組件構(gòu)成,各自擔(dān)任什么角色?
3. Storm的簡單安裝和部署。
4. 案例實戰(zhàn)參見我的技術(shù)博客https://blog.csdn.net/Peter_Changyb/article/details/82380603
8.2 Spark Streaming
1. 什么是Spark Streaming,它和Spark是什么關(guān)系?
2. Spark Streaming和Storm比較,各有什么優(yōu)缺點?
3. 使用Kafka + Spark Streaming,完成實時計算的Demo程序。
第九單元:實時存儲
HBase屬于存儲層,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統(tǒng),可在廉價PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲集群。Hbase依托于很多框架和工具。其中,Hadoop HDFS為HBase提供了高可靠性的底層存儲支持,Hadoop MapReduce為HBase提供了高性能的計算能力,Zookeeper為HBase提供了穩(wěn)定服務(wù)和failover機制。Pig和Hive還為HBase提供了高層語言支持,使得在HBase上進行數(shù)據(jù)統(tǒng)計處理簡單快捷。Sqoop為HBase提供了方便的RDBMS數(shù)據(jù)導(dǎo)入功能,使得傳統(tǒng)數(shù)據(jù)庫數(shù)據(jù)向HBase中遷移更靈活。
HBase的 Client客戶端借助HBase的RPC機制與HMaster和HRegionServer進行通信,Zookeeper Quorum中除了存儲了-ROOT-表的地址和HMaster的地址,HRegionServer也注冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的存活狀態(tài)。HMaster解決了單點故障問題,HBase中可以啟動多個HMaster,通過Zookeeper的Master Election機制保證總有一個Master運行,HMaster在功能上主要負責(zé)Table和Region的管理工作,包括管理用戶對Table的增、刪、改、查操作,管理HRegionServer的負載均衡,調(diào)整Region分布,在Region Split后負責(zé)新Region的分配,在HRegionServer停機后負責(zé)失效HRegionServer 上的Regions遷移。
HRegionServer職責(zé)是負責(zé)響應(yīng)用戶I/O請求,向HDFS文件系統(tǒng)中讀寫數(shù)據(jù),屬于HBase中最核心的模塊。它內(nèi)部管理了一系列HRegion對象,每個HRegion對應(yīng)了Table中的一個Region,HRegion中由多個HStore組成。每個HStore對應(yīng)了Table中的一個Column Family的存儲,每個Column Family就是一個集中的存儲單元,設(shè)計師最好將具備共同IO特性的column放在一個Column Family中,一般來說,我們只設(shè)置一個Column Family。HStore存儲是HBase存儲的核心,其中由兩部分組成,一是MemStore,二是StoreFiles。MemStore是Sorted Memory Buffer,用戶寫入的數(shù)據(jù)首先會放入MemStore,當(dāng)MemStore滿了以后會Flush成一個StoreFile(底層實現(xiàn)是HFile),當(dāng)StoreFile文件數(shù)量增長到一定閾值,會觸發(fā)Compact合并操作,將多個StoreFiles合并成一個StoreFile,合并過程中會進行版本合并和數(shù)據(jù)刪除,所以HBase其實只有增加數(shù)據(jù),所有的更新和刪除操作都是在后續(xù)的compact過程中進行的,這使得用戶的寫操作只要進入內(nèi)存中就可以立即返回,保證了HBase I/O的高性能。
第十單元:智能分析
機器學(xué)習(xí)核心技術(shù)參見我的技術(shù)博客https://blog.csdn.net/Peter_Changyb/article/details/82347169。常用的機器學(xué)習(xí)解決的問題有三類:
* 分類問題:
包括二分類和多分類,二分類就是解決了預(yù)測的問題,就像預(yù)測一封郵件是否垃圾郵件;多分類解決的是文本的分類;
* 聚類問題:
從用戶搜索過的關(guān)鍵詞,對用戶進行大概的歸類。
* 推薦問題:
根據(jù)用戶的歷史瀏覽和點擊行為進行相關(guān)推薦。
經(jīng)驗分享
總之,對商用大數(shù)據(jù)平臺而言,我們要考慮應(yīng)用場景,用戶規(guī)模和數(shù)據(jù)處理能力,以及未來3年的目標(biāo)等。在應(yīng)用場景的設(shè)計中,會考慮業(yè)務(wù)和技術(shù)的結(jié)合度量,業(yè)務(wù)的規(guī)模和流程設(shè)計。用戶規(guī)模和數(shù)據(jù)處理能力,會考慮技術(shù)選型和架構(gòu)設(shè)計。具體要考慮架構(gòu)設(shè)計。架構(gòu)中重要的核心指標(biāo):性能、可用性、伸縮性、擴展性的等。
一、性能
性能就是核心要素之一,具體如下:
* CDN加速
* 反向代理
* 分布式緩存
* 異步化:
通過分布式消息隊列來實現(xiàn)削峰的目的。通過業(yè)務(wù)配合技術(shù)來解決問題。
* 集群:
采用集群也是服務(wù)虛擬化的一個體現(xiàn)。用以避免單點問題,同時提供更加高可用,高性能的服務(wù)。
* 代碼優(yōu)化:
多線程中,如果是密集型計算,線程數(shù)不宜超過CPU核數(shù)。如果是IO處理,則線程數(shù)=[任務(wù)執(zhí)行時間/(任務(wù)執(zhí)行時間-IO等待時間)] * CPU核數(shù)。除此之外,我們應(yīng)該將對象設(shè)計成無狀態(tài)對象,多采用局部對象,適當(dāng)將鎖細化。進行資源復(fù)用。比如采用單例模式,比如采用連接池。合理設(shè)置JVM參數(shù)。
* 存儲性能優(yōu)化:
關(guān)系型數(shù)據(jù)庫的索引采用B+樹進行實現(xiàn)。而很多的nosql數(shù)據(jù)庫則采用了LSM樹進行存儲。LSM在內(nèi)存中保留最新增刪改查的數(shù)據(jù),直到內(nèi)存無法放下,則與磁盤的下一級LSM樹進行merge。所以對于寫操作較多,而讀操作更多的是查詢最近寫入數(shù)據(jù)的場景,其性能遠高于b+樹;采用HDFS結(jié)合map reduce進行海量數(shù)據(jù)存儲和分析。其能自動進行并發(fā)訪問和冗余備份,具有很高的可靠性。其等于是實現(xiàn)了RAID的功能。
* 數(shù)據(jù)訪問接口優(yōu)化:
數(shù)據(jù)庫層其實是最脆弱的一層,一般在應(yīng)用設(shè)計時在上游就需要把請求攔截掉,數(shù)據(jù)庫層只承擔(dān)“能力范圍內(nèi)”的訪問請求,所以,我們通過在服務(wù)層引入隊列和緩存,讓最底層的數(shù)據(jù)庫高枕無憂。
二、高可用性
衡量一個系統(tǒng)架構(gòu)設(shè)計是否滿足高可用的目標(biāo),就是假設(shè)系統(tǒng)中任何一臺或者多臺服務(wù)器宕機時,以及出現(xiàn)各種不可預(yù)期的問題時,系統(tǒng)整體是否依然可用。一般就三個手段、冗余、集群化、分布式。高可用的主要手段就是冗余,應(yīng)用部署在多臺服務(wù)器上同時提供服務(wù),數(shù)據(jù)存儲在多臺服務(wù)器上相互備份。安全服務(wù)是指計算機網(wǎng)絡(luò)提供的安全防護措施,包括認證服務(wù)、訪問控制、數(shù)據(jù)機密性服務(wù)、數(shù)據(jù)完整性服務(wù)和不可否認服務(wù)。特定的安全機制是用來實施安全服務(wù)的機制,包括加密機制、數(shù)據(jù)簽名機制、訪問控制機制、數(shù)據(jù)完整性機制、認證交換機制、流量填充機制、路由控制機制和公證機制。普遍性的安全機制不是為任何特定的服務(wù)而特設(shè)的,屬于安全管理方面,分為可信功能度、安全標(biāo)記、事件檢測、安全審計跟蹤和安全恢復(fù)。
三、高擴展性
擴展性指對現(xiàn)有系統(tǒng)影響最小的情況下,系統(tǒng)功能可持續(xù)擴展或提升的能力。表現(xiàn)在系統(tǒng)基礎(chǔ)設(shè)施穩(wěn)定不需要經(jīng)常變更,應(yīng)用之間較少依賴和耦合,當(dāng)系統(tǒng)增加新功能時,不需要對現(xiàn)有系統(tǒng)的結(jié)構(gòu)和代碼進行修改。擴展性依賴于前期良好的架構(gòu)設(shè)計。合理業(yè)務(wù)邏輯抽象,水平/垂直切割分布式化等等。可擴展架構(gòu)的主要手段是事件驅(qū)動架構(gòu)和分布式服務(wù)。事件驅(qū)動通常利用消息隊列實現(xiàn),通過這種方式將消息生產(chǎn)和處理邏輯分隔開。服務(wù)器服務(wù)則是將業(yè)務(wù)和可復(fù)用服務(wù)分離開來,通過分布式服務(wù)框架調(diào)用。新增加產(chǎn)品可用通過調(diào)用可復(fù)用的服務(wù)來實現(xiàn)自身的業(yè)務(wù)邏輯,而對現(xiàn)有產(chǎn)品沒有任何影響。
四、高伸縮性
服務(wù)盡量同構(gòu)。DB、cache在考慮分布式時盡量提前設(shè)計好擴展方案。也可以采用一些主流的對水平伸縮支持較好的nosql、memcached、hbase等。
- 網(wǎng)絡(luò)防護:醫(yī)療保健安全的變革趨勢
- 2025年,個人人工智能助理會如何?
- “一箭十星”! 捷龍三號海上成功發(fā)射微厘空間01組衛(wèi)星
- 最高補貼2億元!黑龍江省在航空航天產(chǎn)業(yè)方面發(fā)力了
- 2024智能網(wǎng)聯(lián):商業(yè)落地加速 產(chǎn)業(yè)難題待解
- 接入交換機在網(wǎng)絡(luò)中的作用
- 華為余承東:終端業(yè)務(wù)重回增長快車道,開啟大發(fā)展新十年
- 全國數(shù)據(jù)工作會議:2025年著力培育壯大全國一體化數(shù)據(jù)市場
- 華為余承東:鴻蒙三分天下有其一是歷史使命 2025年目標(biāo)10萬應(yīng)用億級用戶
- 全國數(shù)據(jù)工作會議:2025年著力培育壯大全國一體化數(shù)據(jù)市場
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責(zé)任。任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。