前言node
關於時下最熱的技術潮流,無疑大數據是首當其中最熱的一個技術點,關於大數據的概念和方法論鋪天蓋地的處處宣揚,但其實不少公司或者技術人員也不能詳細的講解其真正的含義或者就沒找到能被落地實施的可行性方案,更有不少數據相關的項目好比弄幾張報表,寫幾個T-SQL語句就被冠以「大數據項目」,固然了,時下熱門的話題嘛,先把「大數據」帽子扣上,這樣才能顯示出項目的高大上,獲得公司的重視或者高層領導的關注。sql
首先,關於大數據的概念或者架構一直在各方爭議的背景下持續的存在着。目前,關於大數據項目能夠真正被落地實施的解決方案就是:Hadoop爲核心的的一些列開源分佈式解決方案。數據庫
其次,本系列,咱們不講一些抽象的方法論或者概念性的東西,我將實際的跟你們分享一個真正的大數據解決方案將如何被落地實施。包括與其相關的的配套開源系統:Hive、Spark、Sqoop、Hue、Zookeeper、Kafka等諸多產品的搭建。centos
再次、關於大數據的生態圈每個產品都有着強大的技術背景作支撐。因此,本系列咱們重點放在如何搭建和使用等諸多技術實施點上,不扯太虛的東西。安全
技術準備服務器
進入本篇的正題,本篇咱們主要來分析如何來搭建一個Hadoop集羣環境,其實Hadoop的搭建分爲三種形式:單機模式、僞分佈模式、徹底分佈模式,關於這三種模式其實都是扯淡,只要掌握了徹底分佈模式,也就是集羣模式的搭建,剩下的兩種模式天然而然就會用了,通常前兩種模式通常用在開發或測試環境下,Hadoop最大的優點就是分佈式集羣計算,因此在生產環境下都是搭建的最後一種模式:徹底分佈模式。網絡
因此,本篇咱們來說解Hadoop集羣環境的搭建。架構
通常,當公司要開始搭建Hadoop集羣的時候,須要考慮一下技術點:框架
1、硬件的選擇運維
首先,關於Hadoop集羣環境硬件的選擇,無非就是圍繞幾個面去選擇:
一、須要搭建集羣包含幾個節點(Node)?
關於這個問題,引入的要考慮的點就是須要搭建幾個Server環境,由於在分佈式環境中,一個服務器(Server)就是一個節點,因此在選擇節點的問題上是須要參照參照當前集羣所要應用的業務場景來決定了,固然,在分佈式集羣環境中節點越多所帶來的就是整個集羣性能的提高,一樣也也就意味着帶來了成本的增高。
可是,關於Hadoop集羣有一個最低的節點量供你們參考。
首先,在一個Hadoop集羣環境中,NameNode,SecondaryNameNode和DataNode是須要分配不一樣的節點上的,因此至少有三個節點來固然這些角色。這也就意味至少須要有三臺服務器。固然,在Hadoop運行做業完成的時候,還須要另一個角色History Server來記錄歷史程序的運行狀況,建議是將這個角色用獨立的一臺服務器來運行。
因此,在一個最簡單的Hadoop分佈式集羣中至少須要三臺服務器來構建:
二、集羣環境中各個服務裏該如何選擇配置?
其實這個問題就是配置選型的問題,關於配置無非就是內存、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的選擇,由於Hadoop爲分佈式計算運算,因此其運行模型基本是密集型並行計算,因此推薦的CPU要儘可能選擇多路多核的,條件容許的話每一個節點都要如此。
而後,在一個大型的分佈式集羣中,還須要注意的是,由於分佈式的計算,須要各個節點間進行頻繁的通訊和IO操做,這也就意味對網絡帶寬有要求,因此推薦使用千兆以上的網卡,條件容許能夠萬兆網卡,交換機亦如此。
三、集羣環境中每一個節點存儲大小如何配置?須要引入什麼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個服務器來運行集羣了。
2、軟件的選擇
關於Hadoop集羣環境軟件的選擇,無非就是圍繞這個幾個軟件產品去選擇:OS操做系統,Hadoop版本,JDK版本,Hive版本、MySQL版本等。
一、操做系統該選擇哪款?
Hadoop產品是由Java語言開發的,因此推薦的是Linux操做系統,理由很簡單開源免費,就一個免費這個理由就足以PK掉微軟的操做系統,由於咱們知道集羣環境是須要不少臺服務器的,因此若是用微軟的服務器成本會高不少,固然,其實在大數據開源的產品中基本找不到微軟的影子,因此從這一點來說,微軟已經拉下了不少,甚至已經在落寞!
因此,在開源的Linux操做系統中又是百花齊放,各類版本,各位朋友能夠自行網上查閱各個版本的區別和優越性,這裏我就直接告訴你們我推薦的操做系統CentOS.
以下照抄自博友蝦皮的簡介:
CentOS是一個基於Red Hat 企業級 Linux 提供的可自由使用的源代碼企業級的 Linux 發行版本。每一個版本的 CentOS 都會得到七年的支持(經過安全更新方式)。新版本的 CentOS 每兩年發行一次,而每一個版本的 CentOS 會按期(大概每六個月)更新一次,以便支持新的硬件。這樣,創建一個安全、低維護、穩定、高預測性、高重複性的 Linux 環境。
CentOS特色
好了,我相信以上這些理由足以征服你了。
二、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平臺是最熟練的。
結語
此篇篇幅已經有些長度了,先到此吧,關於Hadoop大數據集羣的搭建後續依次介紹,好比利用Zookeeper搭建Hadoop高可用平臺、Map-Reducer層序的開發、Hive產品的數據分析、Spark的應用程序的開發、Hue的集羣壞境的集成和運維、Sqoop2的數據抽取等,有興趣的童鞋能夠提早關注。
本篇主要介紹了搭建一個Hadoop大數據集羣須要提早準備的內容和一些注意項,關於開源的大數據產品生態鏈是很是的龐大,因此咱們將花費不少的時間在應用的使用場景上,可是其最底層的支撐框架就是Hadoop的Yarn計算模型和HDFS分佈式文件存儲系統。
經過該篇的介紹,多少也須要知道本身須要掌握的技術點:好比Linux操做系統的運維和操做、MySQL關係型數據應用和管理、Java開發的基礎知識等諸多門檻。
有問題能夠留言或者私信,隨時恭候有興趣的童鞋加大數據平臺深刻研究。共同窗習,一塊兒進步。
若是您看了本篇博客,以爲對您有所收穫,請不要吝嗇您的「推薦」。