大數(shù)據(jù)入門(mén)
總結(jié)一下近期學(xué)習(xí)的大數(shù)據(jù)知識(shí),主要是參考了廈門(mén)大學(xué)林子雨老師的博客
學(xué)習(xí)之前沒(méi)搞清楚的知識(shí)
-
傳統(tǒng)的web應(yīng)用(LAMP、JavaEE这吻、NODE系等)與大數(shù)據(jù)什么關(guān)系揩抡?
之前一直以為大數(shù)據(jù)的東西就是來(lái)取代傳統(tǒng)的Web應(yīng)用的,其實(shí)并不是這樣剔猿;即使是大數(shù)據(jù)的架構(gòu),應(yīng)用層依然會(huì)是傳統(tǒng)的web應(yīng)用嬉荆,但是會(huì)根據(jù)數(shù)據(jù)特點(diǎn)對(duì)數(shù)據(jù)存儲(chǔ)(結(jié)構(gòu)化數(shù)據(jù)依然會(huì)保存在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)——如MySql艳馒,日志等非結(jié)構(gòu)數(shù)據(jù)會(huì)保存在分布式文件系統(tǒng)——如Hadoop的HDFS)。
大數(shù)據(jù)的東西不是取代傳統(tǒng)的web應(yīng)用员寇,而是對(duì)web應(yīng)用的增強(qiáng)弄慰。基于分布式存儲(chǔ)和分布式計(jì)算蝶锋,以前單機(jī)或者小規(guī)模集群無(wú)法解決的問(wèn)題陆爽,使用了大數(shù)據(jù)技術(shù)之后就可以解決了,比如日志等數(shù)據(jù)當(dāng)數(shù)據(jù)量非常大的時(shí)候(TB甚至PB)扳缕,對(duì)這些數(shù)據(jù)的分析在傳統(tǒng)架構(gòu)上是不可能或者是非常慢的慌闭,使用了大數(shù)據(jù)技術(shù)之后就是可能的了——主要是將數(shù)據(jù)處理通過(guò)MapReduce等拆分到不同的節(jié)點(diǎn)(電腦)上執(zhí)行别威,然后將節(jié)點(diǎn)上的結(jié)果合并,最后生成分析結(jié)果驴剔。
-
云計(jì)算和大數(shù)據(jù)
這個(gè)話(huà)題在林子雨老師的教程——“第一講 大數(shù)據(jù)概述”里介紹的非常好省古,感興趣的朋友可以自己去看看,這里概括總結(jié)為:“云計(jì)算為大數(shù)據(jù)提供了技術(shù)基礎(chǔ)丧失,大數(shù)據(jù)為云計(jì)算提供了用物之地”豺妓。
現(xiàn)在幾乎所有的公司都把自己的產(chǎn)品吹成“云”...但是真的都是“云”么?其實(shí)很多都是傳統(tǒng)的web應(yīng)用部署到阿里云這些第三方云平臺(tái)吧布讹;還有一部分有自己服務(wù)器(一般配置)琳拭,然后搞個(gè)公網(wǎng)ip,部署上去也說(shuō)自己是“云”描验。
Hadoop結(jié)構(gòu)(更新)
參照廈門(mén)大學(xué)林子雨-大數(shù)據(jù)技術(shù)原理與應(yīng)用-教材配套講課視頻-第2講-大數(shù)據(jù)處理架構(gòu)Hadoop
這部分內(nèi)容請(qǐng)觀看林子雨老師的視頻白嘁,講得比較透徹。下面的內(nèi)容是在看視頻之前(那會(huì)兒只看了林子雨老師的教材和博客膘流,如林子雨老師在視頻中說(shuō)得絮缅,教材上的內(nèi)容都是基于Hadoop1.0的,在視頻中已經(jīng)更新到了2.0)寫(xiě)的呼股,作為一些參考吧耕魄。
學(xué)習(xí)歷程
- 了解Hadoop生態(tài)系統(tǒng),了解一下生態(tài)系統(tǒng)中各模塊的作用卖怜,文章后面對(duì)各模塊有一些簡(jiǎn)單的總結(jié)
- HDFS
- YARN
- HBase
- MapReduce
- Hive
- Pig
- Mahout
- Zookeeper
- Sqoop
- Flume
- Kafka等
-
了解Spark屎开,了解Spark比MapReduce的優(yōu)勢(shì)阐枣,學(xué)習(xí)RDD編程
- Spark SQL
- Spark Streaming
- Spark Mlib
- ...
找兩臺(tái)電腦搭個(gè)Hadoop马靠、Spark集群,配置Spark開(kāi)發(fā)環(huán)境(SBT)蔼两,運(yùn)行一些demo例程甩鳄,典型如WordCount
研究一下MapReduce的WordCount和Spark的WorkCount的代碼,通過(guò)對(duì)比加深理解
-
參考如下案例额划,了解大數(shù)據(jù)應(yīng)用妙啃,熟悉HBase,Hive俊戳,Sqoop等
整理一些知識(shí)(來(lái)自廈門(mén)大學(xué)林子雨老師的博客)
HBase
HBase是一個(gè)高可靠揖赴、高性能、面向列抑胎、可伸縮的分布式數(shù)據(jù)庫(kù)燥滑,是谷歌BigTable的開(kāi)源實(shí)現(xiàn),主要用來(lái)存儲(chǔ)非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)阿逃。HBase的目標(biāo)是處理非常龐大的表铭拧,可以通過(guò)水平擴(kuò)展的方式赃蛛,利用廉價(jià)計(jì)算機(jī)集群處理由超過(guò)10億行數(shù)據(jù)和數(shù)百萬(wàn)列元素組成的數(shù)據(jù)表
HBase可以直接使用本地文件系統(tǒng)或者Hadoop作為數(shù)據(jù)存儲(chǔ)方式,不過(guò)為了提高數(shù)據(jù)可靠性和系統(tǒng)的健壯性搀菩,發(fā)揮HBase處理大數(shù)據(jù)量等功能呕臂,需要使用Hadoop作為文件系統(tǒng)。與Hadoop一樣肪跋,HBase目標(biāo)主要依靠橫向擴(kuò)展歧蒋,通過(guò)不斷增加廉價(jià)的商用服務(wù)器來(lái)增加計(jì)算和存儲(chǔ)能力。
HIVE
Hive是一個(gè)構(gòu)建于Hadoop頂層的數(shù)據(jù)倉(cāng)庫(kù)工具澎嚣,由Facebook公司開(kāi)發(fā)疏尿,并在2008年8月開(kāi)源。Hive在某種程度上可以看作是用戶(hù)編程接口易桃,其本身并不存儲(chǔ)和處理數(shù)據(jù)褥琐,而是依賴(lài)HDFS來(lái)存儲(chǔ)數(shù)據(jù),依賴(lài)MapReduce來(lái)處理數(shù)據(jù)晤郑。Hive定義了簡(jiǎn)單的類(lèi)似SQL的查詢(xún)語(yǔ)言——HiveQL敌呈,它與大部分SQL語(yǔ)法兼容,但是造寝,并不完全支持SQL標(biāo)準(zhǔn)磕洪,比如,HiveSQL不支持更新操作诫龙,也不支持索引和事務(wù)析显,它的子查詢(xún)和連接操作也存在很多局限。
HiveQL語(yǔ)句可以快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce任務(wù)签赃,這樣用戶(hù)通過(guò)編寫(xiě)的HiveQL語(yǔ)句就可以運(yùn)行MapReduce任務(wù)谷异,不必編寫(xiě)復(fù)雜的MapReduce應(yīng)用程序。對(duì)于Java開(kāi)發(fā)工程師而言锦聊,就不必花費(fèi)大量精力在記憶常見(jiàn)的數(shù)據(jù)運(yùn)算與底層的MapReduce Java API的對(duì)應(yīng)關(guān)系上歹嘹;對(duì)于DBA來(lái)說(shuō),可以很容易把原來(lái)構(gòu)建在關(guān)系數(shù)據(jù)庫(kù)上的數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用程序移植到Hadoop平臺(tái)上孔庭。所以說(shuō)尺上,Hive是一個(gè)可以有效、合理圆到、直觀地組織和使用數(shù)據(jù)的分析工具怎抛。
Impala
Hive 作為現(xiàn)有比較流行的數(shù)據(jù)倉(cāng)庫(kù)分析工具之一,得到了廣泛的應(yīng)用芽淡,但是由于Hive采用MapReduce 來(lái)完成批量數(shù)據(jù)處理马绝,因此,實(shí)時(shí)性不好吐绵,查詢(xún)延遲較高迹淌。Impala 作為新一代開(kāi)源大數(shù)據(jù)分析引擎河绽,支持實(shí)時(shí)計(jì)算,它提供了與Hive 類(lèi)似的功能唉窃,并在性能上比Hive高出3~30 倍耙饰。Impala 發(fā)展勢(shì)頭迅猛,甚至有可能會(huì)超過(guò)Hive 的使用率而成為Hadoop 上最流行的實(shí)時(shí)計(jì)算平臺(tái)纹份。
Hive 與Impala 的不同點(diǎn)總結(jié)如下:
- 第一苟跪,Hive 比較適合進(jìn)行長(zhǎng)時(shí)間的批處理查詢(xún)分析,而Impala 適合進(jìn)行實(shí)時(shí)交互式SQL 查詢(xún)蔓涧。
- 第二件已,Hive 依賴(lài)于MapReduce 計(jì)算框架,執(zhí)行計(jì)劃組合成管道型的MapReduce 任務(wù)模式進(jìn)行執(zhí)行元暴,而Impala 則把執(zhí)行計(jì)劃表現(xiàn)為一棵完整的執(zhí)行計(jì)劃樹(shù)篷扩,可以更自然地分發(fā)執(zhí)行計(jì)劃到各個(gè)Impalad執(zhí)行查詢(xún)。
- 第三茉盏,Hive在執(zhí)行過(guò)程中鉴未,如果內(nèi)存放不下所有數(shù)據(jù),則會(huì)使用外存鸠姨,以保證查詢(xún)能順序執(zhí)行完成铜秆,而Impala在遇到內(nèi)存放不下數(shù)據(jù)時(shí),不會(huì)利用外存讶迁,所以连茧,Impala目前處理查詢(xún)時(shí)會(huì)受到一定的限制。
Hive與Impala的相同點(diǎn)總結(jié)如下:
- 第一巍糯,Hive與Impala使用相同的存儲(chǔ)數(shù)據(jù)池啸驯,都支持把數(shù)據(jù)存儲(chǔ)于HDFS和HBase中,其中鳞贷,HDFS支持存儲(chǔ)TEXT坯汤、RCFILE虐唠、PARQUET搀愧、AVRO、ETC等格式的數(shù)據(jù)疆偿,HBase存儲(chǔ)表中記錄咱筛。
- 第二,Hive與Impala使用相同的元數(shù)據(jù)杆故。
- 第三迅箩,Hive與Impala中對(duì)SQL的解釋處理比較相似,都是通過(guò)詞法分析生成執(zhí)行計(jì)劃处铛。
總的來(lái)說(shuō)饲趋,Impala的目的不在于替換現(xiàn)有的MapReduce工具拐揭,把Hive與Impala配合使用效果最佳,可以先使用Hive進(jìn)行數(shù)據(jù)轉(zhuǎn)換處理奕塑,之后再使用Impala在Hive處理后的結(jié)果數(shù)據(jù)集上進(jìn)行快速的數(shù)據(jù)分析堂污。
PIG
Pig 是Hadoop 生態(tài)系統(tǒng)的一個(gè)組件,提供了類(lèi)似SQL 的Pig Latin 語(yǔ)言(包含F(xiàn)ilter龄砰、GroupBy盟猖、Join、OrderBy 等操作换棚,同時(shí)也支持用戶(hù)自定義函數(shù))式镐,允許用戶(hù)通過(guò)編寫(xiě)簡(jiǎn)單的腳本來(lái)實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)分析,而不需要編寫(xiě)復(fù)雜的MapReduce 應(yīng)用程序固蚤,Pig 會(huì)自動(dòng)把用戶(hù)編寫(xiě)的腳本轉(zhuǎn)換成MapReduce 作業(yè)在Hadoop 集群上運(yùn)行娘汞,而且具備對(duì)生成的MapReduce程序進(jìn)行自動(dòng)優(yōu)化的功能,所以夕玩,用戶(hù)在編寫(xiě)Pig 程序的時(shí)候价说,不需要關(guān)心程序的運(yùn)行效率,這就大大減少了用戶(hù)編程時(shí)間风秤。因此鳖目,通過(guò)配合使用Pig 和Hadoop,在處理海量數(shù)據(jù)時(shí)就可以實(shí)現(xiàn)事半功倍的效果缤弦,比使用Java领迈、C++等語(yǔ)言編寫(xiě)MapReduce 程序的難度要小很多,并且用更少的代碼量實(shí)現(xiàn)了相同的數(shù)據(jù)處理分析功能碍沐。Pig 可以加載數(shù)據(jù)狸捅、表達(dá)轉(zhuǎn)換數(shù)據(jù)以及存儲(chǔ)最終結(jié)果,因此累提,在企業(yè)實(shí)際應(yīng)用中尘喝,Pig通常用于ETL(Extraction、Transformation斋陪、Loading)過(guò)程朽褪,即來(lái)自各個(gè)不同數(shù)據(jù)源的數(shù)據(jù)被收集過(guò)來(lái)以后,采用Pig 進(jìn)行統(tǒng)一加工處理无虚,然后加載到數(shù)據(jù)倉(cāng)庫(kù)Hive 中缔赠,由Hive 實(shí)現(xiàn)對(duì)海量數(shù)據(jù)的分析。需要特別指出的是友题,每種數(shù)據(jù)分析工具都有一定的局限性嗤堰,Pig 的設(shè)計(jì)和MapReduce 一樣,都是面向批處理的度宦,因此踢匣,Pig 并不適合所有的數(shù)據(jù)處理任務(wù)告匠,特別是當(dāng)需要查詢(xún)大數(shù)據(jù)集中的一小部分?jǐn)?shù)據(jù)時(shí),Pig 仍然需要對(duì)整個(gè)或絕大部分?jǐn)?shù)據(jù)集進(jìn)行掃描离唬,因此凫海,實(shí)現(xiàn)性能不會(huì)很好。
Tez
Tez 是Apache 開(kāi)源的支持DAG 作業(yè)的計(jì)算框架男娄,通過(guò)DAG 作業(yè)的方式運(yùn)行MapReduce 作業(yè)行贪,提供了程序運(yùn)行的整體處理邏輯,就可以去除工作流當(dāng)中多余的Map 階段模闲,減少不必要的操作建瘫,提升數(shù)據(jù)處理的性能。Hortonworks把Tez 應(yīng)用到數(shù)據(jù)倉(cāng)庫(kù)Hive 的優(yōu)化中尸折,使得性能提升了約100 倍啰脚。如圖15-13 所示,可以讓Tez 框架運(yùn)行在YARN 框架之上实夹,然后讓MapReduce橄浓、Pig 和Hive 等計(jì)算框架運(yùn)行在Tez框架之上,從而借助于Tez 框架實(shí)現(xiàn)對(duì)MapReduce亮航、Pig 和Hive 等的性能優(yōu)化荸实,更好地解決現(xiàn)有MapReduce 框架在迭代計(jì)算(如PageRank 計(jì)算)和交互式計(jì)算方面存在的問(wèn)題。
Tez在解決Hive缴淋、Pig延遲大准给、性能低等問(wèn)題的思路,是和那些支持實(shí)時(shí)交互式查詢(xún)分析的產(chǎn)品(如Impala重抖、Dremel和Drill等)是不同的露氮。Impala、Dremel和Drill的解決問(wèn)題思路是拋棄MapReduce計(jì)算框架钟沛,不再將類(lèi)似SQL語(yǔ)句的HiveQL或者Pig語(yǔ)句翻譯成MapReduce程序畔规,而是采用與商用并行關(guān)系數(shù)據(jù)庫(kù)類(lèi)似的分布式查詢(xún)引擎,可以直接從HDFS或者HBase中用SQL語(yǔ)句查詢(xún)數(shù)據(jù)恨统,而不需要把SQL語(yǔ)句轉(zhuǎn)化成MapReduce任務(wù)來(lái)執(zhí)行叁扫,從而大大降低了延遲,很好地滿(mǎn)足了實(shí)時(shí)查詢(xún)的要求延欠。但是陌兑,Tez則不同沈跨,比如由捎,針對(duì)Hive數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行優(yōu)化的“Tez+Hive”解決方案,仍采用MapReduce計(jì)算框架饿凛,但是對(duì)DAG的作業(yè)依賴(lài)關(guān)系進(jìn)行了裁剪狞玛,并將多個(gè)小作業(yè)合并成一個(gè)大作業(yè)软驰,這樣,不僅計(jì)算量減少了心肪,而且寫(xiě)HDFS次數(shù)也會(huì)大大減少锭亏。
Kafka
Kafka是由LinkedIn公司開(kāi)發(fā)的一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),用戶(hù)通過(guò)Kafka系統(tǒng)可以發(fā)布大量的消息硬鞍,同時(shí)也能實(shí)時(shí)訂閱消費(fèi)消息慧瘤。
在大數(shù)據(jù)時(shí)代涌現(xiàn)的新的日志收集處理系統(tǒng)(Flume、Scribe等)往往更擅長(zhǎng)批量離線(xiàn)處理固该,而不能較好地支持實(shí)時(shí)在線(xiàn)處理锅减。相對(duì)而言,Kafka可以同時(shí)滿(mǎn)足在線(xiàn)實(shí)時(shí)處理和批量離線(xiàn)處理伐坏。
Kafka設(shè)計(jì)的初衷是構(gòu)建一個(gè)可以處理海量日志怔匣、用戶(hù)行為和網(wǎng)站運(yùn)營(yíng)統(tǒng)計(jì)等的數(shù)據(jù)處理框架
最近幾年,Kafka在大數(shù)據(jù)生態(tài)系統(tǒng)中開(kāi)始扮演越來(lái)越重要的作用桦沉,在Uber每瞒、Twitter、Netflix纯露、LinkedIn剿骨、Yahoo、Cisco埠褪、Goldman Sachs等公司得到了大量的應(yīng)用懦砂。目前,在很多公司的大數(shù)據(jù)平臺(tái)中组橄,Kafka通常扮演數(shù)據(jù)交換樞紐的角色荞膘。
在公司的大數(shù)據(jù)生態(tài)系統(tǒng)中,可以把Kafka作為數(shù)據(jù)交換樞紐玉工,不同類(lèi)型的分布式系統(tǒng)(關(guān)系數(shù)據(jù)庫(kù)羽资、NoSQL數(shù)據(jù)庫(kù)、流處理系統(tǒng)遵班、批處理系統(tǒng)等)屠升,可以統(tǒng)一接入到Kafka,實(shí)現(xiàn)和Hadoop各個(gè)組件之間的不同類(lèi)型數(shù)據(jù)的實(shí)時(shí)高效交換狭郑,較好地滿(mǎn)足各種企業(yè)應(yīng)用需求腹暖。
Sqoop
Sqoop是一款開(kāi)源的工具,主要用于在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ù)中。