day06.Hadoop快速入門&云服務(wù)三種模式IaaS碎捺,PaaS和SaaS【大數(shù)據(jù)教程】
1. HADOOP背景介紹
1.1?什么是HADOOP
1).?HADOOP是apache旗下的一套開源軟件平臺(tái)
2).?HADOOP提供的功能:利用服務(wù)器集群箱歧,根據(jù)用戶的自定義業(yè)務(wù)邏輯炎功,對(duì)海量數(shù)據(jù)進(jìn)行分布式處理
3).?HADOOP的核心組件有
A.?HDFS(分布式文件系統(tǒng))
B.?YARN(運(yùn)算資源調(diào)度系統(tǒng))
C.?MAPREDUCE(分布式運(yùn)算編程框架)
4).廣義上來(lái)說(shuō),HADOOP通常是指一個(gè)更廣泛的概念——HADOOP生態(tài)圈
1.2?HADOOP產(chǎn)生背景
1).?HADOOP最早起源于Nutch姓建。
Nutch的設(shè)計(jì)目標(biāo)是構(gòu)建一個(gè)大型的全網(wǎng)搜索引擎诞仓,包括網(wǎng)頁(yè)抓取、索引速兔、查詢等功能墅拭,但隨著抓取網(wǎng)頁(yè)數(shù)量的增加,遇到了嚴(yán)重的可擴(kuò)展性問(wèn)題——如何解決數(shù)十億網(wǎng)頁(yè)的存儲(chǔ)和索引問(wèn)題涣狗。
2).?2003年谍婉、2004年谷歌發(fā)表的兩篇論文為該問(wèn)題提供了可行的解決方案。
——分布式文件系統(tǒng)(GFS)镀钓,可用于處理海量網(wǎng)頁(yè)的存儲(chǔ)
——分布式計(jì)算框架MAPREDUCE穗熬,可用于處理海量網(wǎng)頁(yè)的索引計(jì)算問(wèn)題。
3).?Nutch的開發(fā)人員完成了相應(yīng)的開源實(shí)現(xiàn)HDFS和MAPREDUCE掸宛,并從Nutch中剝離成為獨(dú)立項(xiàng)目HADOOP死陆,到2008年1月招拙,HADOOP成為Apache頂級(jí)項(xiàng)目唧瘾,迎來(lái)了它的快速發(fā)展期。
1.3?HADOOP在大數(shù)據(jù)别凤、云計(jì)算中的位置和關(guān)系
1).云計(jì)算是分布式計(jì)算饰序、并行計(jì)算、網(wǎng)格計(jì)算规哪、多核計(jì)算求豫、網(wǎng)絡(luò)存儲(chǔ)、虛擬化、負(fù)載均衡等傳統(tǒng)計(jì)算機(jī)技術(shù)和互聯(lián)網(wǎng)技術(shù)融合發(fā)展的產(chǎn)物蝠嘉。借助IaaS(基礎(chǔ)設(shè)施即服務(wù))最疆、PaaS(平臺(tái)即服務(wù))、SaaS(軟件即服務(wù))等業(yè)務(wù)模式蚤告,把強(qiáng)大的計(jì)算能力提供給終端用戶努酸。
2).現(xiàn)階段,云計(jì)算的兩大底層支撐技術(shù)為“虛擬化”和“大數(shù)據(jù)技術(shù)”
3).而HADOOP則是云計(jì)算的PaaS層的解決方案之一杜恰,并不等同于PaaS获诈,更不等同于云計(jì)算本身。
1.4?國(guó)內(nèi)外HADOOP應(yīng)用案例介紹
1).HADOOP應(yīng)用于數(shù)據(jù)服務(wù)基礎(chǔ)平臺(tái)建設(shè)
2).HADOOP用于用戶畫像
3).HADOOP用于網(wǎng)站點(diǎn)擊流日志數(shù)據(jù)挖掘
1.5?國(guó)內(nèi)HADOOP的就業(yè)情況分析
1).HADOOP就業(yè)整體情況
A.大數(shù)據(jù)產(chǎn)業(yè)已納入國(guó)家十三五規(guī)劃
B.各大城市都在進(jìn)行智慧城市項(xiàng)目建設(shè)心褐,而智慧城市的根基就是大數(shù)據(jù)綜合平臺(tái)
C.互聯(lián)網(wǎng)時(shí)代數(shù)據(jù)的種類舔涎,增長(zhǎng)都呈現(xiàn)爆發(fā)式增長(zhǎng),各行業(yè)對(duì)數(shù)據(jù)的價(jià)值日益重視
D.相對(duì)于傳統(tǒng)JAVAEE技術(shù)領(lǐng)域來(lái)說(shuō)逗爹,大數(shù)據(jù)領(lǐng)域的人才相對(duì)稀缺
E.隨著現(xiàn)代社會(huì)的發(fā)展亡嫌,數(shù)據(jù)處理和數(shù)據(jù)挖掘的重要性只會(huì)增不會(huì)減,因此掘而,大數(shù)據(jù)技術(shù)是一個(gè)尚在蓬勃發(fā)展且具有長(zhǎng)遠(yuǎn)前景的領(lǐng)域
2).HADOOP就業(yè)職位要求
大數(shù)據(jù)是個(gè)復(fù)合專業(yè)昼伴,包括應(yīng)用開發(fā)、軟件平臺(tái)镣屹、算法圃郊、數(shù)據(jù)挖掘等,因此女蜈,大數(shù)據(jù)技術(shù)領(lǐng)域的就業(yè)選擇是多樣的持舆,但就HADOOP而言,通常都需要具備以下技能或知識(shí):
A.?HADOOP分布式集群的平臺(tái)搭建
B.?HADOOP分布式文件系統(tǒng)HDFS的原理理解及使用
C.?HADOOP分布式運(yùn)算框架MAPREDUCE的原理理解及編程
D.?Hive數(shù)據(jù)倉(cāng)庫(kù)工具的熟練應(yīng)用
E.?Flume伪窖、sqoop逸寓、oozie等輔助工具的熟練使用
F.?Shell/python等腳本語(yǔ)言的開發(fā)能力
3).HADOOP相關(guān)職位的薪資水平
大數(shù)據(jù)技術(shù)或具體到HADOOP的就業(yè)需求目前主要集中在北上廣深一線城市,薪資待遇普遍高于傳統(tǒng)JAVAEE開發(fā)人員覆山,以北京為例:
1.6?HADOOP生態(tài)圈以及各組成部分的簡(jiǎn)介
各組件簡(jiǎn)介
HADOOP(hdfs竹伸、MAPREDUCE、yarn)元老級(jí)大數(shù)據(jù)處理技術(shù)框架簇宽,擅長(zhǎng)離線數(shù)據(jù)分析
Zookeeper分布式協(xié)調(diào)服務(wù)基礎(chǔ)組件
Hbase?分布式海量數(shù)據(jù)庫(kù)勋篓,離線分析和在線業(yè)務(wù)通吃
Hive sql數(shù)據(jù)倉(cāng)庫(kù)工具,使用方便魏割,功能豐富譬嚣,基于MR延遲大
Sqoop數(shù)據(jù)導(dǎo)入導(dǎo)出工具
Flume數(shù)據(jù)采集框架
重點(diǎn)組件:
HDFS:分布式文件系統(tǒng)
MAPREDUCE:分布式運(yùn)算程序開發(fā)框架
HIVE:基于大數(shù)據(jù)技術(shù)(文件系統(tǒng)+運(yùn)算框架)的SQL數(shù)據(jù)倉(cāng)庫(kù)工具
HBASE:基于HADOOP的分布式海量數(shù)據(jù)庫(kù)
ZOOKEEPER:分布式協(xié)調(diào)服務(wù)基礎(chǔ)組件
Mahout:基于mapreduce/spark/flink等分布式運(yùn)算框架的機(jī)器學(xué)習(xí)算法庫(kù)
Oozie:工作流調(diào)度框架
Sqoop:數(shù)據(jù)導(dǎo)入導(dǎo)出工具
Flume:日志數(shù)據(jù)采集框架
2?分布式系統(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)會(huì)劃分成多個(gè)子系統(tǒng)或模塊尼桶,各自運(yùn)行在不同的機(jī)器上操灿,子系統(tǒng)或模塊之間通過(guò)網(wǎng)絡(luò)通信進(jìn)行協(xié)作,實(shí)現(xiàn)最終的整體功能
比如分布式操作系統(tǒng)泵督、分布式程序設(shè)計(jì)語(yǔ)言及其編譯(解釋)系統(tǒng)牲尺、分布式文件系統(tǒng)和分布式數(shù)據(jù)庫(kù)系統(tǒng)等。
2.2?分布式軟件系統(tǒng)舉例:solrcloud?
A.一個(gè)solrcloud集群通常有多臺(tái)solr服務(wù)器
B.每一個(gè)solr服務(wù)器節(jié)點(diǎn)負(fù)責(zé)存儲(chǔ)整個(gè)索引庫(kù)的若干個(gè)shard(數(shù)據(jù)分片)
C.每一個(gè)shard又有多臺(tái)服務(wù)器存放若干個(gè)副本互為主備用
D.索引的建立和查詢會(huì)在整個(gè)集群的各個(gè)節(jié)點(diǎn)上并發(fā)執(zhí)行
E.?solrcloud集群作為整體對(duì)外服務(wù)幌蚊,而其內(nèi)部細(xì)節(jié)可對(duì)客戶端透明
總結(jié):利用多個(gè)節(jié)點(diǎn)共同協(xié)作完成一項(xiàng)或多項(xiàng)具體業(yè)務(wù)功能的系統(tǒng)就是分布式系統(tǒng)谤碳。
2.3?分布式應(yīng)用系統(tǒng)模擬開發(fā)
需求:可以實(shí)現(xiàn)由主節(jié)點(diǎn)將運(yùn)算任務(wù)發(fā)往從節(jié)點(diǎn),并將各從節(jié)點(diǎn)上的任務(wù)啟動(dòng)溢豆;
程序清單:
AppMaster
AppSlave/APPSlaveThread
Task
程序運(yùn)行邏輯流程:
3.?離線數(shù)據(jù)分析流程介紹
注:本環(huán)節(jié)主要感受數(shù)據(jù)分析系統(tǒng)的宏觀概念及處理流程蜒简,初步理解hadoop等框架在其中的應(yīng)用環(huán)節(jié),不用過(guò)于關(guān)注代碼細(xì)節(jié)
一個(gè)應(yīng)用廣泛的數(shù)據(jù)分析系統(tǒng):“web日志數(shù)據(jù)挖掘”
3.1?需求分析
3.1.1?案例名稱
“網(wǎng)站或APP點(diǎn)擊流日志數(shù)據(jù)挖掘系統(tǒng)”漩仙。
一般中型的網(wǎng)站(10W的PV以上)搓茬,每天會(huì)產(chǎn)生1G以上Web日志文件。大型或超大型的網(wǎng)站队他,可能每小時(shí)就會(huì)產(chǎn)生10G的數(shù)據(jù)量卷仑。
具體來(lái)說(shuō),比如某電子商務(wù)網(wǎng)站麸折,在線團(tuán)購(gòu)業(yè)務(wù)锡凝。每日PV數(shù)100w,獨(dú)立IP數(shù)5w垢啼。用戶通常在工作日上午10:00-12:00和下午15:00-18:00訪問(wèn)量最大窜锯。日間主要是通過(guò)PC端瀏覽器訪問(wèn),休息日及夜間通過(guò)移動(dòng)設(shè)備訪問(wèn)較多芭析。網(wǎng)站搜索瀏量占整個(gè)網(wǎng)站的80%锚扎,PC用戶不足1%的用戶會(huì)消費(fèi),移動(dòng)用戶有5%會(huì)消費(fèi)馁启。
對(duì)于日志的這種規(guī)模的數(shù)據(jù)驾孔,用HADOOP進(jìn)行日志分析,是最適合不過(guò)的了惯疙。
3.1.2?案例需求描述
“Web點(diǎn)擊流日志”包含著網(wǎng)站運(yùn)營(yíng)很重要的信息翠勉,通過(guò)日志分析,我們可以知道網(wǎng)站的訪問(wèn)量螟碎,哪個(gè)網(wǎng)頁(yè)訪問(wèn)人數(shù)最多眉菱,哪個(gè)網(wǎng)頁(yè)最有價(jià)值迹栓,廣告轉(zhuǎn)化率掉分、訪客的來(lái)源信息俭缓,訪客的終端信息等。
3.1.3?數(shù)據(jù)來(lái)源
本案例的數(shù)據(jù)主要由用戶的點(diǎn)擊行為記錄
獲取方式:在頁(yè)面預(yù)埋一段js程序酥郭,為頁(yè)面上想要監(jiān)聽的標(biāo)簽綁定事件华坦,只要用戶點(diǎn)擊或移動(dòng)到標(biāo)簽,即可觸發(fā)ajax請(qǐng)求到后臺(tái)servlet程序不从,用log4j記錄下事件信息惜姐,從而在web服務(wù)器(nginx、tomcat等)上形成不斷增長(zhǎng)的日志文件椿息。
形如:
58.215.204.118 - - [18/Sep/2013:06:51:35 +0000] "GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1" 304 0 "http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
3.2?數(shù)據(jù)處理流程
3.2.1?流程圖解析
本案例跟典型的BI系統(tǒng)極其類似歹袁,整體流程如下:
但是,由于本案例的前提是處理海量數(shù)據(jù)寝优,因而条舔,流程中各環(huán)節(jié)所使用的技術(shù)則跟傳統(tǒng)BI完全不同,后續(xù)課程都會(huì)一一講解:
1)數(shù)據(jù)采集:定制開發(fā)采集程序乏矾,或使用開源框架FLUME
2)數(shù)據(jù)預(yù)處理:定制開發(fā)mapreduce程序運(yùn)行于hadoop集群
3)數(shù)據(jù)倉(cāng)庫(kù)技術(shù):基于hadoop之上的Hive
4)數(shù)據(jù)導(dǎo)出:基于hadoop的sqoop數(shù)據(jù)導(dǎo)入導(dǎo)出工具
5)數(shù)據(jù)可視化:定制開發(fā)web程序或使用kettle等產(chǎn)品
6)整個(gè)過(guò)程的流程調(diào)度:hadoop生態(tài)圈中的oozie工具或其他類似開源產(chǎn)品
3.2.2?項(xiàng)目技術(shù)架構(gòu)圖
3.2.3?項(xiàng)目相關(guān)截圖(感性認(rèn)識(shí)孟抗,欣賞即可)
a)?Mapreudce程序運(yùn)行
b)在Hive中查詢數(shù)據(jù)
c)將統(tǒng)計(jì)結(jié)果導(dǎo)入mysql
./sqoop export --connect jdbc:mysql://localhost:3306/weblogdb --username root --password root ?--table t_display_xx ?--export-dir /user/hive/warehouse/uv/dt=2014-08-03
3.3?項(xiàng)目最終效果
經(jīng)過(guò)完整的數(shù)據(jù)處理流程后,會(huì)周期性輸出各類統(tǒng)計(jì)指標(biāo)的報(bào)表钻心,在生產(chǎn)實(shí)踐中凄硼,最終需要將這些報(bào)表數(shù)據(jù)以可視化的形式展現(xiàn)出來(lái),本案例采用web程序來(lái)實(shí)現(xiàn)數(shù)據(jù)可視化
效果如下所示:
4.?集群搭建
4.1 HADOOP集群搭建
4.1.1集群簡(jiǎn)介
HADOOP集群具體來(lái)說(shuō)包含兩個(gè)集群:HDFS集群和YARN集群捷沸,兩者邏輯上分離摊沉,但物理上常在一起
HDFS集群:
負(fù)責(zé)海量數(shù)據(jù)的存儲(chǔ),集群中的角色主要有?NameNode / DataNode
YARN集群:
負(fù)責(zé)海量數(shù)據(jù)運(yùn)算時(shí)的資源調(diào)度痒给,集群中的角色主要有?ResourceManager /NodeManager
(那mapreduce是什么呢坯钦?它其實(shí)是一個(gè)應(yīng)用程序開發(fā)包)
?
本集群搭建案例,以5節(jié)點(diǎn)為例進(jìn)行搭建侈玄,角色分配如下:
hdp-node-01 ???NameNode ?SecondaryNameNode
hdp-node-02 ???ResourceManager
hdp-node-03?DataNode ???NodeManager
hdp-node-04?DataNode ???NodeManager
hdp-node-05?DataNode ???NodeManager
部署圖如下:
4.1.2服務(wù)器準(zhǔn)備
本案例使用虛擬機(jī)服務(wù)器來(lái)搭建HADOOP集群婉刀,所用軟件及版本:
Vmware 11.0
Centos ?6.5 ?64bit
4.1.3網(wǎng)絡(luò)環(huán)境準(zhǔn)備
采用NAT方式聯(lián)網(wǎng)
網(wǎng)關(guān)地址:192.168.33.1
3個(gè)服務(wù)器節(jié)點(diǎn)IP地址:192.168.33.101、192.168.33.102序仙、192.168.33.103
子網(wǎng)掩碼:255.255.255.0
4.1.4服務(wù)器系統(tǒng)設(shè)置
添加HADOOP用戶
為HADOOP用戶分配sudoer權(quán)限
同步時(shí)間
設(shè)置主機(jī)名
hdp-node-01
hdp-node-02
hdp-node-03
配置內(nèi)網(wǎng)域名映射:
192.168.33.101??????????hdp-node-01
192.168.33.102??????????hdp-node-02
192.168.33.103??????????hdp-node-03
配置ssh免密登陸
配置防火墻
4.1.5?Jdk環(huán)境安裝
上傳jdk安裝包
規(guī)劃安裝目錄 ?/home/hadoop/apps/jdk_1.7.65
解壓安裝包
配置環(huán)境變量 /etc/profile
4.1.6?HADOOP安裝部署
上傳HADOOP安裝包
規(guī)劃安裝目錄 ?/home/hadoop/apps/hadoop-2.6.1
解壓安裝包
修改配置文件??$HADOOP_HOME/etc/hadoop/
最簡(jiǎn)化配置如下:
vi??hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/home/hadoop/apps/jdk1.7.0_51
vi??core-site.xml
fs.defaultFS
hdfs://hdp-node-01:9000
hadoop.tmp.dir
/home/HADOOP/apps/hadoop-2.6.1/tmp
vi??hdfs-site.xml
dfs.namenode.name.dir
/home/hadoop/data/name
dfs.datanode.data.dir
/home/hadoop/data/data
dfs.replication
3
dfs.secondary.http.address
hdp-node-01:50090
vi??mapred-site.xml
mapreduce.framework.name
yarn
vi??yarn-site.xml
yarn.resourcemanager.hostname
hadoop01
yarn.nodemanager.aux-services
mapreduce_shuffle
vi??salves
hdp-node-01
hdp-node-02
hdp-node-03
4.1.7?啟動(dòng)集群
初始化HDFS
bin/hadoop??namenode ?-format?
啟動(dòng)HDFS
sbin/start-dfs.sh
啟動(dòng)YARN
sbin/start-yarn.sh
4.1.8?測(cè)試
1.上傳文件到HDFS
從本地上傳一個(gè)文本文件到hdfs的/wordcount/input目錄下
[HADOOP@hdp-node-01 ~]$ HADOOP fs -mkdir -p /wordcount/input
[HADOOP@hdp-node-01 ~]$ HADOOP fs -put /home/HADOOP/somewords.txt ?/wordcount/input
2.運(yùn)行一個(gè)mapreduce程序
在HADOOP安裝目錄下突颊,運(yùn)行一個(gè)示例mr程序
cd $HADOOP_HOME/share/hadoop/mapreduce/
hadoop jar mapredcue-example-2.6.1.jar wordcount /wordcount/input ?/wordcount/output
5?集群使用初步
5.1 HDFS使用
1).查看集群狀態(tài)
命令:?hdfs ?dfsadmin ?–report
可以看出,集群共有3個(gè)datanode可用
也可打開web控制臺(tái)查看HDFS集群信息潘悼,在瀏覽器打開http://hdp-node-01:50070/
2).上傳文件到HDFS
查看HDFS中的目錄信息
命令: ??hadoop??fs ?–ls ?/
上傳文件
命令: ??hadoop ?fs ?-put ?./?scala-2.10.6.tgz??to ?/
從HDFS下載文件
命令: ?hadoop ?fs ?-get ?/yarn-site.xml
5.2 MAPREDUCE使用
mapreduce是hadoop中的分布式運(yùn)算編程框架律秃,只要按照其編程規(guī)范,只需要編寫少量的業(yè)務(wù)邏輯代碼即可實(shí)現(xiàn)一個(gè)強(qiáng)大的海量數(shù)據(jù)并發(fā)處理程序
5.2.1 Demo開發(fā)——wordcount
1.需求
從大量(比如T級(jí)別)文本文件中治唤,統(tǒng)計(jì)出每一個(gè)單詞出現(xiàn)的總次數(shù)
2.mapreduce實(shí)現(xiàn)思路
Map階段:
a)?從HDFS的源數(shù)據(jù)文件中逐行讀取數(shù)據(jù)
b)?將每一行數(shù)據(jù)切分出單詞
c)?為每一個(gè)單詞構(gòu)造一個(gè)鍵值對(duì)(單詞棒动,1)
d)?將鍵值對(duì)發(fā)送給reduce
Reduce階段:
a)?接收map階段輸出的單詞鍵值對(duì)
b)?將相同單詞的鍵值對(duì)匯聚成一組
c)?對(duì)每一組,遍歷組中的所有“值”宾添,累加求和船惨,即得到每一個(gè)單詞的總次數(shù)
d)?將(單詞柜裸,總次數(shù))輸出到HDFS的文件中
3.具體編碼實(shí)現(xiàn)
(1)定義一個(gè)mapper類
//首先要定義四個(gè)泛型的類型
//keyin: ?LongWritable ???valuein: Text
//keyout: Text ???????????valueout:IntWritable
public class WordCountMapper extends Mapper{
//map方法的生命周期: ?框架每傳一行數(shù)據(jù)就被調(diào)用一次
//key :這一行的起始點(diǎn)在文件中的偏移量
//value:?這一行的內(nèi)容
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//拿到一行數(shù)據(jù)轉(zhuǎn)換為string
String line = value.toString();
//將這一行切分出各個(gè)單詞
String[] words = line.split(" ");
//遍歷數(shù)組,輸出<單詞粱锐,1>
for(String word:words){
context.write(new Text(word), new IntWritable(1));
}
}
}
(2)定義一個(gè)reducer類
//生命周期:框架每傳遞進(jìn)來(lái)一個(gè)kv?組疙挺,reduce方法被調(diào)用一次
@Override
protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {
//定義一個(gè)計(jì)數(shù)器
int count = 0;
//遍歷這一組kv的所有v,累加到count中
for(IntWritable value:values){
count += value.get();
}
context.write(key, new IntWritable(count));
}
}
(3)定義一個(gè)主類怜浅,用來(lái)描述job并提交job
public class WordCountRunner {
//把業(yè)務(wù)邏輯相關(guān)的信息(哪個(gè)是mapper铐然,哪個(gè)是reducer,要處理的數(shù)據(jù)在哪里恶座,輸出的結(jié)果放哪里搀暑。。跨琳。险掀。。湾宙。)描述成一個(gè)job對(duì)象
//把這個(gè)描述好的job提交給集群去運(yùn)行
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job wcjob = Job.getInstance(conf);
//指定我這個(gè)job所在的jar包
//?wcjob.setJar("/home/hadoop/wordcount.jar");
wcjob.setJarByClass(WordCountRunner.class);
wcjob.setMapperClass(WordCountMapper.class);
wcjob.setReducerClass(WordCountReducer.class);
//設(shè)置我們的業(yè)務(wù)邏輯Mapper類的輸出key和value的數(shù)據(jù)類型
wcjob.setMapOutputKeyClass(Text.class);
wcjob.setMapOutputValueClass(IntWritable.class);
//設(shè)置我們的業(yè)務(wù)邏輯Reducer類的輸出key和value的數(shù)據(jù)類型
wcjob.setOutputKeyClass(Text.class);
wcjob.setOutputValueClass(IntWritable.class);
//指定要處理的數(shù)據(jù)所在的位置
FileInputFormat.setInputPaths(wcjob, "hdfs://hdp-server01:9000/wordcount/data/big.txt");
//指定處理完成之后的結(jié)果所保存的位置
FileOutputFormat.setOutputPath(wcjob, new Path("hdfs://hdp-server01:9000/wordcount/output/"));
//向yarn集群提交這個(gè)job
boolean res = wcjob.waitForCompletion(true);
System.exit(res?0:1);
}
5.2.2?程序打包運(yùn)行
1.?將程序打包
2.?準(zhǔn)備輸入數(shù)據(jù)
vi??/home/hadoop/test.txt
Hello tom
Hello jim
Hello ketty
Hello world
Ketty tom
在hdfs上創(chuàng)建輸入數(shù)據(jù)文件夾:
hadoop???fs ?mkdir ?-p ?/wordcount/input
將words.txt上傳到hdfs上
hadoop??fs ?–put ?/home/hadoop/words.txt ?/wordcount/input
3.?將程序jar包上傳到集群的任意一臺(tái)服務(wù)器上
4.?使用命令啟動(dòng)執(zhí)行wordcount程序jar包
$ hadoop jar wordcount.jar cn.itcast.bigdata.mrsimple.WordCountDriver /wordcount/input /wordcount/out
5.?查看執(zhí)行結(jié)果
$ hadoop?fs –cat /wordcount/out/part-r-00000
擴(kuò)展:
云計(jì)算的三種服務(wù)模式:IaaS樟氢,PaaS和SaaS(公司普遍軟件服務(wù)模式)
? ? ? ?”云服務(wù)”現(xiàn)在已經(jīng)快成了一個(gè)家喻戶曉的詞了。如果你不知道PaaS, IaaS?和SaaS的區(qū)別侠鳄,那么也沒啥埠啃,因?yàn)楹芏嗳舜_實(shí)不知道∥岸瘢“云”其實(shí)是互聯(lián)網(wǎng)的一個(gè)隱喻碴开,“云計(jì)算”其實(shí)就是使用互聯(lián)網(wǎng)來(lái)接入存儲(chǔ)或者運(yùn)行在遠(yuǎn)程服務(wù)器端的應(yīng)用,數(shù)據(jù)博秫,或者服務(wù)潦牛。? ?任何一個(gè)使用基于互聯(lián)網(wǎng)的方法來(lái)計(jì)算,存儲(chǔ)和開發(fā)的公司挡育,都可以從技術(shù)上叫做從事云的公司巴碗。然而,不是所有的云公司都一樣即寒。不是所有人都是CTO橡淆,所以有時(shí)候看到云技術(shù)背后的一些詞可能會(huì)比較頭疼。
云也是分層的
任何一個(gè)在互聯(lián)網(wǎng)上提供其服務(wù)的公司都可以叫做云計(jì)算公司母赵。其實(shí)云計(jì)算分幾層的逸爵,分別是
Infrastructure(基礎(chǔ)設(shè)施)-as-a-Service,
Platform(平臺(tái))-as-a-Service凹嘲,
Software(軟件)-as-a-Service师倔。
基礎(chǔ)設(shè)施在最下端,平臺(tái)在中間周蹭,軟件在頂端趋艘。別的一些“軟”的層可以在這些層上面添加疲恢。
?IaaS: Infrastructure-as-a-Service(基礎(chǔ)設(shè)施即服務(wù))
第一層叫做IaaS,有時(shí)候也叫做Hardware-as-a-Service致稀,幾年前如果你想在辦公室或者公司的網(wǎng)站上運(yùn)行一些企業(yè)應(yīng)用冈闭,你需要去買服務(wù)器俱尼,或者別的高昂的硬件來(lái)控制本地應(yīng)用抖单,讓你的業(yè)務(wù)運(yùn)行起來(lái)∮霭耍 但是現(xiàn)在有IaaS矛绘,你可以將硬件外包到別的地方去。IaaS公司會(huì)提供場(chǎng)外服務(wù)器刃永,存儲(chǔ)和網(wǎng)絡(luò)硬件货矮,你可以租用。節(jié)省了維護(hù)成本和辦公場(chǎng)地斯够,公司可以在任何時(shí)候利用這些硬件來(lái)運(yùn)行其應(yīng)用囚玫。 一些大的IaaS公司包括Amazon, Microsoft, VMWare, Rackspace和Red Hat.不過(guò)這些公司又都有自己的專長(zhǎng)读规,比如Amazon和微軟給你提供的不只是IaaS抓督,他們還會(huì)將其計(jì)算能力出租給你來(lái)host你的網(wǎng)站。
PaaS: Platform-as-a-Service(平臺(tái)即服務(wù))
第二層就是所謂的PaaS束亏,某些時(shí)候也叫做中間件铃在。你公司所有的開發(fā)都可以在這一層進(jìn)行,節(jié)省了時(shí)間和資源碍遍。PaaS公司在網(wǎng)上提供各種開發(fā)和分發(fā)應(yīng)用的解決方案定铜,比如虛擬服務(wù)器和操作系統(tǒng)。這節(jié)省了你在硬件上的費(fèi)用怕敬,也讓分散的工作室之間的合作變得更加容易揣炕。網(wǎng)頁(yè)應(yīng)用管理,應(yīng)用設(shè)計(jì)东跪,應(yīng)用虛擬主機(jī)祝沸,存儲(chǔ),安全以及應(yīng)用開發(fā)協(xié)作工具等越庇≌秩瘢 一些大的PaaS提供者有Google App Engine,Microsoft Azure,F(xiàn)orce.com,Heroku卤唉,Engine Yard涩惑。最近興起的公司有AppFog,?Mendix和?Standing Cloud
SaaS: Software-as-a-Service(軟件即服務(wù))
第三層也就是所謂SaaS。這一層是和你的生活每天接觸的一層桑驱,大多是通過(guò)網(wǎng)頁(yè)瀏覽器來(lái)接入竭恬。任何一個(gè)遠(yuǎn)程服務(wù)器上的應(yīng)用都可以通過(guò)網(wǎng)絡(luò)來(lái)運(yùn)行跛蛋,就是SaaS了∪叮 你消費(fèi)的服務(wù)完全是從網(wǎng)頁(yè)如Netflix, MOG, Google Apps, Box.net, Dropbox或者蘋果的iCloud那里進(jìn)入這些分類赊级。盡管這些網(wǎng)頁(yè)服務(wù)是用作商務(wù)和娛樂或者兩者都有,但這也算是云技術(shù)的一部分岔绸±硌罚 一些用作商務(wù)的SaaS應(yīng)用包括Citrix的GoToMeeting,Cisco的WebEx盒揉,Salesforce的CRM晋被,ADP,Workday和SuccessFactors刚盈。
Iaas和Paas之間的比較
PaaS的主要作用是將一個(gè)開發(fā)和運(yùn)行平臺(tái)作為服務(wù)提供給用戶羡洛,而IaaS的主要作用是提供虛擬機(jī)或者其他資源作為服務(wù)提供給用戶。接下來(lái)藕漱,將在七個(gè)方面對(duì)PaaS和IaaS進(jìn)行比較:
?1)?開發(fā)環(huán)境:PaaS基本都會(huì)給開發(fā)者提供一整套包括IDE在內(nèi)的開發(fā)和測(cè)試環(huán)境欲侮,而IaaS方面用戶主要還是沿用之前比較熟悉那套開發(fā)環(huán)境,但是因?yàn)橹澳翘组_發(fā)環(huán)境在和云的整合方面比較欠缺肋联,所以使用起來(lái)不是很方便威蕉。?2)?支持的應(yīng)用:因?yàn)镮aaS主要是提供虛擬機(jī),而且普通的虛擬機(jī)能支持多種操作系統(tǒng)牺蹄,所以IaaS支持的應(yīng)用的范圍是非常廣泛的忘伞。但如果要讓一個(gè)應(yīng)用能跑在某個(gè)PaaS平臺(tái)不是一件輕松的事,因?yàn)椴粌H需要確保這個(gè)應(yīng)用是基于這個(gè)平臺(tái)所支持的語(yǔ)言沙兰,而且也要確保這個(gè)應(yīng)用只能調(diào)用這個(gè)平臺(tái)所支持的API氓奈,如果這個(gè)應(yīng)用調(diào)用了平臺(tái)所不支持的API,那么就需要對(duì)這個(gè)應(yīng)用進(jìn)行修改鼎天。3)?開放標(biāo)準(zhǔn):雖然很多IaaS平臺(tái)都存在一定的私有功能舀奶,但是由于OVF等協(xié)議的存在,使得IaaS在跨平臺(tái)和避免被供應(yīng)商鎖定這兩面是穩(wěn)步前進(jìn)的斋射。而PaaS平臺(tái)的情況則不容樂觀育勺,因?yàn)椴徽撌荊oogle的App Engine,還是Salesforce的Force.com都存在一定的私有API罗岖。?4)?可伸縮性:PaaS平臺(tái)會(huì)自動(dòng)調(diào)整資源來(lái)幫助運(yùn)行于其上的應(yīng)用更好地應(yīng)對(duì)突發(fā)流量涧至。而IaaS平臺(tái)則需要開發(fā)人員手動(dòng)對(duì)資源進(jìn)行調(diào)整才能應(yīng)對(duì)。?5)?整合率和經(jīng)濟(jì)性:PaaS平臺(tái)整合率是非常高桑包,比如PaaS的代表Google App Engine能在一臺(tái)服務(wù)器上承載成千上萬(wàn)的應(yīng)用南蓬,而普通的IaaS平臺(tái)的整合率最多也不會(huì)超過(guò)100,而且普遍在10左右,使得IaaS的經(jīng)濟(jì)性不如PaaS赘方。?6)?計(jì)費(fèi)和監(jiān)管:因?yàn)镻aaS平臺(tái)在計(jì)費(fèi)和監(jiān)管這兩方面不僅達(dá)到了IaaS平臺(tái)所能企及的操作系統(tǒng)層面烧颖,比如,CPU和內(nèi)存的使用量等窄陡,而且還能做到應(yīng)用層面炕淮,比如,應(yīng)用的反應(yīng)時(shí)間(Response Time)或者應(yīng)用所消耗的事務(wù)多少等跳夭,這將提高計(jì)費(fèi)和管理的精確性涂圆。?7)?學(xué)習(xí)難度:因?yàn)樵贗aaS上面開發(fā)和管理應(yīng)用和現(xiàn)有的方式比較接近,而PaaS上面開發(fā)則有可能需要學(xué)一門新的語(yǔ)言或者新的框架优妙,所以IaaS學(xué)習(xí)難度更低子巾。
PaaSIaaS
開發(fā)環(huán)境完善普通
支持的應(yīng)用有限廣
通用性欠缺稍好
可伸縮性自動(dòng)伸縮手動(dòng)伸縮
整合率和經(jīng)濟(jì)性高整合率跳纳,更經(jīng)濟(jì)低整合率
計(jì)費(fèi)和監(jiān)管精細(xì)簡(jiǎn)單
學(xué)習(xí)難度略難低
表1. PaaS和IaaS之間的比較
未來(lái)的PK
?在當(dāng)今云計(jì)算環(huán)境當(dāng)中,IaaS是非常主流的霹疫,無(wú)論是Amazon EC2還是Linode或者Joyent等胞皱,都占有一席之地邪意,但是隨著Google的App Engine,Salesforce的Force.com還是微軟的Windows Azure等PaaS平臺(tái)的推出反砌,使得PaaS也開始嶄露頭角雾鬼。談到這兩者的未來(lái),特別是這兩者之間的競(jìng)爭(zhēng)關(guān)系宴树,我個(gè)人認(rèn)為策菜,短期而言,因?yàn)镮aaS模式在支持的應(yīng)用和學(xué)習(xí)難度這兩方面的優(yōu)勢(shì)酒贬,使得IaaS將會(huì)在短期之內(nèi)會(huì)成為開發(fā)者的首選又憨,但是從長(zhǎng)期而言,因?yàn)镻aaS模式的高整合率所帶來(lái)經(jīng)濟(jì)型使得如果PaaS能解決諸如通用性和支持的應(yīng)用等方面的挑戰(zhàn)锭吨,它將會(huì)替代IaaS成為開發(fā)者的“新寵”蠢莺。