日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop的伪分布安装 hadoop的核心思想

發(fā)布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop的伪分布安装 hadoop的核心思想 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Hadoop的偽分布安裝

hadoop的安裝分為本地模式、偽分布模式、集群模式。本地模式是運行在本地,只負責存儲,沒有計算功能,本書不講述。偽分布模式是在一臺機器上模擬分布式部署,方便學(xué)習和調(diào)試。集群模式是在多個機器上配置hadoop,是真正的“分布式”。本章講述偽分布模式和集群的安裝。

1. 解壓縮hadoop

使用WinSCP把壓縮包hadoop-1.1.2.tar.gz從宿主機復(fù)制到linux的/usr/local目錄下,如圖3-1。

圖3-1

解壓縮文件,并重命名為hadoop,方便使用。重命名后,hadoop目錄的完整路徑是“/usr/local/hadoop”。

#tar -xzvf hadoop-1.0.4.tar.gz#mv hadoop-1.0.4 hadoop

設(shè)置環(huán)境變量HADOOP_HOME,修改文件“/etc/profile”,如下圖:

圖3-2

請讀者與jdk設(shè)置時配置文件對照。這里我們設(shè)置了一個別名cdha,可以快速轉(zhuǎn)到hadoop的目錄。

修改環(huán)境變量后,記得執(zhí)行source命令哦。

現(xiàn)在讓我們?yōu)g覽一下hadoop的目錄結(jié)構(gòu)吧

圖3-3

我們關(guān)注bin目錄和conf目錄。

2. 修改配置文件

hadoop配置文件默認是本地模式,我們修改四個配置文件,這些文件都位于$HADOOP_HOME/conf目錄下。

第一個是hadoop環(huán)境變量腳本文件hadoop-env.sh,修改第9行代碼為。

export JAVA_HOME=/usr/local/jdk

保存并關(guān)閉。這里設(shè)置的是JAVA_HOME,注意去掉前面的“#”。

第二個是hadoop核心配置文件core-site.xml,結(jié)果如下

<configuration>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hadoop/tmp</value>

<description>hadoop的運行臨時文件的主目錄</description>

</property>

<property>

<name>fs.default.name</name>

<value>hdfs://book0:9000</value>

<description>HDFS的訪問路徑</description>

</property>

</configuration>

第三個是hdfs配置文件hdfs-site.xml,結(jié)果如下

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

<description>存儲副本數(shù)</description>

</property>

</configuration>

第四個是MapReduce配置文件mapred-site.xml,結(jié)果如下

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>book0:9001</value>

<description>JobTracker的訪問路徑</description>

</property>

</configuration>

這是安裝偽分布模式的最小化配置。目前的任務(wù)是把hadoop跑起來,先不關(guān)注各配置項什么含義,這些配置項還在后文會有詳細的解釋。

3. 格式化文件系統(tǒng)

hdfs是文件系統(tǒng),所以在第一次使用之前需要進行格式化。執(zhí)行命令$HADOOP_HOME/bin/hadoop namenode –format。見圖3-4

圖3-4

注意:只在第一次啟動的時候格式化,不要每次啟動都格式化。理解為我們新買了塊移動硬盤,使用之前總要格式化硬盤。

如果真的有必要再次格式化,請先把“$HADOOP_HOME/tmp”目錄下的文件全部刪除。

讀者可以自己觀察目錄”$HADOOP_HOME/tmp”在格式化前后的變化情況。

格式化操作很少有出現(xiàn)失敗的情況。如果真出現(xiàn)了,請檢查配置是否正確。

4. 啟動

格式化完成后,開始啟動hadoop程序。

啟動hadoop的命令腳本都在$HADOOP_HOME/bin/下,下面的所有命令都不再帶有完整路徑名稱。

這里講述hadoop啟動的三種方式:

第一種,一次性全部啟動

圖3-5

執(zhí)行start-all.sh啟動hadoop,觀察控制臺的輸出,見圖3-5,可以看到正在啟動進程,分別是namenode、datanode、secondarynamenode、jobtracker、tasktracker,一共5個,待執(zhí)行完畢后,并不意味著這5個進程成功啟動,上面僅僅表示系統(tǒng)正在啟動進程而已。

我們使用jdk的命令jps查看進程是否已經(jīng)正確啟動。執(zhí)行以下jps,如果看到了這5個進程,見圖3-6,說明hadoop真的啟動成功了。如果缺少一個或者多個,那就進入到“Hadoop的常見啟動錯誤”章節(jié)尋找原因了。

圖3-6

關(guān)閉hadoop的命令是stop-all.sh。

上面的命令是最簡單的,可以一次性把所有節(jié)點都啟動、關(guān)閉。除此之外,還有其他命令,是分別啟動的。

第二種,分別啟動HDFS和MapReduce:

圖3-7

執(zhí)行命令start-dfs.sh,是單獨啟動hdfs,見圖3-7。執(zhí)行完該命令后,通過jps能夠看到NameNode、DataNode、SecondaryNameNode三個進程啟動了,該命令適合于只執(zhí)行hdfs存儲不使用MapReduce做計算的場景。關(guān)閉的命令就是stop-dfs.sh了。

圖3-8

執(zhí)行命令start-mapred.sh,可以單獨啟動MapReduce的兩個進程。關(guān)閉的命令就是stop-mapred.sh了。當然,也可以先啟動MapReduce,再啟動HDFS。這說明,HDFS和MapReduce的進程之間是互相獨立的,沒有依賴關(guān)系。

第三種,分別啟動各個進程

[root@book0 bin]# jps

14821 Jps

[root@book0 bin]# hadoop-daemon.sh start namenode

[root@book0 bin]# hadoop-daemon.sh start datanode

[root@book0 bin]# hadoop-daemon.sh start secondarynamenode

[root@book0 bin]# hadoop-daemon.sh start jobtracker

[root@book0 bin]# hadoop-daemon.sh start tasktracker

[root@book0 bin]# jps

14855 NameNode

14946 DataNode

15043 SecondaryNameNode

15196 TaskTracker

15115 JobTracker

15303 Jps

執(zhí)行的命令是“hadoop-daemon.sh start [進程名稱]”,這種啟動方式適合于單獨增加、刪除節(jié)點的情況,在安裝集群環(huán)境的時候會看到。

5. 運行簡單的MapReduce計算

在$HADOOP_HOME下有個jar包,叫hadoop-example-1.1.2.jar,見圖3-9,這里面含有框架提供的很多例子.我們現(xiàn)在學(xué)習一下如何運行其中的例子吧.

圖3-9

hadoop jar hadoop-example-1.1.2.jar

執(zhí)行如下命令

可以看到圖3-10的輸出信息,可以看到18個輸出信息,都是內(nèi)置的例子程序.我們選擇最后一個”word count”來運行,該程序的說明在最后,是統(tǒng)計文件中單詞的出現(xiàn)次數(shù)的.

圖3-10

如何執(zhí)行這個程序哪?見圖3-11,如下

圖3-11

根據(jù)用法,我們需要補全wordcount的文件輸入路徑和文件輸出路徑.我們首先上傳一個文件到hdfs中,見圖3-12.那么輸入文件的路徑就是/README.txt了。

圖3-12

這時候我們再運行wordcount例子,命令如下

hadoop jar hadoop-examples-1.1.2.jar wordcount

/README.txt /wordcountoutput

在這條命令中,“/README.txt”是我們剛才上傳到hdfs中的文件,作為輸入路徑;“/wordcountoutput”是設(shè)定的輸出路徑,該路徑在命令執(zhí)行前是不存在的。

等到命令執(zhí)行結(jié)束,運行的結(jié)果就會存在輸出路徑的文件夾中,文件名稱叫做“part-r-00000”,我們使用命令查看輸出內(nèi)容,如圖3-13

圖3-13

以上只是顯示了一部分。顯示結(jié)果是按照字符的字段順序排列的,每一行顯示字符及出現(xiàn)次數(shù)。

如果讀者能夠成功運行,那么恭喜你!你看到的就是hadoop的MapReduce做的事情。通過一個簡單的命令,就可以把文件中的單詞統(tǒng)計一遍出現(xiàn)次數(shù),還是很有意思的。參加工作后,大家會根據(jù)輸入文件的內(nèi)容和類型,寫這樣的算法程序,產(chǎn)生輸出結(jié)果。



hadoop的核心思想
1.1.1. hadoop的核心思想

Hadoop包括兩大核心,分布式存儲系統(tǒng)和分布式計算系統(tǒng)。

1.1.1.1. 分布式存儲

為什么數(shù)據(jù)需要存儲在分布式的系統(tǒng)中哪,難道單一的計算機存儲不了嗎,難道現(xiàn)在的幾個TB的硬盤裝不下這些數(shù)據(jù)嗎?事實上,確實裝不下。比如,很多的電信通話記錄就存儲在很多臺服務(wù)器的很多硬盤中。那么,要處理這么多數(shù)據(jù),必須從一臺一臺服務(wù)器分別讀取數(shù)據(jù)和寫入數(shù)據(jù),太麻煩了!

我們希望有一種文件系統(tǒng),可以管轄很多服務(wù)器用于存儲數(shù)據(jù)。通過這個文件系統(tǒng)存儲數(shù)據(jù)時,感覺不到是存儲到不同的服務(wù)器上的。當讀取數(shù)據(jù)時,感覺不到是從不同的服務(wù)器上讀取。如圖2-1所示。這就是分布式文件系統(tǒng)。

圖2-1

分布式文件系統(tǒng)管理的是一個服務(wù)器集群。在這個集群中,數(shù)據(jù)存儲在集群的節(jié)點(即集群中的服務(wù)器)中,但是該文件系統(tǒng)把服務(wù)器的差異屏蔽了。那么,我們就可以像使用普通的文件系統(tǒng)一樣使用,但是數(shù)據(jù)卻分散在不同的服務(wù)器中。

在分布式存儲系統(tǒng)中,分散在不同節(jié)點中的數(shù)據(jù)可能屬于同一個文件,為了組織眾多的文件,把文件可以放到不同的文件夾中,文件夾可以一級一級的包含。我們把這種組織形式稱為命名空間(namespace)。命名空間管理著整個服務(wù)器集群中的所有文件。很明顯,命名空間的職責與存儲真實數(shù)據(jù)的職責是不一樣的。集群中不同的節(jié)點承擔不同的職責。負責命名空間職責的節(jié)點稱為主節(jié)點(master node),負責存儲真實數(shù)據(jù)職責的節(jié)點稱為從節(jié)點(slave node)。主節(jié)點負責管理文件系統(tǒng)的文件結(jié)構(gòu),從節(jié)點負責存儲真實的數(shù)據(jù),稱為主從式結(jié)構(gòu)(master-slaves)。用戶操作時,也應(yīng)該先和主節(jié)點打交道,查詢數(shù)據(jù)在哪些從節(jié)點上存儲,然后再從從節(jié)點讀取,如圖2-2所示。在主節(jié)點,為了加快用戶訪問的速度,會把整個命名空間信息都放在內(nèi)存中,當存儲的文件越多時,那么主節(jié)點就需要越多的內(nèi)存空間。在從節(jié)點存儲數(shù)據(jù)時,有的原始數(shù)據(jù)文件可能很大,有的可能很小,大小不一的文件不容易管理,那么可以抽象出一個獨立的存儲文件單位,稱為塊(block)。數(shù)據(jù)存放在集群中,可能因為網(wǎng)絡(luò)原因或者服務(wù)器硬件原因造成訪問失敗,最好采用副本(replication)機制,把數(shù)據(jù)同時備份到多臺服務(wù)器中,這樣數(shù)據(jù)就安全了,數(shù)據(jù)丟失或者訪問失敗的概率就小了。

圖2-2

在以上的主從式結(jié)構(gòu)中,由于主節(jié)點含有整個文件系統(tǒng)的目錄結(jié)構(gòu)信息,因為非常重要。另外,由于主節(jié)點運行時會把命名空間信息都放到內(nèi)存中,因此存儲的文件越多,主節(jié)點的內(nèi)存就需要的越多。

在hadoop中,分布式存儲系統(tǒng)稱為HDFS(hadoop distributed file system)。其中,主節(jié)點稱為名字節(jié)點(namenode),從節(jié)點稱為數(shù)據(jù)節(jié)點(datanode)。

1.1.1.2. 分布式計算

對數(shù)據(jù)進行處理時,我們會把數(shù)據(jù)讀取到內(nèi)存中進行處理。如果我們對海量數(shù)據(jù)進行處理,比如數(shù)據(jù)大小是100GB,我們要統(tǒng)計文件中一共有多少個單詞。要想把數(shù)據(jù)都加載到內(nèi)存中幾乎是不可能的,稱為移動數(shù)據(jù)。隨著技術(shù)發(fā)展,即使服務(wù)器有100GB內(nèi)存,那么服務(wù)器價格也會很高,不是普通老百姓能夠消受得了得。即使數(shù)據(jù)能夠加載到內(nèi)存,那么加載這100GB的數(shù)據(jù)到內(nèi)存也要消耗很長時間。這些問題都在困撓著我們對大數(shù)據(jù)的處理。也就是說移動計算的處理方式不適合大數(shù)據(jù)計算。

換個思路,既然移動數(shù)據(jù)不合適,那么是否可以把程序代碼放到存放數(shù)據(jù)的服務(wù)器上哪?因為程序代碼與原始數(shù)據(jù)相比,一般很小,幾乎可以忽略的,所以省下了原始數(shù)據(jù)傳輸?shù)臅r間了。現(xiàn)在,數(shù)據(jù)是存放在分布式文件系統(tǒng)中,100GB的數(shù)據(jù)可能存放在很多的服務(wù)器上,那么就可以把程序代碼分發(fā)到這些服務(wù)器上,在這些服務(wù)器上同時執(zhí)行,也就是并行計算,也是分布式計算。這就大大縮短了程序的執(zhí)行時間。我們把程序代碼移動到數(shù)據(jù)節(jié)點的機器上執(zhí)行的計算方式稱為移動計算。

分布式計算需要的是最終的結(jié)果,程序代碼在很多機器上并行執(zhí)行后會產(chǎn)生很多的結(jié)果,因此需要有一段代碼對這些中間結(jié)果進行匯總。Hadoop中的分布式計算一般是由兩階段完成的。第一階段負責讀取各數(shù)據(jù)節(jié)點中的原始數(shù)據(jù),進行初步處理,對各個節(jié)點中的數(shù)據(jù)求單詞數(shù)。然后把處理結(jié)果傳輸?shù)降诙€階段,對中間結(jié)果進行匯總,產(chǎn)生最終結(jié)果,求出100GB文件總共有多少個單詞,如圖2-3所示。

圖2-3

在分布式計算中,程序代碼應(yīng)該允許在哪些數(shù)據(jù)節(jié)點上,哪些節(jié)點運行第一階段的代碼,哪些節(jié)點運行第二階段的代碼;第一階段代碼執(zhí)行完畢后,傳輸?shù)降诙A段代碼所在的節(jié)點;如果中間執(zhí)行失敗了,怎么辦?等等問題,都需要管理。運行這些管理職責代碼的節(jié)點稱為主節(jié)點(master node),運行第一二階段程序代碼的節(jié)點稱為從節(jié)點(slave node)。用戶的代碼應(yīng)該提交給主節(jié)點,由主節(jié)點負責把代碼分配到不同的節(jié)點執(zhí)行。

在hadoop中,分布式計算部分稱為MapReduce。其中,主節(jié)點稱為作業(yè)節(jié)點(jobtacker),從節(jié)點稱為任務(wù)節(jié)點(tasktracker)。在任務(wù)節(jié)點中,運行第一階段的代碼稱為map任務(wù)(map task),運行第二階段的代碼稱為reduce任務(wù)(reduce task)。


總結(jié)

以上是生活随笔為你收集整理的Hadoop的伪分布安装 hadoop的核心思想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。