標籤:
前言
關於時下最熱的技術潮流,無疑大資料是首當其中最熱的一個技術點,關於大資料的概念和方法論鋪天蓋地的到處宣揚,但其實很多公司或者技術人員也不能詳細的講解其真正的含義或者就沒找到能被落地實施的可行性方案,更有很多資料相關的項目比如弄幾張報表,寫幾個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/
官方中文文檔 :http://wiki.centos.org/zh/Documentation
安裝說明: http://www.centos.org/docs/
這裡在選擇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平台是最熟練的。
結語
此篇篇幅已經有些長度了,先到此吧,關於Hadoop大資料集群的搭建後續依次介紹,比如利用Zookeeper搭建Hadoop高可用平台、Map-Reducer層序的開發、Hive產品的資料分析、Spark的應用程式的開發、Hue的叢集壞境的整合和營運、Sqoop2的資料幫浦等,有興趣的童鞋可以提前關注。
本篇主要介紹了搭建一個Hadoop大資料集群需要提前準備的內容和一些注意項,關於開源的巨量資料產品生態鏈是非常的龐大,所以我們將花費很多的時間在應用的使用情境上,但是其最底層的支撐架構就是Hadoop的Yarn計算模型和HDFS分布式檔案儲存體系統。
通過該篇的介紹,多少也需要知道自己需要掌握的技術點:比如Linux作業系統的營運和操作、MySQL關係型資料應用和管理、Java開發的基礎知識等諸多門檻。
有問題可以留言或者私信,隨時恭候有興趣的童鞋加大資料平台深入研究。共同學習,一起進步。
如果您看了本篇部落格,覺得對您有所收穫,請不要吝嗇您的“推薦”。
大資料數列(1)——Hadoop叢集壞境搭建配置