學(xué)習(xí)和使用hadoop有一年了,這里主要分享一下對(duì)hadoop整體上的理解,分門別類的介紹一下相關(guān)組件,最后提供了建議的學(xué)習(xí)路線,希望對(duì)hadoop的初學(xué)者有參考作用。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了安國(guó)免費(fèi)建站歡迎大家使用!
核心組件有:Hdfs、Yarn、MapReduce;
廣義上指一個(gè)生態(tài)圈,泛指大數(shù)據(jù)技術(shù)相關(guān)的開(kāi)源組件或產(chǎn)品,如hdfs、yarn、hbase、hive、spark、pig、zookeeper、kafka、flume、phoenix、sqoop。
Spark也是一個(gè)生態(tài)圈,發(fā)展非很快,在計(jì)算方面比mapreduce要快很多倍,供了一個(gè)簡(jiǎn)單而豐富的編程模型,支持多種應(yīng)用,包括ETL、機(jī)器學(xué)習(xí)、數(shù)據(jù)流處理、圖形計(jì)算;
Hadoop和Spark在某些方面有重疊,但組件之間都可以很好的協(xié)同作戰(zhàn)。
為了方便理解以下按照功能進(jìn)行了分類,并且把較為流行的排在了前面介紹,列表如下:
分類 | 相關(guān)產(chǎn)品 |
文件系統(tǒng) | HDFS,目前大量采用的分布式文件系統(tǒng),是整個(gè)大數(shù)據(jù)應(yīng)用場(chǎng)景的基礎(chǔ)通用文件存儲(chǔ)組件 S3, Simple Storage Service簡(jiǎn)單存儲(chǔ)服務(wù),更好的可擴(kuò)展性,內(nèi)置的持久性,以及較低的價(jià)格 |
資源調(diào)度 | YARN,分布式資源調(diào)度,可以接收計(jì)算的任務(wù)把它分配到集群各節(jié)點(diǎn)處理,相當(dāng)于大數(shù)據(jù)操作系統(tǒng),通用性好,生態(tài)支持好; Mesos,同YARN類似,偏向于資源的抽象和管理 |
計(jì)算框架 | Spark序列,有流計(jì)算、圖計(jì)算、機(jī)器學(xué)習(xí); Flink,支持計(jì)算數(shù)據(jù)不斷變化,即增量計(jì)算; Storm,專注于流式計(jì)算,功能強(qiáng)大; Mapreduce, 分布式計(jì)算基本計(jì)算框架,編程難度高,執(zhí)行效率低 |
數(shù)據(jù)庫(kù) | Hbase,一種NOSQL列簇?cái)?shù)據(jù)庫(kù),支持?jǐn)?shù)十億行數(shù)百萬(wàn)列大型數(shù)據(jù)儲(chǔ)存和訪問(wèn),尤其是寫數(shù)據(jù)的性能非常好,數(shù)據(jù)讀取實(shí)時(shí)性較好,提供一套API,不支持SQL操作,數(shù)據(jù)存儲(chǔ)采用HDFS; Cassandra,對(duì)大型表格和 Dynamo支持得最好; redis,運(yùn)行異常快,還可應(yīng)用于分布式緩存場(chǎng)景 |
SQL支持 | Spark SQL,由Shark、Hive發(fā)展而來(lái)的,以SQL方式訪問(wèn)數(shù)據(jù)源(如hdfs、hbase、S3、redis甚至關(guān)系統(tǒng)數(shù)據(jù)庫(kù)等,下同); Phoenix,一套專注于SQL方式訪問(wèn)hbase的JDBC驅(qū)動(dòng),支持絕大部分SQL語(yǔ)法,支持二級(jí)索引,支持事務(wù),低延時(shí); Hive,通過(guò)HQL(類似SQL)來(lái)統(tǒng)計(jì)分析生成查詢結(jié)果,通過(guò)解析HQL生成可以Mapreduce上執(zhí)行的任務(wù),典型的應(yīng)用場(chǎng)景是與hbase集成; 其它:impala、pig等,都實(shí)現(xiàn)了類似的功能,解決了直接寫map/reduce分析數(shù)據(jù)的復(fù)雜性,降低了數(shù)據(jù)分析工作者或開(kāi)發(fā)人員使用大數(shù)據(jù)的門檻 |
其它工具 | 分布式協(xié)作zookeeper,可以理解為一個(gè)小型高性能的數(shù)據(jù)庫(kù),為生態(tài)圈中與很多組件提供發(fā)布訂閱的功能,還可以監(jiān)測(cè)節(jié)點(diǎn)是否失效(心跳檢測(cè)),如HBase、Kafka中利用zookeeper存放了主從節(jié)點(diǎn)信息; Kafka, 是一種分布式的,基于發(fā)布/訂閱的消息系統(tǒng),類似于消息對(duì)列的功能,可以接收生產(chǎn)者(如webservice、文件、hdfs、hbase等)的數(shù)據(jù),本身可以緩存起來(lái),然后可以發(fā)送給消費(fèi)者(同上),起到緩沖和適配的作; Flume,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng),主要作用是數(shù)據(jù)的收集和傳輸,也支持非常多的輸入輸出數(shù)據(jù)源; Sqoop,主要用于在Hadoop(Hive)與傳統(tǒng)的數(shù)據(jù)庫(kù)(MySQL、postgresql...)間進(jìn)行數(shù)據(jù)的傳遞,可以將一個(gè)關(guān)系型數(shù)據(jù)庫(kù)(例如 : MySQL ,Oracle ,Postgres等)中的數(shù)據(jù)導(dǎo)進(jìn)到Hadoop的HDFS中,也可以將HDFS的數(shù)據(jù)導(dǎo)進(jìn)到關(guān)系型數(shù)據(jù)庫(kù)中 |
Hadoop、Spark生態(tài)圈的組件是相互配合使用的,每個(gè)組件都有自己“用武之地”,組合起來(lái)完成即可以滿足各種系統(tǒng)業(yè)務(wù)需求,下面列舉兩個(gè)例子:
(1)數(shù)據(jù)采集、存儲(chǔ)、分析場(chǎng)景
該場(chǎng)景下完成了整個(gè)數(shù)據(jù)的采集、存儲(chǔ)、分析,并輸出結(jié)果,組件搭配如下:
Flume + kafka(zookeeper)+ Hdfs + Spark/Storm/Hive + Hbase (Zookeeper、Hdfs) /Redis
說(shuō)明如下:
Flume用來(lái)從種渠道(如http、exec、文件、kafka , …)收集數(shù)據(jù),并發(fā)送到kaffka(當(dāng)然也可以存放到hdfs、hbase、file、…)
Kafka可以緩存數(shù)據(jù),與flume一樣也支持各種協(xié)議的輸入和輸出,由于kafka需要zookeeper來(lái)完成負(fù)載均衡和HA,所以需要zookeeper來(lái)支持
開(kāi)始計(jì)算,這里有三種選擇,Spark/Storm/Hive,各有優(yōu)勢(shì),相對(duì)Hive目前仍使用廣泛,該技術(shù)出現(xiàn)的較早;Storm專注于流式處理,延遲非常低; Spark最有前景的計(jì)算工具;不管用什么,最終都是對(duì)數(shù)據(jù)的清理、統(tǒng)計(jì),把得到的結(jié)果輸出
展示結(jié)果數(shù)據(jù)存儲(chǔ),可以使用Hbase kafka(zookeeper) /Redis或mysql等,看使用場(chǎng)景(數(shù)據(jù)量大小等因素),由于處理之后的結(jié)果數(shù)據(jù)一般比較少可以直接放到Redis,然后就可以采用常規(guī)的技術(shù)展示出報(bào)表或其它消費(fèi)方式使用這些計(jì)算后的結(jié)果數(shù)據(jù)
(2)數(shù)據(jù)存儲(chǔ)和實(shí)時(shí)訪問(wèn)
這種場(chǎng)景非常類似常規(guī)應(yīng)用開(kāi)發(fā)場(chǎng)景,即通過(guò)java的JDBC來(lái)訪問(wèn)大數(shù)據(jù)集群,組件搭配:
Jdbc + Solr + Phoenix/Spark sql + Hbase kafka(zookeeper) + Hdfs
說(shuō)明如下:
Jdbc是通用的java操作數(shù)據(jù)庫(kù)的方式,使用的是sql語(yǔ)句
Solr為全文檢索,完成站點(diǎn)分詞搜索功能
Phoenix/Spark sql方便以jdbc方式訪問(wèn)Hbase數(shù)據(jù)庫(kù)
Hdfs最終完成數(shù)據(jù)的物理存儲(chǔ)
僅憑個(gè)人經(jīng)驗(yàn),大概的分了三個(gè)階段,如下:
打個(gè)廣告,最近錄了一門課程,大部分是免費(fèi)的,忙我湊湊人氣哦!請(qǐng)點(diǎn)擊 HBase 設(shè)計(jì)和編程開(kāi)發(fā)視頻課程