文章出處

前言

關于時下最熱的技術潮流,無疑大數據是首當其中最熱的一個技術點,關于大數據的概念和方法論鋪天蓋地的到處宣揚,但其實很多公司或者技術人員也不能詳細的講解其真正的含義或者就沒找到能被落地實施的可行性方案,更有很多數據相關的項目比如弄幾張報表,寫幾個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開發的基礎知識等諸多門檻。

有問題可以留言或者私信,隨時恭候有興趣的童鞋加大數據平臺深入研究。共同學習,一起進步。 

 

如果您看了本篇博客,覺得對您有所收獲,請不要吝嗇您的“推薦”。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()