Hadoop 初步學(xué)習(xí)文檔.docx_第1頁
Hadoop 初步學(xué)習(xí)文檔.docx_第2頁
Hadoop 初步學(xué)習(xí)文檔.docx_第3頁
Hadoop 初步學(xué)習(xí)文檔.docx_第4頁
Hadoop 初步學(xué)習(xí)文檔.docx_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Hadoop 初步學(xué)習(xí)文檔1 Hadoop簡介Apache Hadoop是一款支持?jǐn)?shù)據(jù)密集型分布式應(yīng)用并以Apache 2.0許可協(xié)議發(fā)布的開源軟件框架。它支持在商品硬件構(gòu)建的大型集群上運行的應(yīng)用程序。Hadoop是根據(jù)Google公司發(fā)表的MapReduce和Google文件系統(tǒng)的論文自行實現(xiàn)而成。1.1Hadoop基本構(gòu)成Hadoop是一個能夠?qū)Υ罅繑?shù)據(jù)進行分布式處理的軟件框架, Hadoop實現(xiàn)了一個分布式文件系統(tǒng)(Hadoop Distributed File System),簡稱HDFS。hadoop的集群是基于master/slave模式Hadoop基本運行結(jié)構(gòu)圖如下:其中mast

2、er和slave1、slave2、slave3、slave4分別為五臺主機,NameNode、DataNode等為運行在主機上的進程。進程的作用如下:(一)NameNode是HDFS的守護程序,負責(zé)記錄文件是如何分割成數(shù)據(jù)塊的,以及這些數(shù)據(jù)塊分別被存到那些數(shù)據(jù)節(jié)點上,主要功能是對內(nèi)存及I/O進行集中管理(是個單點,發(fā)生故障將使集群崩潰)(二)DataNode這個后臺程序負責(zé)把HDFS數(shù)據(jù)塊讀寫到本地的文件系統(tǒng),當(dāng)客戶端要讀寫某個數(shù)據(jù)時候,先由NameNode告訴客戶端去哪個DataNode進行具體的讀/寫操作,然后客戶端直接與這個DataNode服務(wù)器上的后臺程序進行通訊,并且對相關(guān)的數(shù)據(jù)塊進

3、行讀/寫操作。(三)SecondaryNameNode:是一個用來監(jiān)控HDFS狀態(tài)的輔助后臺程序,就像NameNode一樣,每個集群都有一個Secondary NameNode,不接收或記錄任何實時的數(shù)據(jù)變化,但是,他會與NameNode進行通信,以便定期的保存HDFS元數(shù)據(jù)的快照,如果Name發(fā)生問題,SecondaryNameNode可以及時的作為備用NameNode。(四)JobTracker:用來連接應(yīng)用程序與Hadoop,用戶代碼提交到集群以后,由JobTracker決定那個文件將被處理,并且為不同的task分配節(jié)點,同時,他還監(jiān)控所有運行的task一旦某個task失敗了JobTac

4、ker就會自動重新開啟task。每個集群只有唯一一個JobTracker,位于Master節(jié)點(五)TaskTracker:與負責(zé)存儲的DataNode結(jié)合,JobTracker負責(zé)分配Tasker,管理各自節(jié)點上的task。每個節(jié)點只有一個TaskTracker,但一個TaskTracker可以啟動多個JVM,用于并行執(zhí)行map或reduce任務(wù)1.2 Hadoop 版本演進 Hadoop 經(jīng)歷了從Hadoop 1.x到Hadoop 2.x的演變,其中Hadoop1.X中的NameNodes只可能有一個,雖然可以通過SecondaryNameNode與NameNode進行數(shù)據(jù)同步備份,但是總

5、會存在一定的時延,如果NameNode掛掉,但是如果有部分?jǐn)?shù)據(jù)還沒有同步到SecondaryNameNode上,還是可能會存在著數(shù)據(jù)丟失的問題。其架構(gòu)圖如下:Hadoop2相比較于Hadoop1.x來說,HDFS的架構(gòu)與MapReduce的都有較大的變化,且速度上和可用性上都有了很大的提高,Hadoop2中有兩個重要的變更:(1)HDFS NameNodes可以以集群的方式布署,增強了NameNodes的水平擴展能力和可用性;(2)MapReduce將JobTracker中的資源管理及任務(wù)生命周期管理(包括定時觸發(fā)及監(jiān)控),拆分成兩個獨立的組件,并更名為YARN(Yet Another Res

6、ource Negotiator)。Hadoop2.x架構(gòu)圖如下:2 Hadoop開發(fā)環(huán)境搭建Hadoop是一個開放源代碼的大數(shù)據(jù)處理平臺,既可以在windows系統(tǒng)下運行,也可以在linux系統(tǒng)下運行,但是由于其開源特性及系統(tǒng)性能等方面的原因,目前主要應(yīng)用是在linux系統(tǒng)下,因此學(xué)習(xí)使用Hadoop開發(fā),一定要熟悉linux系統(tǒng)的一些必要知識。2.1 應(yīng)用系統(tǒng)之linux系統(tǒng)Linux是一種自由和開放源代碼的類UNIX操作系統(tǒng)。Linux本身只是一個內(nèi)核。在加上用戶空間的應(yīng)用程序之后,成為Linux操作系統(tǒng)。Linux也是自由軟件和開放源代碼軟件發(fā)展中最著名的例子。只要遵循GNU通用公共許

7、可證,任何個人和機構(gòu)都可以自由地使用Linux的所有底層源代碼,也可以自由地修改和再發(fā)布。大多數(shù)Linux系統(tǒng)還包括像提供GUI的X Window之類的程序。除了一部分專家之外,大多數(shù)人都是直接使用Linux發(fā)行版,而不是自己選擇每一樣組件或自行設(shè)置。目前常用的Linux發(fā)行版本比較多,常用的有:一、Red Hat 又稱為小紅帽,在國內(nèi),乃至是全世界的Linux用戶所最熟悉、最耳聞能詳?shù)陌l(fā)行版。目前Red Hat分為兩個系列:由RedHat公司提供收費技術(shù)支持和更新的Red Hat Enterprise Linux,以及由社區(qū)開發(fā)的免費的Fedora Core。FedoraCore的定位是桌面

8、用戶。它的版本更新周期也非常短,僅六個月。因此服務(wù)器上大多數(shù)不用FedoraCore。適用于服務(wù)器的版本是Red Hat Enterprise Linux,而由于這是個收費的操作系統(tǒng)。于是,國內(nèi)外許多企業(yè)或空間商選擇CentOS。CentOS可以算是Red Hat Enterprise Linux的克隆版,但它最大的好處是免費!因此目前的服務(wù)器便采用的CentOS 系統(tǒng)。 由于CentOS是開源的,可以到官網(wǎng)去下載安裝CentOS系統(tǒng)。目前我們使用的Linux系統(tǒng)也正是CentOS6.5系統(tǒng)。二、Ubuntu 系統(tǒng),這是比較常用的桌面發(fā)行版系統(tǒng),Ubuntu的安裝非常的人性化,只要按照提示一步

9、一步進行,安裝和Windows同樣簡便!并且,Ubuntu被譽為對硬件支持最好最全面的Linux發(fā)行版之一,許多在其他發(fā)行版上無法使用,或者默認配置時無法使用的硬件,在Ubuntu上輕松搞定。并且,Ubuntu采用自行加強的內(nèi)核(kernel),安全性方面更上一層樓。并且,Ubuntu默認不能直接root登陸,必須從第一個創(chuàng)建的用戶通過su或sudo來獲取root權(quán)限(這也許不太方便,但無疑增加了安全性,避免用戶由于粗心而損壞系統(tǒng))。Ubuntu的版本周期為六個月,彌補了Debian更新緩慢的不足。 優(yōu)點:人氣頗高的論壇提供優(yōu)秀的資源和技術(shù)支持,固定的版本更新周期和技術(shù)支持,可從Debian

10、Woody直接升級 缺點:還未建立成熟的商業(yè)模式。Ubuntu 系統(tǒng)安裝簡單,使用界面友好,適合入門使用。三、SUSE是德國最著名的Linux發(fā)行版,在全世界范圍中也享有較高的聲譽。SUSE自主開發(fā)的軟件包管理系統(tǒng)YaST也大受好評。SUSE于2003年年末被Novell收購。 SUSE之后的發(fā)布顯得比較混亂,比如9.0版本是收費的,而10.0版本(也許由于各種壓力)又免費發(fā)布。這使得一部分用戶感到困惑,也轉(zhuǎn)而使用其它發(fā)行版本。但是,瑕不掩瑜,SUSE仍然是一個非常專業(yè)、優(yōu)秀的發(fā)行版。 優(yōu)點:專業(yè),易用的YaST軟件包管理系統(tǒng) 缺點:FTP發(fā)布通常要比零售版晚13個月。四、Debian GNU

11、/Linux ,Debian最早由IanMurdock于1993年創(chuàng)建。可以算是迄今為止,最遵循GNU規(guī)范的Linux系統(tǒng)。Debian系統(tǒng)分為三個版本分支(branch):stable, testing 和 unstable。截至2005年5月,這三個版本分支分別對應(yīng)的具體版本為:Woody, Sarge 和Sid。其中,unstable為最新的測試版本,其中包括最新的軟件包,但是也有相對較多的bug,適合桌面用戶。testing的版本都經(jīng)過unstable中的測試,相對較為穩(wěn)定,也支持了不少新技術(shù)(比如SMP等)。而Woody一般只用于服務(wù)器,上面的軟件包大部分都比較過時,但是穩(wěn)定和安全性

12、都非常的高。dpkg是Debian系列特有的軟件包管理工具,它被譽為所有Linux軟件包管理工具(比如RPM)最強大的!配合apt-get,在Debian上安裝、升級、刪除和管理軟件變得異常容易。優(yōu)點:遵循GNU規(guī)范,100%免費,優(yōu)秀的網(wǎng)絡(luò)和社區(qū)資源,強大的apt-get 缺點:安裝相對不易,stable分支的軟件極度過時在對linux的學(xué)習(xí)時,初步應(yīng)該學(xué)習(xí)linux系統(tǒng)常用的命令。如cd命令、ls命令等,參考網(wǎng)址(/ljianhui/article/details/11100625)對于命令的學(xué)習(xí)比較有效的方法是自已安裝一個linux系統(tǒng),然后我使用這

13、些命令進行操作。2.2 開發(fā)IDE之eclipseEclipse是著名的跨平臺開源集成開發(fā)環(huán)境(IDE)。最初主要用來Java語言開發(fā),目前亦有人通過插件使其作為C+、Python、PHP等其他語言的開發(fā)工具。Eclipse的本身只是一個框架平臺,但是眾多插件的支持,使得Eclipse擁有較佳的靈活性,所以許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。目前我們是在eclipse集成開發(fā)環(huán)境下,安裝hadoop插件進行對hadoop程序的開發(fā)。插件下載時注意下載linux版本的。同時應(yīng)該熟悉linux的安裝命令等。2.3 開源hadoop源代碼下載由于hadoop是開源平臺代碼和源程序可

14、以自由下載,官網(wǎng)提供兩種源碼,一種是源代碼主要是未編譯的源代碼,可以進行源碼學(xué)習(xí),自行編譯等, 如hadoop2.6的源代碼下載地址:(/dist/hadoop/common/hadoop-2.6.5/hadoop-2.6.5-src.tar.gz)。另一種是編譯好的二進制程序,二進制程序可以直接放在系統(tǒng)上使用。如hadoop2.6的二進制程序下載地(/dist/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz)。2.4 安裝hadoop平臺環(huán)境在centos

15、下安裝hadoop平臺參考(/install-hadoop-in-centos/)主要步驟包括:(一)創(chuàng)建hadoop用戶,創(chuàng)建hadoop用戶的命令為useradd,此命令需要有root用戶權(quán)限(要知道root用戶的密碼,或者使用su命令進行權(quán)限切換)。(二)安裝SSH、配置SSH無密碼登陸,由于hadoop是分布式平臺,所以需要各主機無密碼登陸。(三)安裝Java環(huán)境,這個參考Java安裝教程即可,注意配置環(huán)境變量。(四)安裝 Hadoop 2.6,目前使用的版本為Hadoop2.6,下載地址如2.3節(jié)所示。(五)Hadoop配置文件配置,配置

16、文件的配置參考這個(/yangjl38/article/details/7583374)。2.5安裝eclipse開發(fā)環(huán)境目前用的開發(fā)環(huán)境是在eclipse下安裝hadoop插件,Hadoop插件的安裝參考如下網(wǎng)址(/a/1190000002676066),插件安裝后需要對主機和端口進行配置,具體看教程。3 Hadoop基本模塊學(xué)習(xí)Hadoop2.6項目有四大基本模塊,分別是Hadoop Common、HDFS(Hadoop Distributed File System)、Hadoop Yarn 云的操作系統(tǒng)

17、、Hadoop Mapreduce。Hadoop Common:為了支持其他模塊的一些公共類,和框架;HDFS(Hadoop Distributed File System)Hdfs提供高吞吐量的訪問能力 , 用來存儲數(shù)據(jù)。具有高容錯性,高伸縮性的優(yōu)點,允許用戶將hadoop部署在廉價的硬件上,構(gòu)建分布式系統(tǒng);Hadoop Yarn 云的操作系統(tǒng):給部署在yarn上的應(yīng)用,分配資源,管理資源。(任務(wù)調(diào)度)job / application 調(diào)度;Hadoop Mapreduce:Mapreduce擔(dān)當(dāng)并行的計算分析任務(wù)。允許用戶在不了解分布式系統(tǒng)底層細節(jié)的情況下開發(fā)并行,分布式的應(yīng)用程序。Ma

18、p和reduce,map是映射,reduce是規(guī)約。我用自己的理解方式說,Map就是一種映射計算,讓我們知道數(shù)據(jù)塊的位置屬性等,Reduce就是一種各種數(shù)據(jù)塊分別求和的方式。4 Hadoop之Hello World通過一個簡單的統(tǒng)計輸入文本的例子來學(xué)習(xí)hadoop編程。這個源碼實現(xiàn)的功能是統(tǒng)計輸入文件中每個單詞出現(xiàn)的次數(shù),并且將單詞以及這個單詞出現(xiàn)的次數(shù)寫入文件作為輸出。 源碼如下,其中最主要是重新實現(xiàn)了一下標(biāo)紅的兩個函數(shù)map/reduce函數(shù)。同時要學(xué)習(xí)hadoop特有的類,比如字符串類StringTokenizer,整數(shù)類型IntWritable等。這些基礎(chǔ)知識的學(xué)習(xí)的網(wǎng)址(http:/

19、/docs/stable/api/),對源碼中重要語句功能添加了注釋。注釋寫在了每行語句的下面。/*/package wordcount;import java.io.IOException;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;impo

20、rt org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;/以上為導(dǎo)

21、入程序需要用的包和相關(guān)類public class CWordCount public static class TokenizerMapper extendsMapper private final static IntWritable one = new IntWritable(1);/one初始值為1表示單詞出現(xiàn)的次數(shù)初始為1private Text word = new Text();public void map(Object key, Text value, Context context)/重寫了map函數(shù),注意前兩個參數(shù)和上面Mapper中前兩個類型對應(yīng)throws IOExce

22、ption, InterruptedException StringTokenizer itr = new StringTokenizer(value.toString(); /value變量存儲的是輸入文件的內(nèi)容,要了解StringTokenizer類及成員函數(shù)while (itr.hasMoreTokens() word.set(itr.nextToken();context.write(word, one); /將單詞及出現(xiàn)的次數(shù)(默認值1)寫入上下文System.out.println(map message:+word+/+one);public static class IntSu

23、mReducer extendsReducer private IntWritable result = new IntWritable();public void reduce(Text key, Iterable values,Context context) /參數(shù)含義key-單詞,values是一個整型的數(shù)組,里存放了此單詞每行出現(xiàn)的次數(shù) throws IOException, InterruptedException int sum = 0;for (IntWritable val : values) sum += val.get(); /遍歷數(shù)組,將這個單詞出現(xiàn)的次數(shù)求和,最后su

24、m變量存放就是這個單詞出現(xiàn)總數(shù)result.set(sum);context.write(key, result); /將這個單詞及出現(xiàn)的次數(shù)寫入上下文(最后會輸出到文件)System.out.println(reduce message:+key+/+result);public static void main(String args) throws Exception /main函數(shù)中的以下用法一般相對固定,具體含義參考hadoop使用手冊Configuration conf = new Configuration();String otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();if (otherArgs.length != 2) System.err.println(Usage: wordcount );System.exit(2);Job job = new Job(conf, word count);job.setJarByClass(CWordCount.class);job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(IntSumReduc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論