Hadoop學習筆記—1.基本介紹與環境配置

1、Hadoop的發展歷史

  說到Hadoop的起源,不得不說到一個傳奇的IT公司—全球IT技術的引領者Google。Google(自稱)爲雲計算概念的提出者,在自身多年的搜索引擎業務中構建了突破性的GFS(Google File System),今後文件系統進入分佈式時代。除此以外,Google在GFS上如何快速分析和處理數據方面開創了MapReduce並行計算框架,讓以往的高端服務器計算變爲廉價的x86集羣計算,也讓許多互聯網公司可以從IOE(IBM小型機、Oracle數據庫以及EMC存儲)中解脫出來,例如:淘寶早就開始了去IOE化的道路。然而,Google之因此偉大就在於獨享技術不如共享技術,在2002-2004年間以三大論文的發佈向世界推送了其雲計算的核心組成部分GFS、MapReduce以及BigTable。Google雖然沒有將其核心技術開源,可是這三篇論文已經向開源社區的大牛們指明瞭方向,一位大牛:Doug Cutting使用Java語言對Google的雲計算核心技術(主要是GFS和MapReduce)作了開源的實現。後來,Apache基金會整合Doug Cutting以及其餘IT公司(如Facebook等)的貢獻成果,開發並推出了Hadoop生態系統。Hadoop是一個搭建在廉價PC上的分佈式集羣系統架構,它具備高可用性、高容錯性和高可擴展性等優勢。因爲它提供了一個開放式的平臺,用戶能夠在徹底不瞭解底層實現細節的情形下,開發適合自身應用的分佈式程序。java

2、Hadoop的總體框架

    Hadoop由HDFS、MapReduce、HBase、Hive和ZooKeeper等成員組成,其中最基礎最重要的兩種組成元素爲底層用於存儲集羣中全部存儲節點文件的文件系統HDFS(Hadoop Distributed File System)和上層用來執行MapReduce程序的MapReduce引擎。node

 

Pig是一個基於Hadoop的大規模數據分析平臺,Pig爲複雜的海量數據並行計算提供了一個簡易的操做和編程接口
Chukwa是基於Hadoop的集羣監控系統,由yahoo貢獻
hive是基於Hadoop的一個工具,提供完整的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行運行
ZooKeeper:高效的,可擴展的協調系統,存儲和協調關鍵共享狀態
HBase是一個開源的,基於列存儲模型的分佈式數據庫
HDFS是一個分佈式文件系統。有着高容錯性的特色,而且設計用來部署在低廉的硬件上,適合那些有着超大數據集的應用程序
MapReduce是一種編程模型,用於大規模數據集(大於1TB)的並行運算
下圖是一個典型的Hadoop試驗集羣的部署結構。
Hadoop各組件之間是如何依賴共存的呢?下圖爲你展現:

3、Hadoop的核心設計

  3.1 HDFS

   HDFS是一個高度容錯性的分佈式文件系統,能夠被普遍的部署於廉價的PC之上。它以流式訪問模式訪問應用程序的數據,這大大提升了整個系統的數據吞吐量,於是很是適合用於具備超大數據集的應用程序中。linux

   HDFS的架構以下圖所示。HDFS架構採用主從架構(master/slave)。一個典型的HDFS集羣包含一個NameNode節點和多個DataNode節點。NameNode節點負責整個HDFS文件系統中的文件的元數據保管和管理,集羣中一般只有一臺機器上運行NameNode實例,DataNode節點保存文件中的數據,集羣中的機器分別運行一個DataNode實例。在HDFS中,NameNode節點被稱爲名稱節點,DataNode節點被稱爲數據節點。DataNode節點經過心跳機制與NameNode節點進行定時的通訊。sql

   

•NameNode

  能夠看做是分佈式文件系統中的管理者,存儲文件系統的meta-data,主要負責管理文件系統的命名空間,集羣配置信息,存儲塊的複製。shell

•DataNode

  是文件存儲的基本單元。它存儲文件塊在本地文件系統中,保存了文件塊的meta-data,同時週期性的發送全部存在的文件塊的報告給NameNode。數據庫

•Client

  就是須要獲取分佈式文件系統文件的應用程序。編程

下面來看看在HDFS上如何進行文件的讀/寫操做:centos

文件寫入:瀏覽器

1. Client向NameNode發起文件寫入的請求服務器

2. NameNode根據文件大小和文件塊配置狀況,返回給Client它所管理部分DataNode的信息。

3. Client將文件劃分爲多個文件塊,根據DataNode的地址信息,按順序寫入到每個DataNode塊中。

文件讀取:

1. Client向NameNode發起文件讀取的請求

2. NameNode返回文件存儲的DataNode的信息。

3. Client讀取文件信息。

3.2 MapReduce

  MapReduce是一種編程模型,用於大規模數據集的並行運算。Map(映射)和Reduce(化簡),採用分而治之思想,先把任務分發到集羣多個節點上,並行計算,而後再把計算結果合併,從而獲得最終計算結果。多節點計算,所涉及的任務調度、負載均衡、容錯處理等,都由MapReduce框架完成,不須要編程人員關心這些內容。

  下圖是一個MapReduce的處理過程:

  用戶提交任務給JobTracer,JobTracer把對應的用戶程序中的Map操做和Reduce操做映射至TaskTracer節點中;輸入模塊負責把輸入數據分紅小數據塊,而後把它們傳給Map節點;Map節點獲得每個key/value對,處理後產生一個或多個key/value對,而後寫入文件;Reduce節點獲取臨時文件中的數據,對帶有相同key的數據進行迭代計算,而後把終結果寫入文件。

  若是這樣解釋仍是太抽象,能夠經過下面一個具體的處理過程來理解:(WordCount實例)  Hadoop的核心是MapReduce,而MapReduce的核心又在於map和reduce函數。它們是交給用戶實現的,這兩個函數定義了任務自己。

  • map函數:接受一個鍵值對(key-value pair)(例如上圖中的Splitting結果),產生一組中間鍵值對(例如上圖中Mapping後的結果)。Map/Reduce框架會將map函數產生的中間鍵值對裏鍵相同的值傳遞給一個reduce函數。
  • reduce函數:接受一個鍵,以及相關的一組值(例如上圖中Shuffling後的結果),將這組值進行合併產生一組規模更小的值(一般只有一個或零個值)(例如上圖中Reduce後的結果)

  可是,Map/Reduce並非萬能的,適用於Map/Reduce計算有先提條件

待處理的數據集能夠分解成許多小的數據集;

並且每個小數據集均可以徹底並行地進行處理;

若不知足以上兩條中的任意一條,則不適合使用Map/Reduce模式;

4、Hadoop的安裝配置

  Hadoop共有三種部署方式:本地模式,僞分佈模式及集羣模式;本次安裝配置以僞分佈模式爲主,即在一臺服務器上運行Hadoop(若是是分佈式模式,則首先要配置Master主節點,其次配置Slave從節點)。如下說明如無特殊說明,默認使用root用戶登陸主節點,進行如下的一系列配置。

  安裝配置前請先準備好如下軟件:

  •   vmware workstation 8.0或以上版本
  •   redhat server 6.x版本或centos 6.x版本
  •   jdk-6u24-linux-xxx.bin
  •     hadoop-1.1.2.tar.gz

4.1 設置靜態IP地址

  命令模式下能夠執行setup命令進入設置界面配置靜態IP地址;x-window界面下能夠右擊網絡圖標配置;

  配置完成後執行service network restart從新啓動網絡服務;  

  驗證:執行命令ifconfig

4.2 修改主機名

  <1>修改當前會話中的主機名(這裏個人主機名設爲hadoop-master),執行命令hostname hadoop-master

  <2>修改配置文件中的主機名,執行命令vi /etc/sysconfig/network

  驗證:重啓系統reboot

4.3 DNS綁定

  執行命令vi /etc/hosts,增長一行內容,以下(這裏個人Master節點IP設置的爲192.168.80.100):

  192.168.80.100 hadoop-master

  保存後退出

  驗證:ping hadoop-master

4.4 關閉防火牆及其自動運行

  <1>執行關閉防火牆命令:service iptables stop

      驗證:service iptables stauts

  <2>執行關閉防火牆自動運行命令:chkconfig iptables off

  驗證:chkconfig --list | grep iptables

4.5 SSHSecure Shell)的免密碼登陸

  <1>執行產生密鑰命令:ssh-keygen –t rsa,位於用戶目錄下的.ssh文件中(.ssh爲隱藏文件,能夠經過ls –a查看)

  <2>執行產生命令:cp id_rsa.pub authorized_keys

  驗證:ssh localhost

4.6 複製JDKHadoop-1.1.2.tar.gzLinux

  <1>使用WinScp或CuteFTP等工具將jdk和hadoop.tar.gz複製到Linux中(假設複製到了Downloads文件夾中);

  <2>執行命令:rm –rf /usr/local/* 刪除該文件夾下全部文件

  <3>執行命令:cp /root/Downloads/* /usr/local/ 將其複製到/usr/local/文件夾中

4.7 安裝JDK

  <1>在/usr/local下解壓jdk安裝文件:./jdk-6u24-linux-i586.bin(若是報權限不足的提示,請先爲當前用戶對此jdk增長執行權限:chmod u+x jdk-6u24-linux-i586.bin

  <2>重命名解壓後的jdk文件夾:mv jdk1.6.0_24 jdk(此步湊非必要,只是建議)

  <3>配置Linux環境變量:vi /etc/profile,在其中增長几行:

  export JAVA_HOME=/usr/local/jdk

  export PATH=.:$JAVA_HOME/bin:$PATH

  <4>生效環境變量配置:source /etc/profile

  驗證:java –version

4.8 安裝Hadoop

  <1>在/usr/local下解壓hadoop安裝文件:tar –zvxf hadoop-1.1.2.tar.gz

  <2>解壓後重命名hadoop-1.1.2文件夾:mv hadoop-1.1.2 hadoop(此步湊非必要,只是建議)

  <3>配置Hadoop相關環境變量:vi /etc/profile,在其中增長一行:

  export HADOOP_HOME=/usr/local/hadoop

  而後修改一行:

  export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME:$PATH

      <4>生效環境變量:source /etc/profile

      <5>修改Hadoop的配置文件,它們位於$HADOOP_HOME/conf目錄下。

          分別修改四個配置文件:hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml;

         具體下修改內容以下:(因爲修改內容較多,建議使用WinScp進入相關目錄下進行編輯和保存,能夠節省較多時間和精力)

    5.1【hadoop-env.sh】 修改第九行:

    export JAVA_HOME=/usr/local/jdk/

    若是虛擬機內存低於1G,還須要修改HADOOP_HEAPSIZE(默認爲1000)的值:

    export HADOOP_HEAPSIZE=100

    5.2【core-site.xml】 在configuration中增長如下內容(其中的hadoop-master爲你配置的主機名):

    <property>

          <name>fs.default.name</name>

          <value>hdfs://hadoop-master:9000</value>

          <description>change your own hostname</description>

      </property>

      <property>

          <name>hadoop.tmp.dir</name>

          <value>/usr/local/hadoop/tmp</value>

      </property>

    5.3 【hdfs-site.xml】 在configuration中增長如下內容:

    <property>

          <name>dfs.replication</name>

          <value>1</value>

        </property>

        <property>

          <name>dfs.permissions</name>

          <value>false</value>

        </property>

    5.4 【mapred-site.xml】 在configuration中增長如下內容(其中的hadoop-master爲你配置的主機名):

    <property>

          <name>mapred.job.tracker</name>

          <value>hadoop-master:9001</value>

          <description>change your own hostname</description>

      </property>

  <6>執行命令對Hadoop進行初始格式化:hadoop namenode –format

  <7>執行命令啓動Hadoop:start-all.sh(一次性啓動全部進程)

  

  第二種方式:經過執行以下方式命令單獨啓動HDFS和MapReduce:start-dfs.sh和start-mapred.sh啓動,stop-dfs.sh和stop-mapred.sh關閉;

  第三種方式:經過執行以下方式命令分別啓動各個進程:

  hadoop-daemon.sh start namenode

  hadoop-daemon.sh start datanode

  hadoop-daemon.sh start secondarynamenode

  hadoop-daemon.sh start jobtracker

  hadoop-daemon.sh start tasktracker

  這種方式的執行命令是hadoop-daemon.sh start [進程名稱],這種啓動方式適合於單獨增長、刪除節點的狀況,在安裝集羣環境的時候會看到。

  驗證:

  ① 執行jps命令查看java進程信息,若是是start-all.sh則一共顯示5個java進程。

  ②在瀏覽器中瀏覽Hadoop,輸入URL:hadoop-master:50070和hadoop-master:50030。若是想在宿主機Windows中瀏覽,能夠直接經過ip地址加端口號訪問,也能夠配置C盤中System32/drivers/etc/中的hosts文件,增長DNS主機名映射,例如:192.168.80.100 hadoop-master。

  訪問效果以下圖:

  namenode

jobtracker

  <8>NameNode進程沒有啓動成功?能夠從如下幾個方面檢查:

  沒有對NameNode進行格式化操做:hadoop namenode –format(PS:屢次格式化也會出錯,保險操做是先刪除/usr/local/hadoop/tmp文件夾再從新格式化)

  Hadoop配置文件只複製沒修改: 修改四個配置文件須要改的參數

  DNS沒有設置IP和hostname的綁定:vi /etc/hosts

  SSH的免密碼登陸沒有配置成功:從新生成rsa密鑰

  <9>Hadoop啓動過程當中出現如下警告?

  

  能夠經過如下步湊去除該警告信息:

  ①首先執行命令查看shell腳本:vi start-all.sh(在bin目錄下執行),能夠看到以下圖所示的腳本

  

  雖然咱們看不懂shell腳本的語法,可是能夠猜到可能和文件hadoop-config.sh有關,咱們再看一下這個文件的源碼。執行命令:vi hadoop-config.sh(在bin目錄下執行),因爲該文件特大,咱們只截取最後一部分,見下圖。

  從圖中的紅色框框中能夠看到,腳本判斷環境變量HADOOP_HOME和HADOOP_HOME_WARN_SUPPRESS的值,若是前者爲空,後者不爲空,則顯示警告信息「Warning„„」。

  咱們在前面的安裝過程當中已經配置了HADOOP_HOME這個環境變量,所以,只須要給HADOOP_HOME_WARN_SUPPRESS配置一個值就能夠了。因此,執行命令:vi /etc/profile,增長一行內容(值隨便設置一個便可,這裏設爲0):

  export HADOOP_HOME_WARN_SUPPRESS=0

  保存退出後執行從新生效命令:source /etc/profile,生效後從新啓動hadoop進程則不會提示警告信息了。

   至此,一個Hadoop的Master節點的安裝配置結束,接下來咱們要進行從節點的配置。

--------------------------------------------------------------------------------------------------------------------------

  上面就是一個典型的僞分佈模式的安裝過程,若是想要嘗試分佈式模式安裝,能夠參考下面這個文檔:

附件請猛擊這個連接: Hadoop安裝和配置文檔v0.3
相關文章
相關標籤/搜索