一离咐、什么是大數(shù)據(jù) ? ? ? ?
? ? ? ? 首先矮慕,我們來(lái)了解一下帮匾,什么是大數(shù)據(jù)?大數(shù)據(jù)(BigData)是指無(wú)法在一定時(shí)間內(nèi)用常規(guī)軟件工具進(jìn)行捕捉凡傅、管理和處理的數(shù)據(jù)集合辟狈,是需要新處理模式才能具有更強(qiáng)的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力的海量夏跷、高增長(zhǎng)率哼转、多樣化的信息資產(chǎn)。由IBM提出的大數(shù)據(jù)的五個(gè)特征(5V):Volume(大量)槽华、Velocity(高速)壹蔓、Variety(多樣)、Value(價(jià)值)猫态、Veracity(真實(shí)性)佣蓉。
? ? ? ? 大數(shù)據(jù)的核心是Hadoop生態(tài)系統(tǒng)。我們通城籽可能會(huì)根據(jù)特定的用特來(lái)描述軟件工具勇凭,比如:Oracle是數(shù)據(jù)庫(kù)、Apache Tomcat 是 Web 服務(wù)器义辕。不過(guò)虾标,Hadoop就有些復(fù)雜,Hadoop 是大量工具集合灌砖,這些工具可以協(xié)同工作來(lái)完成特定的任務(wù)璧函。可以說(shuō)Hadoop是一個(gè)數(shù)據(jù)管理系統(tǒng)基显,將海量的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)聚集在一起蘸吓,這些數(shù)據(jù)涉及傳統(tǒng)企業(yè)數(shù)據(jù)棧的幾乎每一個(gè)層次,其定位是在數(shù)據(jù)中心占據(jù)核心地位撩幽。也可以說(shuō)库继,Hadoop 是大規(guī)模并行執(zhí)行框架,把超級(jí)計(jì)算機(jī)的能力帶給大眾窜醉,致力于加速企業(yè)級(jí)應(yīng)用的執(zhí)行制跟。由于 Hadoop 提供如此廣泛的功能,可以適用于解決大量問(wèn)題酱虎,也可以說(shuō)雨膨,Hadoop 是基礎(chǔ)框架。Hadoop 提供所有這些功能读串,因此應(yīng)該將 Hadoop 歸類(lèi)為一個(gè)生態(tài)系統(tǒng)聊记,它包含大量的組件撒妈,從數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)集成、數(shù)據(jù)處理以及數(shù)據(jù)分析師的專(zhuān)用工具排监。
二狰右、Hadoop生態(tài)系統(tǒng)概述
MapReduce
主要由Google Reduce而來(lái),它簡(jiǎn)化了大型數(shù)據(jù)的處理舆床,是一個(gè)并行的棋蚌,分布式處理的編程模型。
hadoop2.0它是基于YARN框架構(gòu)建的挨队。YARN的全稱(chēng)是Yet-Another-Resource-Negotiator谷暮。Yarn可以運(yùn)用在S3|Spark等上。
HDFS
它是由Google File System而來(lái)盛垦,全稱(chēng)是Hadoop Distributed File System湿弦,是Hadoop的分布式文件系統(tǒng),有許多機(jī)器組成的腾夯,可以存儲(chǔ)大型數(shù)據(jù)文件颊埃。
它是由NameNode和DataNode組成,NameNode可以配置成HA(高可用)蝶俱,避免單點(diǎn)故障班利。一般用Zookeeper來(lái)處理。兩個(gè)NameNode是同步的榨呆。
Hive
它是Hadoop的數(shù)據(jù)倉(cāng)庫(kù)(DW),它可以用類(lèi)似SQL的語(yǔ)言HSQL來(lái)操作數(shù)據(jù)肥败,很是方便,主要用來(lái)聯(lián)機(jī)分析處理OLAP(On-Line Analytical Processing),進(jìn)行數(shù)據(jù)匯總|查詢(xún)|分析愕提。
HBase
它是由Google BigTable而來(lái)。是Hadoop的數(shù)據(jù)庫(kù)皿哨。HBase底層還是利用的Hadoop的HDFS作為文件存儲(chǔ)系統(tǒng)浅侨,可以利用Hadoop的MR來(lái)處理HBase的數(shù)據(jù),它也通常用Zookeeper來(lái)做協(xié)同服務(wù)证膨。
Zookeeper
它是一個(gè)針對(duì)大型分布式系統(tǒng)的可靠協(xié)調(diào)系統(tǒng)如输,在Hadoop|HBase|Strom等都有用到,它的目的就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù)央勒,提供給用戶一個(gè)簡(jiǎn)單|可靠|高效|穩(wěn)定的系統(tǒng)不见。提供配置維護(hù)|分布式同步|名字服務(wù)等功能,Zookeeper主要是通過(guò)lead選舉來(lái)維護(hù)HA或同步操作等
Pig
它提供一個(gè)引擎在Hadoop并行執(zhí)行數(shù)據(jù)流崔步。它包含了一般的數(shù)據(jù)操作如join|sort|filter等稳吮,它也是使用MR來(lái)處理數(shù)據(jù)。
Mahout
它是機(jī)器學(xué)習(xí)庫(kù)井濒。提供一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實(shí)現(xiàn)灶似,目的是幫助開(kāi)發(fā)人員更加方便快捷地創(chuàng)建智能應(yīng)用程序列林。Mahout包含許多實(shí)現(xiàn),包括聚類(lèi)酪惭、分類(lèi)希痴、推薦算法等。
三春感、大數(shù)據(jù)架構(gòu)
大數(shù)據(jù)架構(gòu)師砌创,是架構(gòu)師的一種。如何學(xué)習(xí)才能成為大數(shù)據(jù)架構(gòu)師鲫懒?從數(shù)據(jù)庫(kù)SQL到NoSQL嫩实,從新手到大師?我們來(lái)看這篇現(xiàn)身說(shuō)法的文章刀疙。
先扯一下大數(shù)據(jù)的4V特征:
1舶赔、數(shù)據(jù)量大,TB->PB
2谦秧、數(shù)據(jù)類(lèi)型繁多竟纳,結(jié)構(gòu)化、非結(jié)構(gòu)化文本疚鲤、日志锥累、視頻、圖片集歇、地理位置等桶略;
3、商業(yè)價(jià)值高诲宇,但是這種價(jià)值需要在海量數(shù)據(jù)之上际歼,通過(guò)數(shù)據(jù)分析與機(jī)器學(xué)習(xí)更快速的挖掘出來(lái);
4姑蓝、處理時(shí)效性高鹅心,海量數(shù)據(jù)的處理需求不再局限在離線計(jì)算當(dāng)中。
現(xiàn)如今纺荧,正式為了應(yīng)對(duì)大數(shù)據(jù)的這幾個(gè)特點(diǎn)旭愧,開(kāi)源的大數(shù)據(jù)框架越來(lái)越多,越來(lái)越強(qiáng)宙暇,先列舉一些常見(jiàn)的:
·???????文件存儲(chǔ):Hadoop HDFS
·???????離線計(jì)算:Hadoop MapReduce输枯、Spark
·???????流式、實(shí)時(shí)計(jì)算:Storm占贫、Spark Streaming
·???????K-V桃熄、NOSQL數(shù)據(jù)庫(kù):HBase、Redis型奥、MongoDB
·???????資源管理:YARN蜻拨、Mesos
·???????日志收集:Flume池充、Scribe、Logstash缎讼、Kibana
·???????消息系統(tǒng):Kafka收夸、StormMQ、ZeroMQ血崭、RabbitMQ
·???????查詢(xún)分析:Hive卧惜、Impala、Presto夹纫、Phoenix咽瓷、SparkSQL、Flink舰讹、Kylin茅姜、Druid
·???????分布式協(xié)調(diào)服務(wù):Zookeeper
·???????集群管理與監(jiān)控:Ambari、Ganglia月匣、Nagios钻洒、Cloudera Manager
·???????數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí):Mahout锄开、Spark MLLib
·???????數(shù)據(jù)同步:Sqoop
·???????任務(wù)調(diào)度:Oozie
眼花了吧素标,上面的有30多種吧,別說(shuō)精通了萍悴,全部都會(huì)使用的头遭,估計(jì)也沒(méi)幾個(gè)。就我個(gè)人而言癣诱,主要經(jīng)驗(yàn)是在第二個(gè)方向(開(kāi)發(fā)/設(shè)計(jì)/架構(gòu))计维,且聽(tīng)聽(tīng)我的建議吧。
第一章:初識(shí)Hadoop
1.1撕予、學(xué)會(huì)百度與Google
不論遇到什么問(wèn)題鲫惶,先試試搜索并自己解決。Google首選嗅蔬,翻不過(guò)去的,就用百度吧疾就。
1.2澜术、參考資料首選官方文檔
特別是對(duì)于入門(mén)來(lái)說(shuō),官方文檔永遠(yuǎn)是首選文檔猬腰。相信搞這塊的大多是文化人鸟废,英文湊合就行,實(shí)在看不下去的姑荷,請(qǐng)參考第一步盒延。
1.3缩擂、先讓Hadoop跑起來(lái)
Hadoop可以算是大數(shù)據(jù)存儲(chǔ)和計(jì)算的開(kāi)山鼻祖,現(xiàn)在大多開(kāi)源的大數(shù)據(jù)框架都依賴(lài)Hadoop或者與它能很好的兼容添寺。
關(guān)于Hadoop胯盯,你至少需要搞清楚以下是什么:
·???????Hadoop 1.0、Hadoop 2.0
·???????MapReduce计露、HDFS
·???????NameNode博脑、DataNode
·???????JobTracker、TaskTracker
·???????Yarn票罐、ResourceManager叉趣、NodeManager
自己搭建Hadoop,請(qǐng)使用第一步和第二步该押,能讓它跑起來(lái)就行疗杉。建議先使用安裝包命令行安裝,不要使用管理工具安裝蚕礼。另外:Hadoop1.0知道它就行了烟具,現(xiàn)在都用Hadoop 2.0.
1.4、試試使用Hadoop
HDFS目錄操作命令闻牡;上傳净赴、下載文件命令;提交運(yùn)行MapReduce示例程序罩润;打開(kāi)Hadoop WEB界面玖翅,查看Job運(yùn)行狀態(tài),查看Job運(yùn)行日志割以。知道Hadoop的系統(tǒng)日志在哪里金度。
1.5、你該了解它們的原理了
MapReduce:如何分而治之严沥;
HDFS:數(shù)據(jù)到底在哪里猜极,什么是副本;
Yarn到底是什么消玄,它能干什么跟伏;
NameNode到底在干些什么;
Resource Manager到底在干些什么翩瓜;
1.6受扳、自己寫(xiě)一個(gè)MapReduce程序
請(qǐng)仿照WordCount例子,自己寫(xiě)一個(gè)(照抄也行)WordCount程序兔跌,
打包并提交到Hadoop運(yùn)行勘高。你不會(huì)Java?Shell、Python都可以华望,有個(gè)東西叫Hadoop Streaming蕊蝗。如果你認(rèn)真完成了以上幾步,恭喜你赖舟,你的一只腳已經(jīng)進(jìn)來(lái)了蓬戚。
第二章:更高效的WordCount
2.1、學(xué)點(diǎn)SQL吧
你知道數(shù)據(jù)庫(kù)嗎建蹄?你會(huì)寫(xiě)SQL嗎碌更?如果不會(huì),請(qǐng)學(xué)點(diǎn)SQL吧洞慎。
2.2痛单、SQL版WordCount
在1.6中,你寫(xiě)的WordCount一共有幾行代碼劲腿?給你看看我的:
SELECT word,COUNT(1) FROM wordcount GROUP BY word旭绒;
這便是SQL的魅力,編程需要幾十行焦人,甚至上百行代碼挥吵,一句就能搞定;使用SQL處理分析Hadoop上的數(shù)據(jù)花椭,方便忽匈、高效、易上手矿辽、更是趨勢(shì)丹允。不論是離線計(jì)算還是實(shí)時(shí)計(jì)算,越來(lái)越多的大數(shù)據(jù)處理框架都在積極提供SQL接口袋倔。
2.3雕蔽、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.
為什么說(shuō)Hive是數(shù)據(jù)倉(cāng)庫(kù)工具宾娜,而不是數(shù)據(jù)庫(kù)工具呢批狐?有的朋友可能不知道數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)是邏輯上的概念前塔,底層使用的是數(shù)據(jù)庫(kù)嚣艇,數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)有這兩個(gè)特點(diǎn):最全的歷史數(shù)據(jù)(海量)、相對(duì)穩(wěn)定的华弓;所謂相對(duì)穩(wěn)定食零,指的是數(shù)據(jù)倉(cāng)庫(kù)不同于業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù),數(shù)據(jù)經(jīng)常會(huì)被更新该抒,數(shù)據(jù)一旦進(jìn)入數(shù)據(jù)倉(cāng)庫(kù)慌洪,很少會(huì)被更新和刪除,只會(huì)被大量查詢(xún)凑保。而Hive冈爹,也是具備這兩個(gè)特點(diǎn),因此欧引,Hive適合做海量數(shù)據(jù)的數(shù)據(jù)倉(cāng)庫(kù)工具频伤,而不是數(shù)據(jù)庫(kù)工具。
2.4芝此、安裝配置Hive
請(qǐng)參考1.1?和?1.2?完成Hive的安裝配置憋肖。可以正常進(jìn)入Hive命令行婚苹。
2.5岸更、試試使用Hive
請(qǐng)參考1.1?和?1.2?,在Hive中創(chuàng)建wordcount表膊升,并運(yùn)行2.2中的SQL語(yǔ)句怎炊。
在Hadoop WEB界面中找到剛才運(yùn)行的SQL任務(wù)±耄看SQL查詢(xún)結(jié)果是否和1.4中MapReduce中的結(jié)果一致评肆。
2.6、Hive是怎么工作的
明明寫(xiě)的是SQL非区,為什么Hadoop WEB界面中看到的是MapReduce任務(wù)瓜挽?
2.7、學(xué)會(huì)Hive的基本命令
創(chuàng)建征绸、刪除表久橙;加載數(shù)據(jù)到表;下載Hive表的數(shù)據(jù)歹垫;請(qǐng)參考1.2剥汤,學(xué)習(xí)更多關(guān)于Hive的語(yǔ)法和命令。
如果你已經(jīng)按照《寫(xiě)給大數(shù)據(jù)開(kāi)發(fā)初學(xué)者的話》中第一章和第二章的流程認(rèn)真完整的走了一遍排惨,那么你應(yīng)該已經(jīng)具備以下技能和知識(shí)點(diǎn):
·???????MapReduce的原理(還是那個(gè)經(jīng)典的題目吭敢,一個(gè)10G大小的文件,給定1G大小的內(nèi)存暮芭,如何使用Java程序統(tǒng)計(jì)出現(xiàn)次數(shù)最多的10個(gè)單詞及次數(shù))鹿驼;
·???????HDFS讀寫(xiě)數(shù)據(jù)的流程;向HDFS中PUT數(shù)據(jù)辕宏;從HDFS中下載數(shù)據(jù)畜晰;
·???????自己會(huì)寫(xiě)簡(jiǎn)單的MapReduce程序,運(yùn)行出現(xiàn)問(wèn)題瑞筐,知道在哪里查看日志凄鼻;
·???????會(huì)寫(xiě)簡(jiǎn)單的SELECT、WHERE、GROUP BY等SQL語(yǔ)句块蚌;
·???????Hive SQL轉(zhuǎn)換成MapReduce的大致流程闰非;
·???????Hive中常見(jiàn)的語(yǔ)句:創(chuàng)建表、刪除表峭范、往表中加載數(shù)據(jù)财松、分區(qū)、將表中數(shù)據(jù)下載到本地纱控;
從上面的學(xué)習(xí)辆毡,你已經(jīng)了解到,HDFS是Hadoop提供的分布式存儲(chǔ)框架甜害,它可以用來(lái)存儲(chǔ)海量數(shù)據(jù)舶掖,MapReduce是Hadoop提供的分布式計(jì)算框架,它可以用來(lái)統(tǒng)計(jì)和分析HDFS上的海量數(shù)據(jù)尔店,而Hive則是SQL On Hadoop访锻,Hive提供了SQL接口,開(kāi)發(fā)人員只需要編寫(xiě)簡(jiǎn)單易上手的SQL語(yǔ)句闹获,Hive負(fù)責(zé)把SQL翻譯成MapReduce期犬,提交運(yùn)行。
此時(shí)避诽,你的”大數(shù)據(jù)平臺(tái)”是這樣的:
那么問(wèn)題來(lái)了龟虎,海量數(shù)據(jù)如何到HDFS上呢?
第三章:把別處的數(shù)據(jù)搞到Hadoop上
此處也可以叫做數(shù)據(jù)采集沙庐,把各個(gè)數(shù)據(jù)源的數(shù)據(jù)采集到Hadoop上鲤妥。
3.1、HDFS PUT命令
這個(gè)在前面你應(yīng)該已經(jīng)使用過(guò)了拱雏。put命令在實(shí)際環(huán)境中也比較常用棉安,通常配合shell、python等腳本語(yǔ)言來(lái)使用铸抑。建議熟練掌握贡耽。
3.2、HDFS API
HDFS提供了寫(xiě)數(shù)據(jù)的API鹊汛,自己用編程語(yǔ)言將數(shù)據(jù)寫(xiě)入HDFS蒲赂,put命令本身也是使用API。
實(shí)際環(huán)境中一般自己較少編寫(xiě)程序使用API來(lái)寫(xiě)數(shù)據(jù)到HDFS刁憋,通常都是使用其他框架封裝好的方法滥嘴。比如:Hive中的INSERT語(yǔ)句,Spark中的saveAsTextfile等至耻。建議了解原理若皱,會(huì)寫(xiě)Demo镊叁。
3.3、Sqoop
Sqoop是一個(gè)主要用于Hadoop/Hive與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)走触,Oracle意系、MySQL、SQLServer等之間進(jìn)行數(shù)據(jù)交換的開(kāi)源框架饺汹。就像Hive把SQL翻譯成MapReduce一樣,Sqoop把你指定的參數(shù)翻譯成MapReduce痰催,提交到Hadoop運(yùn)行兜辞,完成Hadoop與其他數(shù)據(jù)庫(kù)之間的數(shù)據(jù)交換。
自己下載和配置Sqoop(建議先使用Sqoop1夸溶,Sqoop2比較復(fù)雜)逸吵。了解Sqoop常用的配置參數(shù)和方法。
使用Sqoop完成從MySQL同步數(shù)據(jù)到HDFS缝裁;使用Sqoop完成從MySQL同步數(shù)據(jù)到Hive表扫皱;如果后續(xù)選型確定使用Sqoop作為數(shù)據(jù)交換工具,那么建議熟練掌握捷绑,否則韩脑,了解和會(huì)用Demo即可。
3.4粹污、Flume
Flume是一個(gè)分布式的海量日志采集和傳輸框架段多,因?yàn)椤安杉蛡鬏斂蚣堋保运⒉贿m合關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)采集和傳輸壮吩。Flume可以實(shí)時(shí)的從網(wǎng)絡(luò)協(xié)議进苍、消息系統(tǒng)、文件系統(tǒng)采集日志鸭叙,并傳輸?shù)紿DFS上觉啊。
因此,如果你的業(yè)務(wù)有這些數(shù)據(jù)源的數(shù)據(jù)沈贝,并且需要實(shí)時(shí)的采集杠人,那么就應(yīng)該考慮使用Flume。
下載和配置Flume宋下。使用Flume監(jiān)控一個(gè)不斷追加數(shù)據(jù)的文件搜吧,并將數(shù)據(jù)傳輸?shù)紿DFS;Flume的配置和使用較為復(fù)雜杨凑,如果你沒(méi)有足夠的興趣和耐心滤奈,可以先跳過(guò)Flume棚瘟。
3.5惭蟋、阿里開(kāi)源的DataX
之所以介紹這個(gè)歧胁,是因?yàn)槲覀児灸壳笆褂玫腍adoop與關(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)交換的工具,就是之前基于DataX開(kāi)發(fā)的扔涧,非常好用。
可以參考我的博文《異構(gòu)數(shù)據(jù)源海量數(shù)據(jù)交換工具-Taobao DataX?下載和使用》∽禾ǎ現(xiàn)在DataX已經(jīng)是3.0版本幔翰,支持很多數(shù)據(jù)源。你也可以在其之上做二次開(kāi)發(fā)领炫。有興趣的可以研究和使用一下偶垮,對(duì)比一下它與Sqoop。
至此帝洪,你的“大數(shù)據(jù)平臺(tái)”應(yīng)該是這樣的:
第四章:把Hadoop上的數(shù)據(jù)搞到別處去
Hive和MapReduce進(jìn)行分析了似舵。那么接下來(lái)的問(wèn)題是,分析完的結(jié)果如何從Hadoop上同步到其他系統(tǒng)和應(yīng)用中去呢葱峡?其實(shí)砚哗,此處的方法和第三章基本一致的。
4.1砰奕、HDFS GET命令
把HDFS上的文件GET到本地蛛芥。需要熟練掌握。
4.2军援、HDFS API
同3.2.
4.3仅淑、Sqoop
同3.3.使用Sqoop完成將HDFS上的文件同步到MySQL;使用Sqoop完成將Hive表中的數(shù)據(jù)同步到MySQL胸哥。
4.4漓糙、DataX
同3.5.?如果你認(rèn)真完成了上面的學(xué)習(xí)和實(shí)踐,此時(shí)烘嘱,你的”大數(shù)據(jù)平臺(tái)”應(yīng)該是這樣的:
如果你已經(jīng)按照《寫(xiě)給大數(shù)據(jù)開(kāi)發(fā)初學(xué)者的話2》中第三章和第四章的流程認(rèn)真完整的走了一遍昆禽,那么你應(yīng)該已經(jīng)具備以下技能和知識(shí)點(diǎn):
知道如何把已有的數(shù)據(jù)采集到HDFS上,包括離線采集和實(shí)時(shí)采集蝇庭;你已經(jīng)知道sqoop(或者還有DataX)是HDFS和其他數(shù)據(jù)源之間的數(shù)據(jù)交換工具醉鳖;你已經(jīng)知道flume可以用作實(shí)時(shí)的日志采集。
從前面的學(xué)習(xí)哮内,對(duì)于大數(shù)據(jù)平臺(tái)盗棵,你已經(jīng)掌握的不少的知識(shí)和技能,搭建Hadoop集群北发,把數(shù)據(jù)采集到Hadoop上纹因,使用Hive和MapReduce來(lái)分析數(shù)據(jù),把分析結(jié)果同步到其他數(shù)據(jù)源琳拨。
接下來(lái)的問(wèn)題來(lái)了瞭恰,Hive使用的越來(lái)越多,你會(huì)發(fā)現(xiàn)很多不爽的地方狱庇,特別是速度慢惊畏,大多情況下恶耽,明明我的數(shù)據(jù)量很小,它都要申請(qǐng)資源颜启,啟動(dòng)MapReduce來(lái)執(zhí)行偷俭。
第五章:快一點(diǎn)吧,我的SQL
其實(shí)大家都已經(jīng)發(fā)現(xiàn)Hive后臺(tái)使用MapReduce作為執(zhí)行引擎缰盏,實(shí)在是有點(diǎn)慢涌萤。因此SQL On Hadoop的框架越來(lái)越多,按我的了解口猜,最常用的按照流行度依次為SparkSQL负溪、Impala和Presto;這三種框架基于半內(nèi)存或者全內(nèi)存暮的,提供了SQL接口來(lái)快速查詢(xún)分析Hadoop上的數(shù)據(jù)。關(guān)于三者的比較淌实,請(qǐng)參考1.1.
我們目前使用的是SparkSQL冻辩,至于為什么用SparkSQL,原因大概有以下吧:使用Spark還做了其他事情拆祈,不想引入過(guò)多的框架恨闪;Impala對(duì)內(nèi)存的需求太大,沒(méi)有過(guò)多資源部署放坏。
5.1咙咽、關(guān)于Spark和SparkSQL
什么是Spark,什么是SparkSQL淤年。
Spark有的核心概念及名詞解釋钧敞。
SparkSQL和Spark是什么關(guān)系,SparkSQL和Hive是什么關(guān)系麸粮。
SparkSQL為什么比Hive跑的快溉苛。
5.2、如何部署和運(yùn)行SparkSQL
Spark有哪些部署模式弄诲?
如何在Yarn上運(yùn)行SparkSQL愚战?
使用SparkSQL查詢(xún)Hive中的表。Spark不是一門(mén)短時(shí)間內(nèi)就能掌握的技術(shù)齐遵,因此建議在了解了Spark之后寂玲,可以先從SparkSQL入手,循序漸進(jìn)梗摇。
關(guān)于Spark和SparkSQL拓哟,如果你認(rèn)真完成了上面的學(xué)習(xí)和實(shí)踐,此時(shí)伶授,你的“大數(shù)據(jù)平臺(tái)”應(yīng)該是這樣的彰檬。
第六章:一夫多妻制
請(qǐng)不要被這個(gè)名字所誘惑伸刃。其實(shí)我想說(shuō)的是數(shù)據(jù)的一次采集、多次消費(fèi)逢倍。
在實(shí)際業(yè)務(wù)場(chǎng)景下捧颅,特別是對(duì)于一些監(jiān)控日志,想即時(shí)的從日志中了解一些指標(biāo)(關(guān)于實(shí)時(shí)計(jì)算较雕,后面章節(jié)會(huì)有介紹)碉哑,這時(shí)候,從HDFS上分析就太慢了亮蒋,盡管是通過(guò)Flume采集的扣典,但Flume也不能間隔很短就往HDFS上滾動(dòng)文件,這樣會(huì)導(dǎo)致小文件特別多慎玖。
為了滿足數(shù)據(jù)的一次采集贮尖、多次消費(fèi)的需求,這里要說(shuō)的便是Kafka趁怔。
6.1湿硝、關(guān)于Kafka
什么是Kafka?Kafka的核心概念及名詞解釋润努。
6.2关斜、如何部署和使用Kafka
使用單機(jī)部署Kafka,并成功運(yùn)行自帶的生產(chǎn)者和消費(fèi)者例子铺浇。使用Java程序自己編寫(xiě)并運(yùn)行生產(chǎn)者和消費(fèi)者程序痢畜。Flume和Kafka的集成,使用Flume監(jiān)控日志鳍侣,并將日志數(shù)據(jù)實(shí)時(shí)發(fā)送至Kafka丁稀。
如果你認(rèn)真完成了上面的學(xué)習(xí)和實(shí)踐,此時(shí)倚聚,你的“大數(shù)據(jù)平臺(tái)”應(yīng)該是這樣的二驰。
這時(shí),使用Flume采集的數(shù)據(jù)秉沼,不是直接到HDFS上桶雀,而是先到Kafka,Kafka中的數(shù)據(jù)可以由多個(gè)消費(fèi)者同時(shí)消費(fèi)唬复,其中一個(gè)消費(fèi)者矗积,就是將數(shù)據(jù)同步到HDFS。
如果你已經(jīng)按照《寫(xiě)給大數(shù)據(jù)開(kāi)發(fā)初學(xué)者的話3》中第五章和第六章的流程認(rèn)真完整的走了一遍敞咧,那么你應(yīng)該已經(jīng)具備以下技能和知識(shí)點(diǎn):
·???????為什么Spark比MapReduce快棘捣。
·???????使用SparkSQL代替Hive,更快的運(yùn)行SQL休建。
·???????使用Kafka完成數(shù)據(jù)的一次收集乍恐,多次消費(fèi)架構(gòu)评疗。
·???????自己可以寫(xiě)程序完成Kafka的生產(chǎn)者和消費(fèi)者。
從前面的學(xué)習(xí)茵烈,你已經(jīng)掌握了大數(shù)據(jù)平臺(tái)中的數(shù)據(jù)采集百匆、數(shù)據(jù)存儲(chǔ)和計(jì)算、數(shù)據(jù)交換等大部分技能呜投,而這其中的每一步加匈,都需要一個(gè)任務(wù)(程序)來(lái)完成,各個(gè)任務(wù)之間又存在一定的依賴(lài)性仑荐,比如雕拼,必須等數(shù)據(jù)采集任務(wù)成功完成后,數(shù)據(jù)計(jì)算任務(wù)才能開(kāi)始運(yùn)行粘招。如果一個(gè)任務(wù)執(zhí)行失敗啥寇,需要給開(kāi)發(fā)運(yùn)維人員發(fā)送告警,同時(shí)需要提供完整的日志來(lái)方便查錯(cuò)洒扎。
第七章:越來(lái)越多的分析任務(wù)
不僅僅是分析任務(wù)辑甜,數(shù)據(jù)采集、數(shù)據(jù)交換同樣是一個(gè)個(gè)的任務(wù)逊笆。這些任務(wù)中栈戳,有的是定時(shí)觸發(fā)岂傲,有點(diǎn)則需要依賴(lài)其他任務(wù)來(lái)觸發(fā)难裆。當(dāng)平臺(tái)中有幾百上千個(gè)任務(wù)需要維護(hù)和運(yùn)行時(shí)候,僅僅靠crontab遠(yuǎn)遠(yuǎn)不夠了镊掖,這時(shí)便需要一個(gè)調(diào)度監(jiān)控系統(tǒng)來(lái)完成這件事乃戈。調(diào)度監(jiān)控系統(tǒng)是整個(gè)數(shù)據(jù)平臺(tái)的中樞系統(tǒng),類(lèi)似于AppMaster亩进,負(fù)責(zé)分配和監(jiān)控任務(wù)症虑。
7.1、Apache Oozie
1归薛、Oozie是什么谍憔?有哪些功能?
2主籍、Oozie可以調(diào)度哪些類(lèi)型的任務(wù)(程序)习贫?
3、Oozie可以支持哪些任務(wù)觸發(fā)方式千元?
4苫昌、安裝配置Oozie。
7.2幸海、其他開(kāi)源的任務(wù)調(diào)度系統(tǒng)
Azkaban祟身,light-task-scheduler奥务,Zeus,等等袜硫。另外氯葬,我這邊是之前單獨(dú)開(kāi)發(fā)的任務(wù)調(diào)度與監(jiān)控系統(tǒng),具體請(qǐng)參考《大數(shù)據(jù)平臺(tái)任務(wù)調(diào)度與監(jiān)控系統(tǒng)》父款。如果你認(rèn)真完成了上面的學(xué)習(xí)和實(shí)踐溢谤,此時(shí),你的“大數(shù)據(jù)平臺(tái)”應(yīng)該是這樣的:
第八章:我的數(shù)據(jù)要實(shí)時(shí)
在第六章介紹Kafka的時(shí)候提到了一些需要實(shí)時(shí)指標(biāo)的業(yè)務(wù)場(chǎng)景憨攒,實(shí)時(shí)基本可以分為絕對(duì)實(shí)時(shí)和準(zhǔn)實(shí)時(shí)世杀,絕對(duì)實(shí)時(shí)的延遲要求一般在毫秒級(jí),準(zhǔn)實(shí)時(shí)的延遲要求一般在秒肝集、分鐘級(jí)瞻坝。對(duì)于需要絕對(duì)實(shí)時(shí)的業(yè)務(wù)場(chǎng)景,用的比較多的是Storm杏瞻,對(duì)于其他準(zhǔn)實(shí)時(shí)的業(yè)務(wù)場(chǎng)景所刀,可以是Storm,也可以是Spark Streaming捞挥。當(dāng)然浮创,如果可以的話,也可以自己寫(xiě)程序來(lái)做砌函。
8.1斩披、Storm
1、什么是Storm讹俊?有哪些可能的應(yīng)用場(chǎng)景垦沉?
2、Storm由哪些核心組件構(gòu)成仍劈,各自擔(dān)任什么角色厕倍?
3、Storm的簡(jiǎn)單安裝和部署贩疙。
4讹弯、自己編寫(xiě)Demo程序,使用Storm完成實(shí)時(shí)數(shù)據(jù)流計(jì)算这溅。
8.2 Spark Streaming
1组民、什么是Spark Streaming,它和Spark是什么關(guān)系芍躏?
2邪乍、Spark Streaming和Storm比較,各有什么優(yōu)缺點(diǎn)?
3庇楞、使用Kafka + Spark Streaming榜配,完成實(shí)時(shí)計(jì)算的Demo程序。
至此吕晌,你的大數(shù)據(jù)平臺(tái)底層架構(gòu)已經(jīng)成型了蛋褥,其中包括了數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)與計(jì)算(離線和實(shí)時(shí))睛驳、數(shù)據(jù)同步烙心、任務(wù)調(diào)度與監(jiān)控這幾大模塊。接下來(lái)是時(shí)候考慮如何更好的對(duì)外提供數(shù)據(jù)了乏沸。
第九章:我的數(shù)據(jù)要對(duì)外
通常對(duì)外(業(yè)務(wù))提供數(shù)據(jù)訪問(wèn)淫茵,大體上包含以下方面。
·???????離線:比如蹬跃,每天將前一天的數(shù)據(jù)提供到指定的數(shù)據(jù)源(DB匙瘪、FILE、FTP)等蝶缀;離線數(shù)據(jù)的提供可以采用Sqoop丹喻、DataX等離線數(shù)據(jù)交換工具。
·???????實(shí)時(shí):比如翁都,在線網(wǎng)站的推薦系統(tǒng)碍论,需要實(shí)時(shí)從數(shù)據(jù)平臺(tái)中獲取給用戶的推薦數(shù)據(jù),這種要求延時(shí)非常低(50毫秒以?xún)?nèi))柄慰。根據(jù)延時(shí)要求和實(shí)時(shí)數(shù)據(jù)的查詢(xún)需要鳍悠,可能的方案有:HBase、Redis先煎、MongoDB贼涩、ElasticSearch等巧涧。
·???????OLAP分析:OLAP除了要求底層的數(shù)據(jù)模型比較規(guī)范薯蝎,另外,對(duì)查詢(xún)的響應(yīng)速度要求也越來(lái)越高谤绳,可能的方案有:Impala占锯、Presto、SparkSQL缩筛、Kylin消略。如果你的數(shù)據(jù)模型比較規(guī)模,那么Kylin是最好的選擇瞎抛。
·???????即席查詢(xún):即席查詢(xún)的數(shù)據(jù)比較隨意艺演,一般很難建立通用的數(shù)據(jù)模型,因此可能的方案有:Impala、Presto胎撤、SparkSQL晓殊。
這么多比較成熟的框架和方案,需要結(jié)合自己的業(yè)務(wù)需求及數(shù)據(jù)平臺(tái)技術(shù)架構(gòu)伤提,選擇合適的巫俺。原則只有一個(gè):越簡(jiǎn)單越穩(wěn)定的,就是最好的肿男。
如果你已經(jīng)掌握了如何很好的對(duì)外(業(yè)務(wù))提供數(shù)據(jù)介汹,那么你的“大數(shù)據(jù)平臺(tái)”應(yīng)該是這樣的:
第十章:牛逼高大上的機(jī)器學(xué)習(xí)
關(guān)于這塊,我這個(gè)門(mén)外漢也只能是簡(jiǎn)單介紹一下了舶沛。數(shù)學(xué)專(zhuān)業(yè)畢業(yè)的我非常慚愧嘹承,很后悔當(dāng)時(shí)沒(méi)有好好學(xué)數(shù)學(xué)。在我們的業(yè)務(wù)中如庭,遇到的能用機(jī)器學(xué)習(xí)解決的問(wèn)題大概這么三類(lèi):
·???????分類(lèi)問(wèn)題:包括二分類(lèi)和多分類(lèi)赶撰,二分類(lèi)就是解決了預(yù)測(cè)的問(wèn)題,就像預(yù)測(cè)一封郵件是否垃圾郵件柱彻;多分類(lèi)解決的是文本的分類(lèi)豪娜;
·???????聚類(lèi)問(wèn)題:從用戶搜索過(guò)的關(guān)鍵詞,對(duì)用戶進(jìn)行大概的歸類(lèi)哟楷。
·???????推薦問(wèn)題:根據(jù)用戶的歷史瀏覽和點(diǎn)擊行為進(jìn)行相關(guān)推薦瘤载。
大多數(shù)行業(yè),使用機(jī)器學(xué)習(xí)解決的卖擅,也就是這幾類(lèi)問(wèn)題鸣奔。入門(mén)學(xué)習(xí)線路,數(shù)學(xué)基礎(chǔ)惩阶;機(jī)器學(xué)習(xí)實(shí)戰(zhàn)挎狸,懂Python最好;SparkMlLib提供了一些封裝好的算法断楷,以及特征處理锨匆、特征選擇的方法。
機(jī)器學(xué)習(xí)確實(shí)牛逼高大上冬筒,也是我學(xué)習(xí)的目標(biāo)恐锣。那么,可以把機(jī)器學(xué)習(xí)部分也加進(jìn)你的“大數(shù)據(jù)平臺(tái)”了舞痰。
數(shù)據(jù)應(yīng)用
關(guān)注微信公眾號(hào) dmercn?