一、hadoop背景介紹
1.1 什么是HADOOP
HADOOP是apache旗下的一套開源軟件平臺
HADOOP提供的功能:利用服務(wù)器集群,根據(jù)用戶的自定義業(yè)務(wù)邏輯,對海量數(shù)據(jù)進行分布式處理
-
HADOOP的核心組件有
A. HDFS(分布式文件系統(tǒng))hdfs
B. YARN(運算資源調(diào)度系統(tǒng))yarn
C. MAPREDUCE(分布式運算編程框架)mapreduce
廣義上來說,HADOOP通常是指一個更廣泛的概念——HADOOP生態(tài)圈
1.2 HADOOP產(chǎn)生背景
- HADOOP最早起源于Nutch。Nutch的設(shè)計目標(biāo)是構(gòu)建一個大型的全網(wǎng)搜索引擎,包括網(wǎng)頁抓取、索引、查詢等功能,但隨著抓取網(wǎng)頁數(shù)量的增加,遇到了嚴(yán)重的可擴展性問題——如何解決數(shù)十億網(wǎng)頁的存儲和索引問題。
- 2003年、2004年谷歌發(fā)表的兩篇論文為該問題提供了可行的解決方案。
——分布式文件系統(tǒng)(GFS),可用于處理海量網(wǎng)頁的存儲
——分布式計算框架MAPREDUCE,可用于處理海量網(wǎng)頁的索引計算問題。 - Nutch的開發(fā)人員完成了相應(yīng)的開源實現(xiàn)HDFS和MAPREDUCE,并從Nutch中剝離成為獨立項目HADOOP,到2008年1月,HADOOP成為Apache頂級項目,迎來了它的快速發(fā)展期。
1.3 HADOOP在大數(shù)據(jù)、云計算中的位置和關(guān)系
云計算是分布式計算、并行計算、網(wǎng)格計算、多核計算、網(wǎng)絡(luò)存儲、虛擬化、負(fù)載均衡等傳統(tǒng)計算機技術(shù)和互聯(lián)網(wǎng)技術(shù)融合發(fā)展的產(chǎn)物。借助IaaS(基礎(chǔ)設(shè)施即服務(wù))、PaaS(平臺即服務(wù))、SaaS(軟件即服務(wù))等業(yè)務(wù)模式,把強大的計算能力提供給終端用戶。
現(xiàn)階段,云計算的兩大底層支撐技術(shù)為“虛擬化”和“大數(shù)據(jù)技術(shù)”
而HADOOP則是云計算的PaaS層的解決方案之一,并不等同于PaaS,更不等同于云計算本身。
1.4 國內(nèi)外HADOOP應(yīng)用案例介紹
1、HADOOP應(yīng)用于數(shù)據(jù)服務(wù)基礎(chǔ)平臺建設(shè)
2、HADOOP用于用戶畫像
3、HADOOP用于網(wǎng)站點擊流日志數(shù)據(jù)挖掘
1.5 hadoop就業(yè)職位的要求
大數(shù)據(jù)是個復(fù)合專業(yè),包括應(yīng)用開發(fā)、軟件平臺、算法、數(shù)據(jù)挖掘等,因此,大數(shù)據(jù)技術(shù)領(lǐng)域的就業(yè)選擇是多樣的,但就HADOOP而言,通常都需要具備以下技能或知識:
A. HADOOP分布式集群的平臺搭建
B. HADOOP分布式文件系統(tǒng)HDFS的原理理解及使用
C. HADOOP分布式運算框架MAPREDUCE的原理理解及編程
D. Hive數(shù)據(jù)倉庫工具的熟練應(yīng)用
E. Flume、sqoop、oozie等輔助工具的熟練使用
F. Shell/python等腳本語言的開發(fā)能力
1.6 HADOOP生態(tài)圈以及各組成部分的簡介
1、各組件簡介:
HADOOP(hdfs、MAPREDUCE、yarn) 元老級大數(shù)據(jù)處理技術(shù)框架,擅長離線數(shù)據(jù)分析
Zookeeper 分布式協(xié)調(diào)服務(wù)基礎(chǔ)組件
Hbase 分布式海量數(shù)據(jù)庫,離線分析和在線業(yè)務(wù)通吃
Hive sql 數(shù)據(jù)倉庫工具,使用方便,功能豐富,基于MR延遲大
Sqoop數(shù)據(jù)導(dǎo)入導(dǎo)出工具
Flume數(shù)據(jù)采集框架
2、重點組件:
HDFS:分布式文件系統(tǒng)
MAPREDUCE:分布式運算程序開發(fā)框架
HIVE:基于大數(shù)據(jù)技術(shù)(文件系統(tǒng)+運算框架)的SQL數(shù)據(jù)倉庫工具
HBASE:基于HADOOP的分布式海量數(shù)據(jù)庫
ZOOKEEPER:分布式協(xié)調(diào)服務(wù)基礎(chǔ)組件
Mahout:基于mapreduce/spark/flink等分布式運算框架的機器學(xué)習(xí)算法庫
Oozie:工作流調(diào)度框架
Sqoop:數(shù)據(jù)導(dǎo)入導(dǎo)出工具
Flume:日志數(shù)據(jù)采集框架
二、分布式系統(tǒng)的概述
注:由于大數(shù)據(jù)技術(shù)領(lǐng)域的各類技術(shù)框架基本上都是分布式系統(tǒng),因此,理解hadoop、storm、
spark等技術(shù)框架,都需要具備基本的分布式系統(tǒng)概念
2.1 分布式軟件系統(tǒng)(Distributed Software Systems)
? 該軟件系統(tǒng)會劃分成多個子系統(tǒng)或模塊,各自運行在不同的機器上,子系統(tǒng)或模塊之間通過網(wǎng)絡(luò)通信進行協(xié)作,實現(xiàn)最終的整體功能
? 比如分布式操作系統(tǒng)、分布式程序設(shè)計語言及其編譯(解釋)系統(tǒng)、分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng)等。
2.2 分布式軟件系統(tǒng)舉例:solrcloud
A. 一個solrcloud集群通常有多臺solr服務(wù)器
B. 每一個solr服務(wù)器節(jié)點負(fù)責(zé)存儲整個索引庫的若干個shard(數(shù)據(jù)分片)
C. 每一個shard又有多臺服務(wù)器存放若干個副本互為主備用
D. 索引的建立和查詢會在整個集群的各個節(jié)點上并發(fā)執(zhí)行
E. solrcloud集群作為整體對外服務(wù),而其內(nèi)部細(xì)節(jié)可對客戶端透明
總結(jié):利用多個節(jié)點共同協(xié)作完成一項或多項具體業(yè)務(wù)功能的系統(tǒng)就是分布式系統(tǒng)。
2.3 分布式應(yīng)用系統(tǒng)模擬開發(fā)
需求:可以實現(xiàn)由主節(jié)點將運算任務(wù)發(fā)往從節(jié)點,并將各從節(jié)點上的任務(wù)啟動;
程序清單:
AppMaster
AppSlave/APPSlaveThread
Task
程序運行邏輯流程: