Hadoop集羣壞境搭建配置
前言
關於時下最熱的技術潮流,無疑大數據是首當其中最熱的一個技術點,關於大數據的概念和方法論鋪天蓋地的到處宣揚,但其實很多公司或者技術人員也不能詳細的講解其真正的含義或者就沒找到能被落地實施的可行性方案,更有很多數據相關的項目比如弄幾張報表,寫幾個T-SQL語句就被冠以“大數據項目”,當然了,時下熱門的話題嘛,先把“大數據”帽子扣上,這樣才能顯示出項目的高大上,得到公司的重視或者高層領導的關注。
首先,關於大數據的概念或者架構一直在各方爭議的背景下持續的存在着。目前,關於大數據項目可以真正被落地實施的解決方案就是:Hadoop爲核心的的一些列開源分佈式解決方案。
其次,本系列,我們不講一些抽象的方法論或者概念性的東西,我將實際的跟大家分享一個真正的大數據解決方案將如何被落地實施。包括與其相關的的配套開源系統:Hive、Spark、Sqoop、Hue、Zookeeper、Kafka等諸多產品的搭建。
再次、關於大數據的生態圈每一個產品都有着強大的技術背景做支撐。所以,本系列我們重點放在如何搭建和使用等諸多技術實施點上,不扯太虛的東西。
技術準備
進入本篇的正題,本篇我們主要來分析如何來搭建一個Hadoop集羣環境,其實Hadoop的搭建分爲三種形式:單機模式、僞分佈模式、完全分佈模式,關於這三種模式其實都是扯淡,只要掌握了完全分佈模式,也就是集羣模式的搭建,剩下的兩種模式自然而然就會用了,一般前兩種模式一般用在開發或測試環境下,Hadoop最大的優勢就是分佈式集羣計算,所以在生產環境下都是搭建的最後一種模式:完全分佈模式。
所以,本篇我們來講解Hadoop集羣環境的搭建。
一般,當公司要開始搭建Hadoop集羣的時候,需要考慮一下技術點:
一、硬件的選擇
首先,關於Hadoop集羣環境硬件的選擇,無非就是圍繞幾個面去選擇:
1、需要搭建集羣包含幾個節點(Node)?
關於這個問題,引入的要考慮的點就是需要搭建幾個Server環境,因爲在分佈式環境中,一個服務器(Server)就是一個節點,所以在選擇節點的問題上是需要參照參照當前集羣所要應用的業務場景來決定了,當然,在分佈式集羣環境中節點越多所帶來的就是整個集羣性能的提升,同樣也也就意味着帶來了成本的增高。
但是,關於Hadoop集羣有一個最低的節點量供大家參考。
首先,在一個Hadoop集羣環境中,NameNode,SecondaryNameNode和DataNode是需要分配不同的節點上的,所以至少有三個節點來當然這些角色。這也就意味至少需要有三臺服務器。當然,在Hadoop運行作業完成的時候,還需要另外一個角色History Server來記錄歷史程序的運行情況,建議是將這個角色用獨立的一臺服務器來運行。
所以,在一個最簡單的Hadoop分佈式集羣中至少需要三臺服務器來構建:
-
- 第一臺用來記錄所有的數據分佈情況,運行的進程就是NameNode
- 第二臺用來備份所有數據分佈情況,畢竟當前面的那臺服務器宕機的時候,還可以通過該服務器來恢復數據。所以,該服務器運行的程序就是SecondaryNameNode
- 第三臺用來存儲實際的數據,運行的進程就是DataNode
- 第四臺是可選的服務器用來記錄應用程序歷史的運行狀況。運行的程序就是History Server了。
2、集羣環境中各個服務裏該如何選擇配置?
其實這個問題就是配置選型的問題,關於配置無非就是內存、CPU、存儲等如何選擇,當然,在公司預算允許的情況下,配置越高越好,關於這些個問題在搭建Hadoop環境的時候,需要從以下幾個點來考慮。
首先,關於集羣中的幾個節點是根據角色的劃分有側重點進行配置的,並不是要求所有的服務器都弄一樣的配置,在Hadoop集羣環境中,最重要的就是NameNode運行的服務器了,因爲它扮演的角色是整個集羣的調度和協調工作,當然在這個角色中還有一個最重要的進程是資源管理(ResourceManager),它纔是真正的協調整個集羣中每個節點的運行。所以這個服務器的配置要高於其它節點。
其次,在Hadoop集羣運行的過程是需要將所有的數據分佈記錄拉入到內存中的,所以這就意味着當整個集羣的數據越來越大,我們知道在大數據的環境下,幾TB級別或者PB級別的數據是很常見的,這也就意味這個數據分佈記錄也要增大,所以需要加大內存,這裏有一個參考依據:
一般1GB內存可以管理百萬個block文件。
舉例:bolck爲128M,副本爲3個,200臺集羣,4TB數據,需要的Namenode內存爲:200(服務器數)x 4194304MB(4TB數據) / (128MB x 3)=2184533.33個文件=2.18百萬個文件,所以內存值也就接近於2.2G了。
再次,因爲這裏有有一臺機器用來做備份,所以secondary namenode需要的內存與namenode需要的內存大概一樣,然後就是從節點的各臺服務器需要的內存量了,這裏也有一個參考依據:
-
- 首先計算當前CPU的虛擬核數(Vcore):虛擬核數(Vcore)=CPU個數*單CPU合數*HT(超線程數)
- 然後根據虛擬核數配置內存容量:內存容量=虛擬核數(Vcore)*2GB(至少2GB)
關於CPU的選擇,因爲Hadoop爲分佈式計算運算,所以其運行模型基本是密集型並行計算,所以推薦的CPU要儘量選擇多路多核的,條件允許的話每個節點都要如此。
然後,在一個大型的分佈式集羣中,還需要注意的是,因爲分佈式的計算,需要各個節點間進行頻繁的通信和IO操作,這也就意味對網絡帶寬有要求,所以推薦使用千兆以上的網卡,條件允許可以萬兆網卡,交換機亦如此。
3、集羣環境中每個節點存儲大小如何配置?需要引入什麼raid?
首先先來談一下關於raid的問題,之前因爲raid的目的就是爲了防止數據丟失而做的存儲層數據備份機制,現在最佳的使用場景是單臺服務這種高風險的配置,然後再分佈式集羣中,所存儲的數據是分佈式存放到各個數據節點上的(DataNode),並且Hadoop應用已經默認實現了數據的備份,所以raid在分佈式系統中是沒有多大作用的,然並卵!其實,究其原理很簡單,集羣中單節點的數據備份在出現意外宕機的情況下基本是無法恢復出有效數據的。
然後我們再來分析一下關於存儲的問題,可以明確一點的就是:數據量的大小決定了集羣整體的存儲大小,同樣也決定了整個集羣的規模!
來舉個例子:
假如我們當前可以確定的存量數據量有1TB,然後每天大約增長10GB的數據量,那麼當前集羣未來一年之內集羣存儲大小計算方式爲:
(1TB+10GB*365天)*3*1.3=17.8TB
可以看出,這個集羣的規模一年就得大約需要18T的存儲空間,這裏解釋一下計算的公式,括號外面的乘以3指的是當前數據爲了防止丟失自己所做的冗餘備份,默認是一份數據拷貝三份存儲於不同的服務器上,然後後面乘以1.3的目的是作爲節點的操作系統或者計算的臨時結果預留空間。
然後,我們接着計算節點數:
節點數(Nodes)=18TB/2TB=9
上面的計算公式除以2TB的假設是每個節點有2TB的存儲空間,這裏根據集羣的存儲大小可以計算出整個集羣的數據存儲節點數:9個。
所以需要的總結點數:總結點數=9(數據存儲節點)+2(NameNode和SecondaryNameNode)=11個。
到此,就需要搭建11個服務器來運行集羣了。
二、軟件的選擇
關於Hadoop集羣環境軟件的選擇,無非就是圍繞這個幾個軟件產品去選擇:OS操作系統,Hadoop版本,JDK版本,Hive版本、MySQL版本等。
1、操作系統該選擇哪款?
Hadoop產品是由Java語言開發的,所以推薦的是Linux操作系統,理由很簡單開源免費,就一個免費這個理由就足以PK掉微軟的操作系統,因爲我們知道集羣環境是需要很多臺服務器的,所以如果用微軟的服務器成本會高很多,當然,其實在大數據開源的產品中基本找不到微軟的影子,所以從這一點來講,微軟已經拉下了很多,甚至已經在落寞!
所以,在開源的Linux操作系統中又是百花齊放,各種版本,各位朋友可以自行網上查閱各個版本的區別和優越性,這裏我就直接告訴大家我推薦的操作系統CentOS.
如下照抄自博友蝦皮的簡介:
CentOS是一個基於Red Hat 企業級 Linux 提供的可自由使用的源代碼企業級的 Linux 發行版本。每個版本的 CentOS 都會獲得七年的支持(通過安全更新方式)。新版本的 CentOS 每兩年發行一次,而每個版本的 CentOS 會定期(大概每六個月)更新一次,以便支持新的硬件。這樣,建立一個安全、低維護、穩定、高預測性、高重複性的 Linux 環境。
CentOS特點
- 可以把CentOS理解爲Red Hat AS系列!它完全就是對Red Hat AS進行改進後發佈的!各種操作、使用和RED HAT沒有區別!
- CentOS完全免費,不存在RED HAT AS4需要序列號的問題。
- CentOS獨有的yum命令支持在線升級,可以即時更新系統,不像RED HAT那樣需要花錢購買支持服務!
- CentOS修正了許多RED HAT AS的BUG!
- CentOS版本說明: CentOS3.1 等同於 RED HAT AS3 Update1 CentOS3.4 等同於 RED HAT AS3 Update4 CentOS4.0 等同於 RED HAT AS4。
好了,我相信以上這些理由足以征服你了。
2、Hadoop版本選擇的問題?
關於Hadoop歷史版本變遷過程中,出現了很多版本,有興趣的童鞋可以自行查閱,這裏我只從大的方向把Hadoop版本劈成2個,這裏暫稱Hadoop1.0和Hadoop2.0,截止我寫本文章的時候,Hadoop2.0版本已經相當穩定,並且逐漸在企業應用中大面積推廣而來,關於這兩個版本我就不去過多的介紹,網友可以自行查閱,或者參考我之前的一篇關於兩個版本的架構比較。
所以,本系列內容我應用的版本就是基於Hadoop2.0這個系列來進行講解。
而關於Jdk版本的問題是和Hadoop的版本相匹配的,其它相關產品後續我們會分析,當然也大家可以自行從Hadoop官網上去查詢,這裏不贅述。
操作系統
爲了方便演示,我會使用虛擬機跟大家講解,當然,有興趣的童鞋也可以自行下載虛擬機跟隨我一步步來搭建這個平臺,這裏我選擇的虛擬機爲:VMware。
大家網上下載安裝就可以了,過程很簡單,沒啥需要講解的,當然你的PC配置是需要好一點的,至少8G以上,要不基本玩轉不了虛擬機。
安裝完成就是上面的樣子了,相關資料大家網上查閱吧,這裏就不在贅述。
然後,我們進行Liunx操作系統的安裝,上面已經說過,我們選擇的是CentOS操作,所以需要到CentOS官網進行下載安裝就行,記住了:不用怕,不花錢!
官方網站與文檔
官方主頁: http://www.centos.org/
官方Wiki: http://wiki.centos.org/
這裏在選擇CentOS版本的時候需要記住了,如果不是公司要求,儘量不要選擇最新的,而是要選擇最穩定的,原因很簡單,誰也不要當新版本的小白鼠。
然後選擇要下載的穩定版本,這裏我推薦選擇CentOS6.8 64位操作系統。
然後,點擊找到下載包下載就行。
在安裝各個節點之前,我們需要提前準備好相關節點的配置信息,比如計算機名、IP地址、安裝角色、超級管理員賬戶信息,內存分配、存儲等,所以我列舉了一個表格供大家參考:
機器名稱 | IP地址 | 角色 | OS | 最高管理員名稱(Name) | 最高管理員密碼(PWD) | 一般用戶名稱(Name) | 一般用戶密碼(PWD) |
Master.Hadoop | 192.168.1.50 | Master | CentOS6.8 | root | password01! | hadoop | password01! |
Salve01.Hadoop | 192.168.1.51 | Salve1 | CentOS6.8 | root | password01! | hadoop | password01! |
Salve02.Hadoop | 192.168.1.52 | Salve2 | CentOS6.8 | root | password01! | hadoop | password01! |
Salve03.Hadoop | 192.168.1.53 | Salve3 | CentOS6.8 | root | password01! | hadoop | password01! |
MySQLServer01 | 102.168.1.100 | MySQLServer | Ubuntu | root | password01! | hadoop | password01! |
MySQLServer02 | 102.168.1.101 | MySQLServer | Ubuntu | root | password01! | hadoop | password01! |
大家可以看到,我這裏先提前規劃處四臺服務器用來搭建Hadoop集羣,然後分別爲其分配了機器名稱、IP,IP需要設置爲統一網段,然後爲了搭建我們的Hadoop集羣,我們需要爲所有集羣中的節點創建一個獨立的用戶,這裏我起了一個名字,就叫做Hadoop,當然爲了方便記憶我統一的將所有的密碼設置爲password01!.
當然,這裏我們提前配置好內存和存儲,因爲我們知道我們使用的虛擬機這些信息是可以根據使用的情況,進行動態調整的。
另外,我又搭建了兩臺Ubuntu的服務器來單獨安裝MySQLServer,搭建了一個主從模式,我們知道Ubuntu是一個界面友好的操作系統,這裏和Hadoop集羣分離的目的是因爲Mysql數據庫是比較佔內存資源的,所以我們單獨機器來安裝,當然,MySQL並不是Hadoop集羣所需要的,兩者沒有必然的關係,這裏搭建它的目的就爲了後續安裝Hive來分析數據應用的,並且我們可以在這個機器裏進行開發調試,當然Window平臺也可以,畢竟我們使用Windows平臺是最熟練的。