天天看點

《Hadoop實戰第2版》——2.4節安裝和配置Hadoop叢集

2.4.1 網絡拓撲

通常來說,一個hadoop的叢集體系結構由兩層網絡拓撲組成,如圖2-3所示。結合實際應用來看,每個機架中會有30~40台機器,這些機器共享一個1gb帶寬的網絡交換機。在所有的機架之上還有一個核心交換機或路由器,通常來說其網絡交換能力為1gb或更高。可以很明顯地看出,同一個機架中機器節點之間的帶寬資源肯定要比不同機架中機器節點間豐富。這也是hadoop随後設計資料讀寫分發政策要考慮的一個重要因素。

《Hadoop實戰第2版》——2.4節安裝和配置Hadoop叢集

2.4.2 定義叢集拓撲

在實際應用中,為了使hadoop叢集獲得更高的性能,讀者需要配置叢集,使hadoop能夠感覺其所在的網絡拓撲結構。當然,如果叢集中機器數量很少且存在于一個機架中,那麼就不用做太多額外的工作;而當叢集中存在多個機架時,就要使hadoop清晰地知道每台機器所在的機架。随後,在處理mapreduce任務時,hadoop就會優先選擇在機架内部做資料傳輸,而不是在機架間傳輸,這樣就可以更充分地使用網絡帶寬資源。同時,hdfs可以更加智能地部署資料副本,并在性能和可靠性間找到最優的平衡。

在hadoop中,網絡的拓撲結構、機器節點及機架的網絡位置定位都是通過樹結構來描述的。通過樹結構來确定節點間的距離,這個距離是hadoop做決策判斷時的參考因素。namenode也是通過這個距離來決定應該把資料副本放到哪裡的。當一個map任務到達時,它會被配置設定到一個tasktracker上運作,jobtracker節點則會使用網絡位置來确定map任務執行的機器節點。

在圖2-3中,筆者使用樹結構來描述網絡拓撲結構,主要包括兩個網絡位置:交換機/機架1和交換機/機架2。因為圖2-3中的叢集隻有一個最進階别的交換機,是以此網絡拓撲可簡化描述為/機架1和/機架2。

在配置hadoop時,hadoop會确定節點位址和其網絡位置的映射,此映射在代碼中通過java接口dnstoswitchmaping實作,代碼如下:

其中參數names是ip位址的一個list資料,這個函數的傳回值為對應網絡位置的字元串清單。在opology.node.switch.mapping.impl中的配置參數定義了一個dnstoswitchmaping接口的實作,namenode通過它确定完成任務的機器節點所在的網絡位置。

在圖2-3的執行個體中,可以将節點1、節點2、節點3映射到/機架1中,節點4、節點5、節點6映射到/機架2中。事實上在實際應用中,管理者可能不需要手動做額外的工作去配置這些映射關系,系統有一個預設的接口實作scriptbasedmapping。它可以運作使用者自定義的一個腳本區完成映射。如果使用者沒有定義映射,它會将所有的機器節點映射到一個單獨的網絡位置中預設的機架上;如果使用者定義了映射,那麼這個腳本的位置由topology.script.file.name的屬性控制。腳本必須擷取一批主機的ip位址作為參數進行映射,同時生成一個标準的網絡位置給輸出。

2.4.3 建立和安裝cluster

要建立hadoop叢集,首先要做的就是選擇并購買機器,在機器到手之後,就要進行網絡部署并安裝軟體了。安裝和配置hadoop有很多方法,這部分内容在前文已經詳細講解過(見2.1節、2.2節和2.3節),同時還告訴了讀者在實際部署時應該考慮的情況。

為了簡化我們在每個機器節點上安裝和維護相同軟體的過程,通常會采用自動安裝法,比如red hat linux下的kickstart或debian的全程自動化安裝。這些工具先會記錄你的安裝過程,以及你對選項的選擇,然後根據記錄來自動安裝軟體。同時它們會在每個程序結尾提供一個鈎子執行腳本,在對那些不包含在标準安裝中的最終系統進行調整和自定義時這是非常有用的。

下面我們将具體介紹如何部署和配置hadoop。hadoop為了應對不同的使用需求(不管是開發、實際應用還是研究),有着不同的運作方式,包括單機式、單機僞分布式、完全分布式等。前面已經詳細介紹了在windows、macosx和linux下hadoop的安裝和配置。下面将對hadoop的分布式配置做具體的介紹。

hadoop叢集的配置

在配置僞分布式的過程中,大家也許會覺得hadoop的配置很簡單,但那隻是最基本的配置。

hadoop的配置檔案分為兩類。

1)隻讀類型的預設檔案:src/core/core-default.xml、src/hdfs/hdfs-default.xml、src/mapred/mapred-default.xml、conf/mapred-queues.xml。

2)定位(site-specific)設定:conf/core-site.xml、conf/hdfs-site.xml、conf/mapred-site.xml、conf/mapred-queues.xml。

除此之外,也可以通過設定conf/hadoop-env.sh來為hadoop的守護程序設定環境變量(在bin/檔案夾内)。

hadoop是通過org.apache.hadoop.conf.configuration來讀取配置檔案的。在hadoop的設定中,hadoop的配置是通過資源(resource)定位的,每個資源由一系列name/value對以xml檔案的形式構成,它以一個字元串命名或以hadoop定義的path類命名(這個類是用于定義檔案系統内的檔案或檔案夾的)。如果是以字元串命名的,hadoop會通過classpath調用此檔案。如果以path類命名,那麼hadoop會直接在本地檔案系統中搜尋檔案。

資源設定有兩個特點,下面進行具體介紹。

1)hadoop允許定義最終參數(final parameters),如果任意資源聲明了final這個值,那麼之後加載的任何資源都不能改變這個值,定義最終資源的格式是這樣的:

2)hadoop允許參數傳遞,示例如下,當tenpdir被調用時,basedir會作為值被調用。

前面提到,讀者可以通過設定conf/hadoop-env.sh為hadoop的守護程序設定環境變量。

一般來說,大家至少需要在這裡設定在主機上安裝的jdk的位置(java_home),以使hadoop找到jdk。大家也可以在這裡通過hadoop_*_opts對不同的守護程序分别進行設定,如表2-1所示。

《Hadoop實戰第2版》——2.4節安裝和配置Hadoop叢集

一般而言,除了規定端口、ip位址、檔案的存儲位置外,其他配置都不是必須修改的,可以根據讀者的需要決定采用預設配置還是自己修改。還有一點需要注意的是,以上配置都被預設為最終參數(final parameters),這些參數都不可以在程式中再次修改。

接下來可以看一下conf/mapred-queues.xml的配置清單,如表2-5所示。

表2-5 conf/mapred-queues.xml的配置

《Hadoop實戰第2版》——2.4節安裝和配置Hadoop叢集

相信大家不難猜出表2-5的conf/mapred-queues.xml檔案是用來做什麼的,這個檔案就是用來設定mapreduce系統的隊列順序的。queues是jobtracker中的一個抽象概念,可以在一定程度上管理job,是以它為管理者提供了一種管理job的方式。這種控制是常見且有效的,例如通過這種管理可以把不同的使用者劃分為不同的組,或分别賦予他們不同的級别,并且會優先執行進階别使用者送出的job。

按照這個思想,很容易想到三種原則:

同一類使用者送出的job統一送出到同一個queue中;

運作時間較長的job可以送出到同一個queue中;

把很快就能運作完成的job劃分到一個queue中,并且限制queue中job的數量上限。

queue的有效性很依賴在jobtracker中通過mapreduce.jobtracker.taskscheduler設定的排程規則(scheduler)。一些排程算法可能隻需要一個queue,不過有些排程算法可能很複雜,需要設定很多queue。

對queue大部分設定的更改都不需要重新啟動mapreduce系統就可以生效,不過也有一些更改需要重新開機系統才能有效,具體如表2-5所示。

conf/mapred-queues.xml的檔案配置與其他檔案略有不同,配置格式如下:

以上這些就是hadoop配置的主要内容,其他關于hadoop配置方面的資訊,諸如記憶體配置等,如果有興趣可以參閱官方的配置文檔。

一個具體的配置

為了友善闡述,這裡隻搭建一個有三台主機的小叢集。

相信大家還沒有忘記hadoop對主機的三種定位方式,分别為master和slave,jobtracker和tasktracker,namenode和datanode。在配置設定ip位址時我們順便規定一下角色。

下面為這三台機器配置設定ip位址及相應的角色:

10.37.128.2—master,namonode,jobtracker—master(主機名)

10.37.128.3—slave,datanode,tasktracker—slave1(主機名)

10.37.128.4—slave,datanode,tasktracker—slave2(主機名)

首先在三台主機上建立相同的使用者(這是hadoop的基本要求):

1)在三台主機上均安裝jdk 1.6,并設定環境變量。

2)在三台主機上分别設定/etc/hosts及/etc/hostname。

hosts這個檔案用于定義主機名與ip位址之間的對應關系。

3)在這三台主機上安裝openssh,并配置ssh可以免密碼登入。

安裝方式不再贅述,建立~/.ssh檔案夾,如果已存在,則無須建立。生成密鑰并配置ssh免密碼登入本機,輸入指令:

4)配置三台主機的hadoop檔案,内容如下。

繼續閱讀